Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
2017-10-11 18:25
666 查看
文章来源:http://www.paincker.com/vivado-basic-usage-1
打开Vivado软件,直接在欢迎界面点击
点击
输入工程名称和路径。
选择
根据自己的开发板选择器件型号,可以直接通过型号进行搜索,例如Basys3开发板上的芯片型号为
点击
在
选择
点击
可以一次性新建或添加多个文件,最后点击
稍后会弹出定义模块的窗口,也就是刚刚添加的test文件。可以在这里设置test模块的输入输出端口;或者直接点击
点击
test文件和对应的模块即创建完成,如图。
操作和上一步添加Verilog设计文件基本一致,唯一的区别是选择
设计文件新建完成后,在
打开test模块,编写代码实现一个简单的非门电路如下。
为了验证代码是否正确,可以对代码进行行为仿真。我们给上面的test模块输入端
行为仿真时,输入信号可以使用Testbench编写。
如果直接修改test模块,在其中添加Testbench代码,再进行仿真,是一种不太正确的做法。因为test模块是设计文件,后面可能会直接烧写进板子。进行仿真时添加了Testbench代码,之后再烧写进板子又得删掉Testbench代码,这样容易出现错误,而且操作起来也比较麻烦。尤其是接口数量多,内部比较复杂的模块。
所以我们将Testbench代码全部写到仿真文件simu中,并在simu文件中调用test模块,从而进行仿真。
在simu模块中编写代码如下。
代码说明:
更多Testbench的写法请上网搜索相关资料。
右击simu模块,选择
在
稍后
双击图中右侧的
如图,可以看出
在
右击信号,选择
对于一些输出数字信号波形的情况,例如让
Style - Analog,即可以波形的形式查看信号。如图显示的就是正弦波信号(注意这里信号本身还是数字信号,并不是模拟信号,只是用软件显示出了其幅值随时间变化的波形)。
对于多位信号例如
新建工程
打开Vivado软件,直接在欢迎界面点击Create New Project,或在开始菜单中选择
File - New Project即可新建工程。
点击
Next
输入工程名称和路径。
选择
RTL Project,勾选
Do not specify......(这样可以跳过添加源文件的步骤,源文件可以后面再添加)。
根据自己的开发板选择器件型号,可以直接通过型号进行搜索,例如Basys3开发板上的芯片型号为
xc7a35tcpg236-1。如果不了解或者暂时不写进开发板,可以随便选一个型号,后面需要的时候再修改。
点击
Finish,项目新建完成。
添加Verilog设计文件(Design Source)
在Project Manager窗口中,选择
Source子窗口,在空白处或任意文件夹上右击,选择
Add Sources。
选择
Add or Create Design Sources,点击
Next。
点击
Create File按钮,弹出的小窗口中输入文件名,点击
OK。
可以一次性新建或添加多个文件,最后点击
Finish。
稍后会弹出定义模块的窗口,也就是刚刚添加的test文件。可以在这里设置test模块的输入输出端口;或者直接点击
OK,稍后再自行编写。
点击
OK后,如果弹出下面窗口直接点击
Yes。
test文件和对应的模块即创建完成,如图。
添加Verilog仿真文件(Simulation Source)
操作和上一步添加Verilog设计文件基本一致,唯一的区别是选择Add or Create Simulation Sources。我们新建一个名为simu的仿真文件。
设计文件新建完成后,在
Design Sources和
Simulation Sources中都有,而仿真文件只会出现在
Simulation Sources文件夹中。设计文件可以用于仿真,也可以用于最终烧写进开发板,而仿真文件仅用于仿真。
编写代码
打开test模块,编写代码实现一个简单的非门电路如下。module test(
input in,
output out
);
assign out = ~in;
endmodule
行为仿真(Behavioral Simulation)与Testbench
为了验证代码是否正确,可以对代码进行行为仿真。我们给上面的test模块输入端in接入一个时钟信号,则输出端
out就会产生一个电平相反的时钟信号。
行为仿真时,输入信号可以使用Testbench编写。
如果直接修改test模块,在其中添加Testbench代码,再进行仿真,是一种不太正确的做法。因为test模块是设计文件,后面可能会直接烧写进板子。进行仿真时添加了Testbench代码,之后再烧写进板子又得删掉Testbench代码,这样容易出现错误,而且操作起来也比较麻烦。尤其是接口数量多,内部比较复杂的模块。
所以我们将Testbench代码全部写到仿真文件simu中,并在simu文件中调用test模块,从而进行仿真。
编写仿真代码
在simu模块中编写代码如下。module simu(
);
// testbench 时钟信号
reg clk = 0;
always #10 clk <= ~clk;
// 输出信号
wire out;
// 调用test模块
test mytest(clk, out);
endmodule
代码说明:
reg clk = 0声明了一个reg信号,并赋初值为0。
always #10 clk <= ~clk为testbench代码,让clk每隔10ns翻转一次,产生周期为20ns的时钟信号。
wire out声明了一个wire信号,用于连接到test模块的输出。
test mytest(clk, out)调用了前面写好的test模块,其中
mytest是模块名称,这里的
clk和
out分别连接了
mytest模块内部的
in和
out信号。这种写法类似于面向对象的编程语言中,对象的实例化,test为类名,而
mytest为对象名称。同样,Verilog中调用模块时,可以实例化多个test对象。
更多Testbench的写法请上网搜索相关资料。
行为仿真
右击simu模块,选择Set as Top,将simu模块设置为仿真时的顶层模块。顶层模块类似于C编程时的入口函数,即
main函数。main`函数可以调用其他子函数;类似的,顶层模块可以调用其他模块。
在
Flow Navigator窗口中点击
Run Simulation - Run Behavioral Simulation;或者在菜单中选择
Flow - Run Simulation - Run Behavioral Simulation,即可启动行为仿真。
稍后
Behavioral Simulation窗口打开,即可看到输出的仿真波形。
操作技巧
双击图中右侧的Untitled 2标签,可以最大化仿真波形窗口。在波形窗口按住Ctrl键并滚动鼠标滚轮,可以横向缩放波形;按住Shift并滚动鼠标滚轮,可以横向平移波形。
如图,可以看出
clk为周期20ns的时钟信号,而
out和
clk的电平始终相反,即test模块中的非门工作正确。
在
Behavioral Simulation窗口中的
Scopes子窗口,根据模块调用关系选中
mytest,在右侧的
Objects窗口即可看到test模块中所有的信号(包括内部信号,即没有写到模块声明语句
module(a,b,c)括号中的信号)。
右击信号,选择
Add To Wave Window,可将波形添加到右侧的仿真波形窗口,保存仿真文件,再次仿真时就可以看到该信号的波形。
对于一些输出数字信号波形的情况,例如让
reg [7:0] sine_out输出正弦波,仿真后右击信号,选择Waveform
Style - Analog,即可以波形的形式查看信号。如图显示的就是正弦波信号(注意这里信号本身还是数字信号,并不是模拟信号,只是用软件显示出了其幅值随时间变化的波形)。
对于多位信号例如
wire [7:0] p,默认使用二进制形式显示,可以根据需要修改。例如右击选择
Radix - Unsigned Decimal即可设置为无符号十进制显示,如图。
相关文章推荐
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Xilinx Vivado的使用详细介绍:使用IP核、例化IP
- 在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
- 在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Java四种线程池的介绍及详细使用代码示例
- 代码适配Masonry使用的详细介绍
- 代码加约束VFL语法的详细使用介绍(代替Autolayout进行布局,比Autolayout更简单明了,生动直观)
- 使用Vivado进行行为级仿真