第二节 FPGA的modelsim仿真
第一节我们进行了组合逻辑电路与或非的设计,现在进行仿真。我们一般所进行的仿真是功能仿真,也叫前仿真。首先先看缩减运算的仿真,这里需要自己写testbench。笔者用的是ISE,可以直接联合modesim仿真。仿真代码如下:
`module vtf_and_gate;
// Inputs
reg [3:0] a;
// Outputs
wire [1:0] s;//输出拿一根线引出来
// Instantiate the Unit Under Test (UUT)
and_gate uut (
.a(a),
.s(s)
);
initial begin
// Initialize Inputs
a = 0;
// Wait 100 ns for global reset to finish
#100
// Add stimulus here
#20 a=4'b1010;
#20 a=4'b1011;
#20 a=4'b1100;
#20 a=4'b0000;
#20 a=4'b0011;
#20 a=4'b1111;
end
endmodule
`
可以看出缩减运算中是全为1才会输出1。这里注意一下,输入变化,输出立刻会跟随变化吗?怎么没有延时呢?
因为我们这里仅仅进行的是功能仿真。仅仅只是考虑了编写的verilog hdl功能正确与否。在实际电路中,因为线路的长短温度不一样会导致有毛刺,从而产生错误输出。这就是竞争与冒险,在后续的时序仿真中我们会讲如何消除。
下面在进行逻辑与的仿真,代码如下:module vtf_and_gate;
// Inputs
reg [1:0] a;
reg [1:0] b;
// Outputs
wire [1:0] s;//输出拿一根线引出来
// Instantiate the Unit Under Test (UUT)
and_gate uut (
.a(a),
.b(b),
.s(s)
);
initial begin
// Initialize Inputs
a = 0;
b=0;
// Wait 100 ns for global reset to finish
//#100
// Add stimulus here
#20
a=2'b01;
b=2'b10;
#20
a=2'b01;
b=2'b01;
#20
a=2'b11;
b=2'b11;
#20
a=2'b11;
b=2'b00;
end
endmodule
逻辑与只要a,b有值即为真。
再看按位与。只要将程序中的&&改成&就好啦,程序在第一节里。
是不是对比很明显,接下来可以下载到板子上,利用按键给与门信号,输出接发光二极管,就可以实际的观察啦。注意下载程序的时候fpga中的sdram是掉电丢失数据的,所以可以下载到flash中。自己用自己的开发板测试把。