zynq之fpga学习----vivado功能仿真(代码片段)

鲁棒最小二乘支持向量机 鲁棒最小二乘支持向量机     2023-03-24     693

关键词:

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学习之路!

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

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

zynq之fpga学习----vivado软件使用(代码片段)

...以完成从设计输入到硬件配置的完整FPGA设计流程。Vivado学习使用版本为Vivadov18.3Vivado软件使用流程:新建工程设计输入分析与综合约束输入设计实现生成和下载比特流1.1新建工程Vivado软件启动界面如图所示,点击CreateProje... 查看详情

zynq之嵌入式学习----开篇实验helloworld(代码片段)

1ZYNQ嵌入式系统的开篇实验HelloWorld阅读本文需先学习:FPGA学习----Vivado软件使用1.1ZYNQ嵌入式系统开发流程创建Vivado工程使用IPIntegrator创建ProcessorSystem生成顶层HDL生成比特流,导出到SDK在SDK中创建应用工程板级验证开篇实验任务... 查看详情

基于vivado(语言verilog)的fpga学习——fpga理论知识

基于vivado(语言Verilog)的FPGA学习(3)——FPGA理论知识文章目录基于vivado(语言Verilog)的FPGA学习(3)——FPGA理论知识1.FPGA介绍1.1.FPGA内部结构(1).可编程逻辑块CLB(2).可编程输... 查看详情

zynq之fpga学习----spi协议驱动模块仿真实验(代码片段)

1SPI通信协议简介SPI通信协议基础知识学习:硬件设计基础----通信协议SPI2实验任务设计SPI驱动模块,并进行仿真验证,观察仿真波形3实验设计3.1创建工程新建工程,操作如图所示:输入工程名和路径,如... 查看详情

zynq之fpga学习----uart串口实验(代码片段)

1UART串口简介UART串口基础知识学习:硬件设计基础----通信协议UART2实验任务上位机通过串口调试助手发送数据给Zynq,ZynqPL端通过RS232串口接收数据并将接收到的数据发送给上位机,完成串口数据环回,管脚分配如... 查看详情

zynq之fpga学习----mmcm/pllip核使用实验(代码片段)

1MMCM/PLLIP核介绍PLL的英文全称是PhaseLockedLoop,即锁相环,是一种反馈控制电路。PLL对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能Xilinx7系列器件中的时钟资源包含... 查看详情

zynq从入门到秃头06vivado下的ip核mmc/pll实验(代码片段)

...分频,产生其他很多时钟。本实验通过调用PLLIPcore来学习PLL的使用、vivado的IPcore使用方法。实验原理PLL(phaselockedloop)loop),即锁相环。是FPGA中的重要资源。由于一个复杂的FPGA系统往往需要多个不同频率,相位的时钟信... 查看详情

zynq之hls学习----开篇实验(代码片段)

1VivadoHLS简介Xilinx推出的VivadoHLS工具可以直接使用C、C++或SystemC来对Xilinx系列的FPGA进行编程FPGA设计中从底层向上一共存在着四种抽象层级,依次为:结构性的、RTL、行为性的和高层VivadoHLS的功能简单地来说就是把C、... 查看详情

zynq之fpga学习----eeprom读写测试实验(代码片段)

...4C64,通过IIC协议实现读写操作。IIC通信协议基础知识学习:硬件设计基础----通信协议IICA 查看详情

zynq从入门到秃头03vivado软件的硬件调试(代码片段)

...经具有mark_debug属性的信号“SetupDebug”向导XDC约束文件在Vivado中进行功能仿真硬件调试简介在整个FPGA设计中,硬件调试与验证会花费超过40%的时间传统的FPGA板级调试是由外接的逻辑分析仪连接到FPGA的控制管脚,然后将内... 查看详情

fpga教程案例60深度学习案例7——基于fpga的cnn卷积神经网络之testbench编写以及cnn仿真测试

FPGA教程目录MATLAB教程目录--------------------------------------------------------------------------------------------------------------------------------目录1.软件版本2.CNN的仿真测试3.注意事项1.软件版本vivado2019 查看详情

zynq从入门到头秃02zynq硬件介绍和vivado开发流程(代码片段)

文章目录Vivado简介安装Vivado重新安装驱动开发板硬件介绍ZYNQ启动配置时钟配置PS系统时钟源PL系统时钟源PS端的外设USB转串口SD卡槽用户LED用户按键PL端的外设EEPROM24LC04扩展口J10扩展口J11用户LED用户按键Vivado开发流程手把手教你使... 查看详情

zynq之fpga学习----fifoip核使用实验(代码片段)

1FIFOIP核介绍FIFO的英文全称是FirstInFirstOut,即先进先出。与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,缺点就是不能像RAM和ROM那样可以由地... 查看详情

学fpga(hls之vivadozynq和petalinux)

...联系信箱:feixiaoxing@163.com】        很多同学学习了fpga,也用到xilinx的vivado,当然也用到了zynq。可是没有弄清楚这里面之间的关系,趁着这个机会正好可以好好梳理一下。1、vivado        vi 查看详情

zynq之fpga学习----ramip核使用实验(代码片段)

1RAMIP核介绍RAM的英文全称是RandomAccessMemory,即随机存取存储器,它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据,其读写速度由时钟频率决定Xilinx7系列器件具有嵌入式存储... 查看详情

zynq从入门到秃头07fpga片内ram&&rom读写测试实验(代码片段)

文章目录FPGA片内RAM读写测试实验实验原理创建Vivado工程RAM的端口定义和时序测试程序编写VerilogIO约束Testbeachsimulation仿真板上验证添加ILAIP核生成bitstreamFPGA片内ROM读写测试实验创建ROM初始化文件添加ROMIP核ROM测试程序编写绑定引... 查看详情

fpga教程案例94机器学习1——基于fpga的svm支持向量机二分类系统实现之理论和matlab仿真

FPGA教程目录​​​​​​MATLAB教程目录目录1.软件版本2.SVM原理3.MATLAB仿真效果 查看详情

fpga:逻辑功能的仿真与验证

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合VerilogHDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 查看详情