Vivado中Simulator仿真软件的使用

文章目录

  • 前言
  • 一、仿真概述
  • 二、TB文件简介
  • 三、Vivado实操
  • 总结


前言

本文的主要内容是介绍Vivado软件中Simulator的使用,这种方法相比于硬件调试不需要连接开发板,但需要编写testbench文件。


一、仿真概述

仿真是帮助我们定位问题、找到问题继而通过修改代码及参数等措施解决问题的重要手段。仿真是一个迭代过程,通常会重复进行,直到满足设计功能和时间需求为止。
仿真可以应用于设计流程中的多个阶段,它是设计输入后的第一个步骤,也是实现后的最后一个步骤,作为验证设计的最终功能和性能的一部分。
硬件调试与仿真的区别: 硬件调试需要连接开发板,还会消耗片上资源,所以很难观察一段时间内的变化,仿真则没有这些问题,但是需要编写输入激励文件(testbench文件)。
FPGA设计流程如下图所示。
Vivado中Simulator仿真软件的使用_第1张图片
设计输入包括Verilog代码的编写,定义IP核等操作。
RTL仿真也叫功能仿真,它跟硬件没有关系,只是检查设计的输入有没有逻辑错误或是代码有没有错误。
设计综合及布局布线这两步就和硬件相关了。
时序仿真会考虑走线的延迟,真实情况下一般进行RTL仿真,时序仿真很少使用。时序满足与否一般在时序分析中进行。
功能仿真: 也称为行为仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟(硬件延迟),主要是验证电路与理想情况是否一致。
时序仿真: 也称为布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片的实际工作情况。
功能仿真与时序仿真的主要区别在于是否考虑硬件延迟。


二、TB文件简介

TB文件(testbench文件)结构:

`timescale  仿真单位/仿真精度
module test_bench(); //通常testbench没有输入与输出端口
//信号或变量定义声明,定义为wire或reg类型
//使用initial或always语句产生激励波形
//例化设计模块
endmodule

若仿真单位/仿真精度分别为:1ns/1ps,则:

#200 //取决于仿真单位,这里就是延迟200ns
#200.123 //表示延迟200.123ns,因为其精度为ps,若精度改为1ns,这里就是延迟200ns

三、Vivado实操

双击led_twinkle.xpr打开led闪烁实验的工程。
Vivado中Simulator仿真软件的使用_第2张图片
选中Simulation Sources右键,选择Add Sources…
Vivado中Simulator仿真软件的使用_第3张图片
Next后按照下图中序号顺序创建源文件。
Vivado中Simulator仿真软件的使用_第4张图片
点击Finish后完成创建,在弹出的对话框中选择蓝色的按钮即可。
双击tb_led_twinkle.v文件打开如下图。
Vivado中Simulator仿真软件的使用_第5张图片
在tb_led_twinkle.v文件中编写代码如下:

`timescale 1ns / 1ps

module tb_led_twinkle();
reg sys_clk;
reg sys_rst_n; 
wire [1:0] led; 
//初始化
initial begin
	sys_clk = 1'b0;
	sys_rst_n = 1'b0;
	#200 //延迟200ns
	sys_rst_n = 1'b1; //延迟200ns后拉高复位信号
end 
//时钟生成
always #10 sys_clk = ~sys_clk; 
//时钟频率为50MHZ,周期为20ns,因此每延迟10ns,时钟翻转一次
//例化待测设计 
led_twinkle u_led_twinkle(
	.sys_clk (sys_clk),
	.sys_rst_n (sys_rst_n),
	.led (led)
	);
endmodule

保存后选择SIMULATION下的Run Simulation,选择第一个行为仿真。
Vivado中Simulator仿真软件的使用_第6张图片
仿真完成后如下图所示,可以看到软件已经仿真了一段时间,但是看不太清楚。
Vivado中Simulator仿真软件的使用_第7张图片
点击下图中圈中的按钮,可以看到适合的范围,仿真默认时间为1000ns,这个时间是可以设置的。
Vivado中Simulator仿真软件的使用_第8张图片
按照下图中的序号依次点击便可以设置默认的仿真时间。
Vivado中Simulator仿真软件的使用_第9张图片
仿真波形这里缺少计数器,按照下图先选中u_led_twinkle,再选中cnt信号拖到波形仿真框中,或者右击cnt信号选择Add to Wave Window,或者右击u_led_twinkle选择Add to Wave Window,这几种方法都可以把cnt信号加到仿真波形窗口里。
Vivado中Simulator仿真软件的使用_第10张图片
在下面框中的地方可以设置仿真的时长和单位,我这里设置为50us,点击运行按钮。
Vivado中Simulator仿真软件的使用_第11张图片
运行结果如下图所示。
Vivado中Simulator仿真软件的使用_第12张图片
可以看到总共运行了51us,并且cnt信号在第1us时没有输出,这是因为cnt信号在初始运行的1us时未添加进来,点击上方圈中的复位按钮,再按运行按钮即可仿真50us的波形,如下图所示。
Vivado中Simulator仿真软件的使用_第13张图片
放大信号后添加标记来测量时钟周期,首先在一个上升沿添加标记,然后将光标移动到下一个上升沿,再添加标记,然后单击第一个标记,下方就出现了标尺,可以看到,两个标记间的距离正好是20ns,符合我们代码中的预设。
Vivado中Simulator仿真软件的使用_第14张图片
如下图,复位信号是在延迟了200ns之后被拉成高电平,也符合代码中的预设。
Vivado中Simulator仿真软件的使用_第15张图片
如下图,当我们需要观察led的变化情况时,发现led一直是一个状态,这是因为源代码中的led交替闪烁周期太长,这里仿真的精度很大,所以需要修改代码以减小led的闪烁周期。
Vivado中Simulator仿真软件的使用_第16张图片
在源代码中注释掉时间较长的两行代码,替换为用于仿真的代码,然后点击Relaunch simulation按钮仿真。
Vivado中Simulator仿真软件的使用_第17张图片
仿真波形如下图所示,led显然有了交替,但是01持续的时间比10持续的时间短,这是因为一个周期为奇数个计数单元,不能均分。
Vivado中Simulator仿真软件的使用_第18张图片
再次修改下面一行代码如下,保存后按下Relaunch simulation查看波形。

else if(cnt < 26'd10-1)  //仅用于仿真

波形图如下,这次01持续的时间和10持续的时间就相等了。
Vivado中Simulator仿真软件的使用_第19张图片
右击SIMULATION,选择Close Simulation即可关闭仿真界面。
Vivado中Simulator仿真软件的使用_第20张图片
别忘了仿真完成后恢复原来的代码,否则将生成的比特流文件下载到开发板看不到led交替闪烁的效果。
Vivado中Simulator仿真软件的使用_第21张图片
到这里,Vivado中Simulator仿真软件的使用就介绍完了。


总结

以上就是Vivado中Simulator仿真软件的使用的所有内容了,可以结合上节内容:使用Vivado软件进行硬件调试 比较其异同。
本文参考视频为:https://www.bilibili.com/video/BV1hP4y1L73N?p=13 & https://www.bilibili.com/video/BV1hP4y1L73N?p=14。

你可能感兴趣的:(zynq,zynq)