【0基础学会Verilog】004. 学会使用Vivado自带仿真器

这篇具有很好参考价值的文章主要介绍了【0基础学会Verilog】004. 学会使用Vivado自带仿真器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编写好实现指定功能的Verilog模块后,需要对其进行仿真来验证模块的正确性,这需要用到EDA开发工具的仿真器,我们选择Xilinx公司的Vivado自带的仿真工具进行仿真。


1. 编写仿真模块

在前面的章节已经学习了为Verilog模块编写基本的测试模块,即testbench的基本步骤和方法。本文不再赘述,直接罗列代码如下。

  • 组合逻辑版calc()模块
//用组合逻辑实现与calc_v2()函数相同的功能
module calc_wire(
    input wire [31:0] a,
    input wire [31:0] b,
    input wire [31:0] c,
    output wire [31:0] sum
);
    wire [31:0] tmp;
    assign tmp = (a+b) - c * 8;
    assign sum = tmp;
endmodule

  • 时序逻辑版calc()模块

//用时序逻辑实现与calc_v2()函数相同的功能,计算表达式((a+b) - c * 8)的值
module calc_reg(
    input clk,
    input wire [31:0] a,
    input wire [31:0] b,
    input wire [31:0] c,
    output reg [31:0] sum
);
//声明一个位宽32bit的reg型变量tmp
reg [31:0] tmp;

//alway块用于对reg型变量赋值tmp
always @(posedge clk) tmp <= (a + b) - c * 8;

//又一个alway块用于对reg型变量赋值sum 
always @(posedge clk) begin
  sum <= tmp;
end

endmodule
  • 综合测试模块

之前博文针对单个Verilog模块calc_reg和calc_wire分别编写了两个testbench,这是为了让大家了解组合逻辑和时序逻辑的区别。实际上,对一个模块而言,一般来说既包含组合逻辑,也会包含时序逻辑,对应的testbench也不会刻意在模块级区分组合逻辑或时序逻辑。下面,我们编写一个对calc_wire和calc_reg两个模块进行综合比对测试的模块,这样可以更好地理解组合逻辑和时序逻辑的区别。

//时间单位:1ns, 时间精度:1ps
`timescale 1ns/1ps     

module calc_testbench();
    
    //1. 时序逻辑需要至少一个时钟信号
    //   因此,testbench必须生成一个虚拟的时钟信号
    reg clk;
    initial begin
        clk = 0;

        forever begin
            #50;       //50ns, 一个时钟周期为50ns*2 = 100ns
            clk = ~clk;
        end
    end

    //2. 给出待测模块需要的输入参数
    reg [31:0] aa;
    reg [31:0] bb;
    reg [31:0] cc;

    initial begin
        aa = 30;
        bb = 40;
        cc = 2;
        #10;     //wait for 10ns, less than one clk period
        bb = 90;
        #5;
        cc = 5;    
        #55;
        aa = 20;  
        #206;
        aa = 100;
        bb = 10;
        cc = 20;     
    end


    //3. 调用待测试函数calc_reg,并将结果保存到整数dd中
    //   将信号aa,bb,cc的值分别传递给模块的输入参数a,b,c
    //   并将模块运算结果通过sum_0提取出来    
    //   时序逻辑需要时钟信号clk也由外部输入
    wire [31:0] sum_0;

    calc_reg dut_0(
        .clk(clk),    //时序逻辑必须输入时钟信号

        .a(aa),
        .b(bb),
        .c(cc),

        .sum(sum_0)
    );

    //4. 用相同的输入数据例化组合逻辑模块calc_wire
    //   将信号aa,bb,cc的值分别传递给模块的输入参数a,b,c
    //   并将模块运算结果通过sum提取出来
    wire [31:0] sum_1;
    calc_wire dut_1(
        .a(aa),
        .b(bb),
        .c(cc),

        .sum(sum_1)
    );


    //5. 显示函数计算的结果用于比对和验证
    initial begin
        #3000;

        $display("reg: (%d + %d) - %d * 8 =  %d",aa,bb,cc,sum_0);
        $display("wire: (%d +%d) - %d * 8 =  %d",aa,bb,cc,sum_1);

        $finish;
    end
endmodule

2. 建立Vivado工程并添加Verilog文件

  • 打开Vivado,新建一个名为simulation_demo的项目
    (1)点击菜单【File】–【Project】–【New】新建工程
    (2)在弹出界面点击【Next】
    (3)修改项目名称和存放位置

    Project Name: simulation_demo
    Project Location: 选择某个容易找到的位置(/home/dayao/tmp)
    勾选Create project subdirectory

    (4)点击【Next】勾选RTL Project
    (5)点击【Next】直到选择Parts也就是FPGA芯片型号的界面。
    (6)选择一款FPGA芯片,比如Artix-7系列芯片xc7a100tfgg484-2
    (7)点击【Next】,直到【Finish】

  • 为新项目添加可综合设计模块(Design module)
    (1)复制上面calc_wire()calc_reg()模块的源码分别保存为文件calc_wire.vcalc_reg.v,将文件保存到项目所在文件夹下,比如文件夹/home/dayao/tmp/simulation_demo/下。
    (2)将文件calc_wire.vcalc_reg.v添加到Vivado工程, 注意添加文件时选择Add or Create design sources,因为这两个文件是生成实际硬件模块的可综合设计模块

  • 添加仿真模块(Simulation module)
    (1) 上面calc_testbench()模块源码的内容为calc_testbench.v,同样放在文件夹/home/dayao/tmp/simulation_demo/下。
    (2) 将文件calc_testbench.v添加到Vivado工程, 注意添加文件时注意选择Add or Create simulation sources,因为这个文件是仿真文件,并不会生成实际的硬件模块。

完成上面的步骤后,应该在Vivado的源码管理界面看到如下结构
vivado自带仿真,0基础学会Verilog,fpga开发,c语言


3. 使用Vivado自带仿真器仿真

现在可以使用Vivado自带仿真器进行数据仿真了。

点击Vivado的【Flow Navigator】–【SIMULATION】-【Run Simulation】–【Run Behavioral Simulation】启动Vivado仿真界面,开始编译仿真模块并显示仿真结果,如果没有错误,应该出现下面的仿真结果界面。
vivado自带仿真,0基础学会Verilog,fpga开发,c语言
注意:上面的波形图中,数据都是以十进制的形式表示的,Vivado默认的数据格式是十六进制,有时不方便观察。在仿真界面可以二进制、八进制、十进制和十六进制等多种形式表现。方法如下:

(1) 选中需要修改进制的信号(可以多选)点击右键弹出下拉菜单如下图所示;
(2) 下拉菜单中选择【Radix】–

vivado自带仿真,0基础学会Verilog,fpga开发,c语言

Binary : 二进制
Hexadecimal: 十六进制
Octal: 八进制
ASCII: 字符
Unsigned Decimal: 无符号十进制数
Signed Decimal: 有符合十进制数文章来源地址https://www.toymoban.com/news/detail-762530.html


4. 扩展练习

  1. 编写一个计数器模块(couter),该计数器从0开始计数,计数到255时返回0,再次开始计数。
  2. 为这个**计数器模块(couter)**编写testbench,验证模块的功能是否正确。

到了这里,关于【0基础学会Verilog】004. 学会使用Vivado自带仿真器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子STM32】STM32初体验(Keil MDK工具下载使用、DAP仿真器、MDK上配置DAP、Debug)

    一、MDK5编译例程 二、串口下载程序 2.1、串口下载程序须知 2.2、串口下载硬件连接 2.3、配置下载工具 (ATK-XISP.exe) 2.4、STM32启动模式(M3和M4) 三、DAP下载程序 3.1、DAP下载硬件连接 3.2、在MDK上配置DAP 不同开发板的下载算法有所不同 Build构建 F7、Download下载 F8 四、DAP调试程序 4.

    2024年02月20日
    浏览(31)
  • 基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench

    目录 1.算法描述 2.仿真效果预览 3.verilog核心程序 4.完整verilog          AES, 高级加密标准, 是采用区块加密的一种标准, 又称Rijndael加密法. 严格上来讲, AES和Rijndael又不是完全一样, AES的区块长度固定为128比特, 秘钥长度可以是128, 192或者256. Rijndael加密法可以支持更大范围的区

    2024年02月01日
    浏览(42)
  • stm32f103c8t6单片机使用st-link/v2仿真器烧录程序的过程

    1、首先,电脑usb接口接上仿真器ST-LINK/V2,查看设备管理器。 若连接正常,则出现上图红线部分 2、ST-link/v2与stm32f103c8t6的连接,如下图 对应引脚相连接即可。 3、stm32f103c8t6 烧录时单片机必须接电,我一般boot0,boot1都接0(这一步单片机的启动方式没懂) 4、烧录程序 STM32F1

    2023年04月12日
    浏览(32)
  • 基于Verilog的mips指令集单周期/五级流水cpu,modelsim/vivado仿真设计 设计

      1、了解提高CPU性能的方法。 2、掌握流水线微处理器的工作原理。 3、理解数据冒险、控制冒险的概念以及流水线冲突的解决方法。 4、掌握流水线微处理器的测试方法。 设计一种五级流水线的基于MIPS指令集的处理器,其可支持部分指令,能够处理指令相关和数据相关,使

    2024年02月12日
    浏览(30)
  • 在7段数码管上显示自己的最后三位学号数字Verilog代码Vivado仿真

    名称:在7段数码管上显示自己的最后三位学号数字Verilog代码Vivado仿真(文末获取) 软件:Vivado 语言:Verilog 代码功能: 在7段数码管上显示自己的最后三位学号数字 1.实验任务 要求将自己的最后三位学号数字在数码管上显示2、实验现象与结果 应能看见自己学号稳定的在数

    2024年02月21日
    浏览(32)
  • ARM仿真器:重刷固件

    相信很多人在开发的时候用的都用的时山寨版的ARM仿真器Jlink,那么很可能就会遇到这种问题: 上述图片引自: 实记JLink-V8刷固件方法(照着做即可成功) (baidu.com) 很明显,必须重新给jlink重新刷一遍程序了。 在网上搜索了很多方法 : JLINK v9 固件使用另一个JLINK重刷_jlink li

    2024年02月03日
    浏览(27)
  • 如何用DAP仿真器下载程序

      把仿真器用USB线连接至电脑,如果仿真器的灯亮则表示正常,可以使用。再把仿真器的另外-端连 接到开发板,给开发板上电,就可以通过软件KEIL或者IAR给开发板下载程序,仿真器见图1。     在仿真器连接好电脑和开发板且开发板供电正常的情况下,打开编译软件KEIL,在

    2024年02月08日
    浏览(29)
  • 华为存储IA篇仿真器搭建

    编号 设备名 数量 备注 01 Windows系统主机 1台 为VMware提供安装位置 02 VMware软件 1份 提供存储仿真器的部署环境 03 仿真器文件 1份 用于部署estor虚拟机 【注意】:暂无注意事项         1.4 选择兼容性为10.x,下一步 1.5 稍后安装系统, 下一步     1.6 设置suse11 64位系统,下一步

    2024年02月08日
    浏览(31)
  • Ubuntu下安装Gazebo仿真器

    Gazebo仿真平台通常需要配合ROS使用,因此需要先安装ROS 。可以参考ROS安装教程 首先安装一些必要的工具 修改源 update 一下更新 运行下载 gazebo 启动 Gazebo gazebo安装成功

    2024年01月22日
    浏览(33)
  • 【详细】Ubuntu20.04系统安装Airsim仿真器

    目录 一.必要的设置 1.注册一个Epic Games帐户 2.注册一个 Github 账户 3.关联 二.下载UE4 on Linux 方法1:使用GitHub页面上的下载功能 方法2:使用 git(代码行) 1.http 2.git 三.编译UE4 1.进入工程文件夹 2.运行脚本,配置依赖环境 3.运行工程配置脚本 4.编译UE4 5.测试安装 四.下载 Airsim

    2024年01月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包