继续之前的工作,总一下就是安装了环境,创建了工程,添加了文件,编写了代码,接下来就是编译运行看环境是否成功。
我们的测试工程为流水灯程序,那么只需要在仿真环境中输出特定的波形就可以了
按下图操作:
然后要配置:在Simulation Settings窗口中设置程序运行50ms,然后点击OK
注意:又要添加文件了,这一次的文件叫做激励测试文件
还是在右侧点击 add Sources -> add or create simulation sources -> next -> create file ,然后命名为vtf_led_test.
按图操作:
然后这里不添加IO ports
所以目前为止添加了三个文件,led_test.v,led.xdc,vtf_led_test.v(刚刚加的这个),文件结构如下图:
双击这个文件添加如下代码(添加完记得保存所有文件)
`timescale 100ps / 1ps
//
// Module Name: vtf_led_test
//
module vtf_led_test;
// Inputs
reg sys_clk_p;
wire sys_clk_n;
reg rst_n;
// Outputs
wire [3:0] led;
// Instantiate the Unit Under Test (UUT)
led_test uut (
.sys_clk_p(sys_clk_p),
.sys_clk_n(sys_clk_n),
.rst_n(rst_n),
.led(led)
);
initial begin
// Initialize Inputs
sys_clk_p = 0;
rst_n = 0;
// Wait 100 ns for global reset to finish
#1000;
rst_n = 1;
// Add stimulus here
#20000;
// $stop;
end
always #25 sys_clk_p = ~ sys_clk_p; //5ns一个周期,产生200MHz时钟源
assign sys_clk_n=~sys_clk_p;
endmodule
要开始仿真了!!!!
你会看到仿真波形如下:
到此,环境安装完成。
验证一下:前面设置程序仿真50ms,这里可以看出程序的波形指导只到了50ms
按照程序所写(前提时钟200Mhz,阅读下面代码就会知道每250ms,流水灯就会跳变一下。)
always @(posedge sys_clk or negedge rst_n)
begin
if (~rst_n)
led <= 4'b0000; //when the reset signal active
else if (timer == 32'd49_999_999) //time counter count to 0.25 sec,LED1 lighten
led <= 4'b0001;
else if (timer == 32'd99_999_999) //time counter count to 0.5 sec,LED2 lighten
begin
led <= 4'b0010;
end
else if (timer == 32'd149_999_999) //time counter count to 0.75 sec,LED3 lighten
led <= 4'b0100;
else if (timer == 32'd199_999_999) //time counter count to 1 sec,LED4 lighten
led <= 4'b1000;
程序验证正确。