ZYNQ之FPGA学习----Vivado功能仿真

news2025/7/19 21:01:59

1 Vivado功能仿真

阅读本文需先学习: FPGA学习----Vivado软件使用

典型的FPGA设计流程,如图所示:

在这里插入图片描述
图片来自《领航者ZYNQ之FPGA开发指南》

Vivado 设计套件内部集成了仿真器 Vivado Simulator,能够在设计流程的不同阶段运行设计的功能仿真和时序仿真,结果可以在 Vivado IDE 集成的波形查看器中显示。Vivado 还支持与ModelSim、Verilog Compiler Simulator (VCS)、Questa Advanced Simulator等第三方仿真器的联合仿真

功能仿真需要的文件:

  • 设计 HDL 源代码,也被称为 UUT(Unit Under Test): 可以是 VHDL 语言或 Verilog 语言,既可以是设计的顶层模块,也可以是设计的下层子模块
  • 测试激励代码,也被称为 TestBench: 根据 UUT 顶层输入/输出接口的设计要求,来产生顶层输入接口的测试激励并监视顶层输出接口
  • 仿真模型/库: 根据设计内调用的器件供应商提供的模块而定,如:FIFO、ADD_SUB 等。在使用Vivado Simulator 时,仿真器所需的仿真模型/库是预编译好并集成在 Vivado 中的,因此不需要进行额外的预编译操作,直接加载 HDL 设计和 TestBench 即可执行仿真

1.1 创建TestBench

点击Sources窗口中的+,如图所示:

在这里插入图片描述

弹出如下窗口,选择Add or Create Simulation Sources,然后点击Next:

在这里插入图片描述

如图所示,点击Create File:

在这里插入图片描述

弹出的窗口中输入TestBench的文件名,然后点击OK,如图所示:

在这里插入图片描述

点击Finish,如图所示:

在这里插入图片描述

弹出的自动定义模块窗口中,点击OK,结束TestBench 源文件端口的定义,如图所示:

在这里插入图片描述

弹出一个模块定义的确认按钮,点击Yes,如下图所示:

在这里插入图片描述

在 Source 窗口中的Simulation Sources下面的sim_1中找到创建的TestBench文件,双击打开,如图所示:

在这里插入图片描述

删除文件中默认的代码,然后替换成 LED 灯闪烁的 TestBench(激励)代码,代码如下:

`timescale 1ns / 1ps //仿真时间单位为1ns,精度为1ps
  
module tb_led_twinkle (); //TestBench 的模块名定义

//输入 
reg           sys_clk; 
reg           sys_rst_n; 
  
//输出 
wire  [1:0]   led; 

//信号初始化
initial  begin 
    sys_clk = 1'b0; 
    sys_rst_n = 1'b0; 
    #200 
    sys_rst_n = 1'b1; 
end 
 
//生成时钟 
always #10 sys_clk = ~sys_clk; 

//例化待测设计 
led_twinkle  u_led_twinkle( 
    .sys_clk         (sys_clk ), 
    .sys_rst_n       (sys_rst_n ), 
    .led             (led) 
    ); 

endmodule

为了便于仿真,稍微改动一下led_twinkle.v文件的代码,将计时器 cnt 的最大计时值设为 10,如下图所示:

module led_twinkle(
    input sys_clk, //系统时钟
    input sys_rst_n, //系统复位,低电平有效
    output [1:0] led //LED灯
);
reg [25:0] cnt;

//对计数器的值进行判断,以输出 LED 的状态
//assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;
assign led = (cnt < 26'd5) ? 2'b01 : 2'b10 ;//仅用于仿真
//计数器在 0~5000_000 之间进行计数
always @ ( posedge sys_clk  or  negedge sys_rst_n)  begin
    if(!sys_rst_n)
        cnt <= 26'd0;
    //else if(cnt < 26'd5000_0000)
    else if(cnt < 26'd10)//仅用于仿真
        cnt <= cnt + 1'b1;
    else
        cnt <= 26'd0;
end

ila_0 u_ila_0 (
	.clk(clk), // input wire clk

	.probe0(probe0), // input wire [0:0]  probe0  
	.probe1(probe1), // input wire [1:0]  probe1 
	.probe2(probe2) // input wire [25:0]  probe2
);

endmodule

在Flow Navigator窗口中点击Run Simulation,并选择Run Behavioral Simulation,如图所示:

在这里插入图片描述

进入仿真界面,如图所示:

在这里插入图片描述

  • Scope 窗口。 Scope(范围)是 HDL 设计的层次划分,可以看到设计层次结构。选择一个 Scope 层次结构中的作用域时,该作用域内的所有 HDL 对象,包括 reg、wire 等都会出现在Objects窗口中
  • Object 窗口。 Objects窗口会显示在Scopes窗口中选择的范围内的所有 HDL 仿真对象,如图所示:

在这里插入图片描述

  • 波形窗口。 用于显示所要观察信号的波形, 若要向波形窗口添加单个 HDL 对象或多个 HDL 对象,在Objects窗口中,右键单击一个或多个对象,然后从下拉菜单中选择Add to Wave Window选项

点击波形窗口中的保存按钮,如图所示:

在这里插入图片描述

弹出窗口,点击Yes,如图所示:

在这里插入图片描述

  • 仿真工具栏。 仿真工具栏包含运行各个仿真动作的命令按钮,如图所示:

在这里插入图片描述
工具栏从左至右依次是:

Restart: 将仿真时间重置为零,波形窗口中原有的波形都会被清除。下次执行仿真时,会从 0时刻重新开始
Run all: 运行仿真
**Run For: ** 运行特定的一段时间。 紧随在后面的两个文本框用于设定仿真时长的数值大小和时间单位
Step: 按步运行仿真,每一步仿真一个 HDL 语句
Break: 暂停当前仿真
Relaunch: 重新编译仿真源并重新启动仿真

Settings 窗口中设置默认仿真时长的参数值,如图所示:

在这里插入图片描述

点击Restart,波形窗口中的当前仿真时刻点回归到0ns:

在这里插入图片描述

如图所示,开始仿真:

在这里插入图片描述

cnt 信号默认显示为 16 进制,为了方便观察,将其设置为 10 进制。对 cnt 信号右键,在弹出的菜单中选择Radix,然后选择Unsigned Decimal,如图所示:

在这里插入图片描述

修改后,波形如图所示:

在这里插入图片描述

仿真结束后, 可以在 Flow Navigator 窗口中找到 SIMULA TION, 选择 Close Simulation ,如图所示:

在这里插入图片描述

弹出关闭仿真的确认窗口,点击OK即可:

在这里插入图片描述

致谢领航者ZYNQ开发板,开启FPGA学习之路!

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8002.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搞笑段子很皮的文案系列001,可爱有趣文案系列合集

大家好&#xff0c;我是我赢助手&#xff0c;专注于自媒体短视频去水印、去重和文案提取运营。 今天给大家分享下收集的一些文案&#xff1a;搞笑段子很皮的文案系列 1. 女人之间不用吵架&#xff0c;你比她漂亮就行了。 2. 暧昧&#xff0c;把这两个字拆开&#xff0c;就是真…

docker centos7容器中文乱码问题解决

中文乱码与yum安装失败问题 如下图所示&#xff0c;往文件里输入内容&#xff1a;测试中文乱码问题&#xff0c;结果发现乱码。 甚至如果文件名带有中文也会乱码。 执行locale命令&#xff0c;如下所示。 LANGen_US.UTF-8 LC_CTYPE"en_US.UTF-8" LC_NUMERIC"…

C++:重定义:符号重定义:变量重定义(二):解决变量重定义

C&#xff1a;重定义&#xff1a;符号重定义&#xff1a;变量重定义_hongwen_yul的博客-CSDN博客 上一篇文章中&#xff0c;我们知道解决变量重复定义其中一个办法是&#xff1a;尽量不要头文件中定义变量&#xff0c;头文件只做变量的声明。但是如果我们一定要在头文件中定义…

【2022最新核心面试资料 】最强Java面试八股文秋招offer召唤术!入职薪资53k

前言 我分享的这份秋招 Java 后端开发面试总结包含了 JavaOOP、Java 集合容器、Java 异常、并发编程、Java 反射、Java 序列化、JVM、Redis、Spring MVC、MyBatis、MySQL 数据库、消息中间件 MQ、Dubbo、Linux、ZooKeeper、 分布式 &数据结构与算法等 25 个专题技术点&…

图像生成模型简介

因为DALLE 2是基于CLIP和GLIDE模型写的&#xff0c;作者在写论文的时候弄得十分简略&#xff0c;所以直接看那篇论文可能并不会获得很多信息。今天先帮大家区分一下几个生成模型的区别。 GAN 图片来源&#xff1a;What are Diffusion Models? | LilLog (lilianweng.github.io)…

rsync远程同步

目录 一、rsync简介 1.1 rsync介绍 1.2 rsync同步方式 二、rsync特性 三、rsync与cp、scp对比 四、rsync命令 五、rsync本地复制实例 六、配置源的两种表示方法 七、Rsync 同步源 八、配置 Rsync 下行同步 九、inotify简介 十、配置RsyncInotify 实时同步 十一、r…

【linux kernel】基于ARM64分析linux内核的链接脚本vmlinux.lds.S

文章目录一、导读二、链接器是什么三、链接脚本四、linux内核的链接脚本4-1 头文件包含描述4-2 参数设置和宏定义描述4-3 SECTIONS内容分析五、linux内核的“头”六、总结一、导读 在linux内核中&#xff0c;arch目录下放置的是关于linux内核所支持的具体架构相关的代码描述文…

EFK部署centos7.9(一)ES单节点部署

Elasticsearch部署 系统类型&#xff1a;Centos7.9 节点IP&#xff1a;192.168.11.139 软件版本&#xff1a;jdk-8u121-linux-x64.tar、elasticsearch-6.5.4.tar. 1.首先上传jdk的包 tar xzf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压jdk的包 cd /usr/local/ 切…

逻辑回归预测瘀血阻络证||LogRegression 二分类 python3

要求 把数据集分为训练集和测试集使用逻辑回归训练、预测&#xff0c;得出相应的分类指标准确率accuracy&#xff0c;精确率precision&#xff0c;召回率recall&#xff0c;F1-score&#xff0c;并画出最终的ROC曲线&#xff0c;得出AUC值。 数据格式 664条样本 每条103个属性…

列的类型定义——整形类型

文章目录 前言一、整数类型的附带属性 类型名称后面的小括号unsignedauto_increment总结前言 1&#xff09;采用26字母和0-9的自然数加上下互相 ‘_’ 组成&#xff0c;命名简洁明确&#xff0c;多个单词用下划线 ‘_’ 隔开 2&#xff09;全部小写命名&#xff0c;尽量避免出…

猿创征文|计算机专业硕博研究生提高效率的10款科研工具

前言 大家好&#xff0c;我是帝都某高校的一名在读研究生&#xff0c;研究方向为人工智能安全、强化学习、漏洞挖掘。今天想跟各位计算机相关专业的硕士生、博士生们分享几款超级实用并且能够提高科研效率的工具&#xff01;&#xff01;&#xff01;希望能够得到大家的一键四…

【角点检测】 基于各向异性高斯方向导数滤波器实现图像角点检测附matlab代码

1 内容介绍 为了改进噪声鲁棒性和定位准确性,利用各向异性高斯方向导数滤波器,提出多方向角点检测算法.该算法利用一组各向异性高斯方向导数滤波器对输入图像进行卷积处理得到各个方向的滤波器响应.对于每个像素点,利用它与周围邻近像素点的滤波器响应的相关信息构造局部自相关…

Revit导入Cad图元丢失不正确解决和链接CAD功能

一、导入Cad图元丢失或者图元不正确解决&#xff1a; 导入Cad的时候我们会遇到导入图元丢失或者图元不正确等情况&#xff0c;具体解决如下 01.天正画图时一定要导出t3格式&#xff0c;因为Revit只识别t3版本 02.Cad画图时&#xff0c;最后一定要将图元炸开&#xff0c;然后在框…

NVIDIA NCCL 源码学习(五)- 路径计算

上节NCCL完成了对机器PCI系统拓扑的建图&#xff0c;其中建好的图如下所示&#xff0c;其中GPU之间是通过NVLink连接起来的 为了方便之后的搜索channel&#xff0c;接下来NCCL会先计算GPU和NIC节点到其他任意节点之间的最优路径&#xff0c;以及对应的带宽&#xff0c;即最优路…

Vue3基础——Composition API初体验、合成API详解、setup、Provide 和 inject

文章目录p19 组合式 API (Composition API)初体验p20 Vue3合成API详解p21 setup中使用生命周期函数p22 Provide 和 injectp19 组合式 API (Composition API)初体验 <template><h1 click"add">计数count: {{ count }}</h1><h1 click"incre…

51单片机笔记:定时器/计数器

单片机笔记 定时器/计数器 定时器/计数器的结构 AT89S51内部两个16位定时器/计数器&#xff1a;T0(P3.4)&#xff0c;T1(P3.5)&#xff0c;定时器/计数器T0由特殊寄存器TH0,TL0构成&#xff0c;T1由特殊功能寄存器TH1&#xff0c;TL1构成 T0,T1都有定时器和计数器两种工作模…

DuckDB学习-初识tpcds

DuckDB学习-1 文章目录DuckDB学习-1跑TPC-DS编译DuckDB支持TPC-DS扩展执行数据生成及查询TPC-DS简单分析&#xff08;v3.2.0&#xff09;事实表维度表跑TPC-DS 编译DuckDB支持TPC-DS扩展 下载代码&#xff0c;然后进源码目录&#xff0c;执行下面两个步骤。 export BUILD_TPC…

Word控件Spire.Doc 【文本】教程(19) ;如何在 C#、VB.NET 中通过 Word 中的正则表达式查找和替换文本

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

【附源码】计算机毕业设计JAVA车辆调度管理系统

【附源码】计算机毕业设计JAVA车辆调度管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

计算机毕业设计ssm+vue基本微信小程序的健康食谱交流共享平台

项目介绍 当今社会健康食谱交流共享买卖是必不可少的,人们不管走到哪里都需要有一个健康的身体,有一个强迫的体质,所以健康食谱交流共享市场也是非常火爆&#xff01;不管是健康食谱交流共享公司或者是个人都需要一套完整的管理系统来掌握整个市场信息。针对这一需求,本文设计并…