13.在观察完RTL图之后,再想刚才一样建立一个.v文件,并输入代码。如图:
`timescale 1ns/1ps module led_tb; reg signal_a;//激励信号定义,对应连接到待测试模块的输入端口 wire led;//待检测信号定义,对应连接到待测试模块的输出端口 //例化待测试模块 led led_0( .key_in (signal_a), .led_out (led) ); //产生激励 initial begin signal_a = 0; #100; //延时100ns signal_a = 1; #200; //延时200ns signal_a = 0; #100; //延时100ns signal_a = 0; #200; //延时200ns $stop; end endmodule |
这段代码的意思是:
一、·timescale 定义仿真时间单位与精度,1ns是时间单位,即在仿真中用#10表示延迟10ns。1ps表示时间精度,比如你写 #3.5547968525 a <= 1;c <= 1;,那么它时间精度也只会有1ps(即在3.555ns时赋值语句便生效)。
二、定义了一个signal_a信号,将它连接到key_in信号,signal_a怎么变化,就决定了led模块的key_in信号怎么变化。
三、首先,signal_a一开始为0,100ns后变为1,再过200ns后变为0;再过100ns后变仍为0;再过200ns后,仿真结束。
14.保存这个仿真文件到tb文件夹之下,并把这个文件命名为led_tb,如图:
15.点击保存后,对这个.v文件也进行分析和综合。无错误的话,表示testbenth文件无基本错误。
16.设置仿真文件。如图,在菜单栏Assignment中选择Settings。
在弹出的新窗口中,依次选择:
再次弹出新窗口,选择New:
又弹出一个新窗口,按序号依次操作:
先点击红色1处,选择tb文件,要选.v文件不要选择.v.bak文件如图:
接着,将1处的文件名复制到2处,3处自动填写,然后点击4处的Add,最后点击下方的OK即可。
回到上一层,继续选择OK。
回到更上一层,先选择Apply,再选择OK。
17.接着,在菜单栏点击如图的图标,启动仿真。
18.在弹出的仿真界面中,进入wave界面:
然后点击上方的如图按钮:
然后看到全波形,如图:
可以看到,signal_a一开始为0,100ns后变为1,再过200ns后变为0;再过100ns后变仍为0;再过200ns后,仿真结束。而led信号和signal_a信号同步变化,故此工程满足设计要求,仿真无误。这个仿真时功能仿真,也称为前仿真。
19.完成前仿真后,关闭modesim,回到原先的界面,选择Start Compilation,进行综合&布局布线
待完成无误后,界面如下:
接着选择如图按钮进行后仿真,后仿真更接近真实的情况,而前仿真是理想情况。
弹出小窗口,选择所需条件后,点击run。
在弹出的仿真界面中,继续去看wave。此时我们可以发现,后仿真的波形图发生了变化:
led信号没有和signal_a信号同步变化,而是落后于signal_a信号,由于我们的这次工程非常简单,此情况并影响不大。仿真到此结束。