系列文章目录
那啥书接上回
FPGA verilog入门
前言
上一次在FPGA verilog入门中说到使用quartus II 对开发板进行操作点亮LED,在这个过程中实现了Verilog的编写以及在quartus II 中完成了功能性仿真,这回使用modelsim进行仿真。
提示:以下是本篇文章正文内容。
一、Modelsim工程新建
与所有工程一样,File->New->Project,这就不多说了,然后就是需要新建程序,然后把程序文件添加进工程中。
仍然以点LED为例,需要使用到的文件有led0_module.v和led_tb.vt,后者为testbench文件,类似于quartus II中的波形文件。
led0_module.v文件和上一次一样,如下所示,就不多说了。
module led0_module
(
CLK, RSTn, LED_Out
);
input CLK;
input RSTn;
output LED_Out;
/*************************************/
parameter T1S = 26'd50;//外部晶振50M
/*************************************/
reg [25:0]Count1;
always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
Count1 <= 26'd0;
else if( Count1 == T1S )
Count1 <= 26'd0;
else
Count1 <= Count1 + 1'b1;
/*************************************/
reg rLED_Out;
always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
rLED_Out <= 1'b0;
else if( Count1 >= 26'd0 && Count1 < 26'd25 )
rLED_Out <= 1'b1;
else
rLED_Out <= 1'b0;
/***************************************/
assign LED_Out = rLED_Out;
/***************************************/
endmodule
二、Testbench脚本编写
先放代码
`timescale 1 ns/ 1 ns//仿真的单位时间为1ns,精度为1ps
module led_tb;
reg clk,rstn;
wire led0_out;
initial
begin
rstn=0;
#10 rstn=1;
clk=0;
forever #1 clk=~clk;
end
led0_module U1
(
.CLK(clk),
.RSTn(rstn),
.LED_Out(led0_out)
);
endmodule
第一句timescale是对时间进行约束,第一个1ns为单位时间,可以理解为一个最基本的时钟周期的时间为1ns,第二个1ns为精度,也就是时间分辨精度,设置为1ns那么在仿真时时间坐标的单位就为1ns。
`timescale 1 ns/ 1 ns//仿真的单位时间为1ns,精度为1ps
下面这句就是对变量的声明,clk和rstn为led0_module的输入,led0_out为输出。led0_out只能为wire类型,因为在led0_module中输出变量LED_Out是使用assign被赋值,所以testbench中的led0_out只能为wire类型。
reg clk,rstn;
wire led0_out;
在下面这段代码中,对rstn和clk的行为进行了描述,forever为循环,通常用于时钟的产生,在这里为每1ns时钟电平翻转一次。
initial
begin
rstn=0;
#10 rstn=1;
clk=0;
forever #1 clk=~clk;
end
最后,下面这段代码用于对模块的实例化。我的理解是这段代码也顺便完成了信号线的pin map功能。即,将上面rstn和clk以及led0_out分别与CLK、RSTn和LED_Out相连接
led0_module U1
(
.CLK(clk),
.RSTn(rstn),
.LED_Out(led0_out)
);
三、仿真
如下图所示,全部编译完成后,在led_tb上右键simulate
然后弹出如下图所示的窗口
将几个信号拖到波形窗口,然后点击右边红圈中的按钮,多来几次,就能看到波形了
波形如下图所示
总结
本文脱离quartus II完成了对testbench的编写,并使用modelsim实现了对模块的仿真。
PS:本人写作水平比较渣,有啥不妥的地方还请及时指出。