完成一个FPGA工程的流程(二)

13.在观察完RTL图之后,再想刚才一样建立一个.v文件,并输入代码。如图:

完成一个FPGA工程的流程(二) 

`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表示延迟10ns1ps表示时间精度,比如你写 #3.5547968525 a <= 1;c <= 1;,那么它时间精度也只会有1ps(即在3.555ns时赋值语句便生效)。

二、定义了一个signal_a信号,将它连接到key_in信号,signal_a怎么变化,就决定了led模块的key_in信号怎么变化。

三、首先,signal_a一开始为0100ns后变为1,再过200ns后变为0;再过100ns后变仍为0;再过200ns后,仿真结束。

 

14.保存这个仿真文件到tb文件夹之下,并把这个文件命名为led_tb,如图:

 完成一个FPGA工程的流程(二)

15.点击保存后,对这个.v文件也进行分析和综合。无错误的话,表示testbenth文件无基本错误。

16.设置仿真文件。如图,在菜单栏Assignment中选择Settings

 完成一个FPGA工程的流程(二)

在弹出的新窗口中,依次选择:

 完成一个FPGA工程的流程(二)

再次弹出新窗口,选择New

 完成一个FPGA工程的流程(二)

又弹出一个新窗口,按序号依次操作:

 完成一个FPGA工程的流程(二)

先点击红色1处,选择tb文件,要选.v文件不要选择.v.bak文件如图:

完成一个FPGA工程的流程(二) 

接着,将1处的文件名复制到2处,3处自动填写,然后点击4处的Add,最后点击下方的OK即可。

 完成一个FPGA工程的流程(二)

回到上一层,继续选择OK

 完成一个FPGA工程的流程(二)

回到更上一层,先选择Apply,再选择OK

 完成一个FPGA工程的流程(二)

17.接着,在菜单栏点击如图的图标,启动仿真。

 完成一个FPGA工程的流程(二)

 

18.在弹出的仿真界面中,进入wave界面:

 完成一个FPGA工程的流程(二)

然后点击上方的如图按钮:

 完成一个FPGA工程的流程(二)

然后看到全波形,如图:

 完成一个FPGA工程的流程(二)

可以看到,signal_a一开始为0100ns后变为1,再过200ns后变为0;再过100ns后变仍为0;再过200ns后,仿真结束。而led信号和signal_a信号同步变化,故此工程满足设计要求,仿真无误。这个仿真时功能仿真,也称为前仿真。

19.完成前仿真后,关闭modesim,回到原先的界面,选择Start Compilation,进行综合&布局布线

 完成一个FPGA工程的流程(二)

待完成无误后,界面如下:

 完成一个FPGA工程的流程(二)

接着选择如图按钮进行后仿真,后仿真更接近真实的情况,而前仿真是理想情况。

 完成一个FPGA工程的流程(二)

弹出小窗口,选择所需条件后,点击run

 完成一个FPGA工程的流程(二)

在弹出的仿真界面中,继续去看wave。此时我们可以发现,后仿真的波形图发生了变化:

 完成一个FPGA工程的流程(二)

led信号没有和signal_a信号同步变化,而是落后于signal_a信号,由于我们的这次工程非常简单,此情况并影响不大。仿真到此结束。

完成一个FPGA工程的流程(二)

上一篇:Django - admin后台管理


下一篇:第一章 计网体系结构