[转]Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench

新建工程

打开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 SourcesSimulation Sources中都有,而仿真文件只会出现在Simulation Sources文件夹中。设计文件可以用于仿真,也可以用于最终烧写进开发板,而仿真文件仅用于仿真。

编写代码

打开test模块,编写代码实现一个简单的非门电路如下。

  1. module test(
  2. input in,
  3. output out
  4. );
  5. assign out = ~in;
  6. endmodule

行为仿真(Behavioral Simulation)与Testbench

为了验证代码是否正确,可以对代码进行行为仿真。我们给上面的test模块输入端in接入一个时钟信号,则输出端out就会产生一个电平相反的时钟信号。

行为仿真时,输入信号可以使用Testbench编写。

如果直接修改test模块,在其中添加Testbench代码,再进行仿真,是一种不太正确的做法。因为test模块是设计文件,后面可能会直接烧写进板子。进行仿真时添加了Testbench代码,之后再烧写进板子又得删掉Testbench代码,这样容易出现错误,而且操作起来也比较麻烦。尤其是接口数量多,内部比较复杂的模块。

所以我们将Testbench代码全部写到仿真文件simu中,并在simu文件中调用test模块,从而进行仿真。

编写仿真代码

在simu模块中编写代码如下。

  1. module simu(
  2. );
  3. // testbench 时钟信号
  4. reg clk = 0;
  5. always #10 clk <= ~clk;
  6. // 输出信号
  7. wire out;
  8. // 调用test模块
  9. test mytest(clk, out);
  10. endmodule

代码说明:

  • reg clk = 0声明了一个reg信号,并赋初值为0。
  • always #10 clk <= ~clk为testbench代码,让clk每隔10ns翻转一次,产生周期为20ns的时钟信号。
  • wire out声明了一个wire信号,用于连接到test模块的输出。
  • test mytest(clk, out)调用了前面写好的test模块,其中mytest是模块名称,这里的clkout分别连接了mytest模块内部的inout信号。这种写法类似于面向对象的编程语言中,对象的实例化,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的时钟信号,而outclk的电平始终相反,即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即可设置为无符号十进制显示,如图。

原文地址:https://www.cnblogs.com/tubujia/p/9261041.html

时间: 2024-08-10 21:00:23

[转]Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench的相关文章

Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写

前面一篇介绍了从新建工程一直到编写代码进行行为仿真,这篇继续进行介绍. 修改器件型号 新建工程时选择过器件型号,如果新建好工程后需要修改型号,可以选择菜单Tools - Project Settings. 弹出窗口中,点击Project Device右侧的按钮,即可选择器件型号. 综合(Synthesis) 综合类似于编程中的编译. 在Flow Navigator或Flow菜单中,选择Synthesis - Run Synthesis:或点击工具栏中的三角形按钮如图,即可开始对设计文件进行综合.

Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench

新建工程 打开Vivado软件,直接在欢迎界面点击Create New Project,或在开始菜单中选择File - New Project即可新建工程. 点击Next 输入工程名称和路径. 选择RTL Project,勾选Do not specify......(这样可以跳过添加源文件的步骤,源文件可以后面再添加). 根据自己的开发板选择器件型号,可以直接通过型号进行搜索,例如Basys3开发板上的芯片型号为xc7a35tcpg236-1.如果不了解或者暂时不写进开发板,可以随便选一个型号,

Xilinx Vivado的使用详细介绍(5):调用用户自定义封装的IP核

Zedboard OLED Display Controller IP v1 介绍 Author:zhangxianhe 本文档提供了快速添加,连接和使用ZedboardOLED v1.0 IP内核的说明.运行在ARM处理器系统上的测试应用程序用于通过其驱动程序的功能与IP进行通信. Vivado设计套件被用作开发环境.硬件验证是在Zedboard上完成的,然而,这个IP可以很容易地应用于其他主板或嵌入式系统. 平台 硬件:Zedboard xc7z020clg484-1 软件:Vivado 2

Xilinx Vivado的使用详细介绍(3):使用IP核

IP核(IP Core) Vivado中有很多IP核可以直接使用,例如数学运算(乘法器.除法器.浮点运算器等).信号处理(FFT.DFT.DDS等).IP核类似编程中的函数库(例如C语言中的printf()函数),可以直接调用,非常方便,大大加快了开发速度. 使用Verilog调用IP核 这里简单举一个乘法器的IP核使用实例,使用Verilog调用.首先新建工程,新建demo.v顶层模块. 添加IP核 点击Flow Navigator中的IP Catalog. 选择Math Functions下

xilinx vivado zynq vdma仿真及应用详解(一)

很多人用zynq平台做视频图像开发,但是对vdma了解比较少,上手起来稍微有些困难,我针对这一现象,做了一个基于vivado和modelsim的仿真和应用测试工程,并写篇文章做些介绍,希望能对大家有帮助. 一:xilinx vdma IP例化以及接口介绍 上面图片就是在vivado2015.4中例化vdma的界面,首先对参数做些介绍: Frame Buffers :选择vdma缓存几帧图像,这里默认是写通道和读通道都设置相同的缓存帧数,具体设置多少帧合适一般根据应用来定,比如读写带宽相同,想用d

JavaScript的数据类型详细介绍 &#94883;

原文: http://blog.gqylpy.com/gqy/491 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

微铺子点单系统详细介绍 - 争做国内最专业的微信商店平台,微信外卖订餐系统!

什么是微铺子? 微铺子是国内专业的微信点单系统,集成了外卖.点餐.订座等众多功能.通过微铺子,店家可以在微信上建立店铺,消费者只需关注店家的帐号,即可浏览商品与店家的信息,消费者关注到商家后,根据提示,进行点击点单,简单三步,15秒内,即可完成订餐.店家可以通过电脑后台.电子邮件.短信或无线打印机多种方式即时查看订单,并提供相应的服务. 微铺子系统适用于:餐饮.酒店.水果店.蛋糕店.花店.零售.超市等. 微铺子从创立到与合作商家的长期测试,再到正式投入商用,期间不断根据客户的需求完善产品,不断开

自动化运维工具ansible详细介绍

在学习批量管理软件时,首先要明确的知道自己需要什么,网上大神很多,他们都研究到源码上了,写了很多介绍绚丽功能的文档,但其实那些功能基本上我们都用不到,经常被各种文档弄得头脑发晕,此文就是为了简单直白的告诉大家ansible的功能,满足大家的基本需求. 首先确认批量管理我们需要什么:无外乎主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 目录 1.      ansible与saltstack对比... 2.      ansible安装... 3.      ans

详细介绍spring框架(下篇)

上篇简单介绍了spring,下面详细介绍为什么需要spring框架? Spring带给我们什么 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.有了Spring,用户不必再为单实例模式类.属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用. AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付. 声明式事务的支持 在