Vivado之VIO原理及应用
虚拟输入输出(Virtual Input Output,VIO)核是一个可定制的IP核,它可用于实时监视和驱动内部FPGA的信号,如图所示。
可以定制VIO的输入和输出端口的数量与宽度,用于和FPGA设计进行连接。由于VIO核与被监视和驱动的设计同步,因此应用于设计的时钟约束也适用于VIO核内的元件。当使用这个核进行实时交互时,需要使用Vivado逻辑分析特性。
接下来将介绍VIO的原理及应用,内容主要包括设计原理、添加VIO核、生成比特流文件和下载并调试设计。
设计原理
设计以下源码的工程,并添加VIO核:
`timescale1ns/1ps
//
//Company:
//Engineer:
//
//CreateDate:2021/08/222358
//DesignName:
//ModuleName:top
//ProjectName:
//TargetDevices:
//ToolVersions:
//Description:
//
//Dependencies:
//
//Revision:
//Revision0.01-FileCreated
//AdditionalComments:
//
//
moduletop(
inputclk,
inputa,
inputb,
outputreg[5:0]z
);
reg[5:0]z_tmp;
wire[5:0]z_vio;
rega_tmp,b_tmp;
wirea_in,b_in;
wiresel;
wirea_vio,b_vio;
assigna_in=sel?a:a_vio;
assignb_in=sel?b:b_vio;
assignz_vio=z;
vio_0 Inst_vio(
.clk(clk),//inputwireclk
.probe_in0(z),//inputwire[5:0]probe_in0
.probe_out0(sel),//outputwire[0:0]probe_out0
.probe_out1(a_vio),//outputwire[0:0]probe_out1
.probe_out2(b_vio)//outputwire[0:0]probe_out2
);
always@(posedgeclk)
begin
a_tmp<=a_in;
b_tmp<=b_in;
end
always @(*)
begin
z_tmp[0]=a_tmp & b_tmp;
z_tmp[1]=~(a_tmp & b_tmp);
z_tmp[2]=a_tmp | b_tmp;
z_tmp[3]=~(a_tmp | b_tmp);
z_tmp[4]=a_tmp ^ b_tmp;
z_tmp[5]=a_tmp ~^ b_tmp;
end
always @(posedge clk)
begin
z<=z_tmp;
end
endmodule
添加VIO后的整体设计如下:
如上图所示,在该设计中添加一个vio核,该IP提供3个输出端口,其中probe_out0端口用于选择进入寄存器a_tmp_reg和寄存器b_tmp_reg的信号。当probe_out0输出1时,将外部端口a和b提供的信号分别连接到寄存器a_tmp_reg和寄存器b_tmp_reg;当probe_out0输出0时,将vio输出端口probe_outl和probe_out2信号连接到寄存器a_tmp_reg和b_tmp_reg。这样就可以通过vio提供的端口来控制整个FPGA的设计。此外,FPGA设计的最终输出z可以连接到vio模块的probe_in0输入端口。
添加VIO和
本节将添加VIO核,主要步骤如下所示。
第一步:用Vivado集成开发环境打开需要添加的工程。
第二步:在Vivado主界面左侧的“Flow Navigator”窗口中找到并展开PROJECT MANAGER选项。在展开项中,找到并选择“IP Catalog”选项。
第三步:在Vivado主界面的右侧窗口中,弹出“IP Catalog”标签页。在该标签页的搜索框中输入“VIO”,则在下面出现“VIO(Virtual Input/Output)”,如图所示,双击“VIO(Virtual Input/Output)”。
第四步:弹出“Customize IP-VIO(VirtualInput/Output)”对话框。
(1)单击“General Options”标签,如图所示,在该标签页中,按如下参数进行设置。
Input ProbeCount:1。
Output ProbeCount:3。
勾选 Enable Input Probe Activity Detectors前面的复选框
(2)单击“PROBE_IN Ports(0..0)”标签,如图所示,在该标签页中,按如下参数进行设置
(3)单击“PROBE_OUTPorts(0..2)”标签,如图所示,在该标签页中,按如下参数进行设置。
第五步:单击【OK】按钮,退出“Customize IP”对话框。
第六步:弹出“Generate Output Products”对话框。
第七步:单击【Generate】按钮,退出“Generate Output Products”对话框。
第八步:在“Sources”窗口中,单击“IP Sources”标签。在该标签页中,可以看到添加了名字为“vio_0”的IP核实例,如图所示。找到并展开“vio_0”选项。在展开项中,找到并展开“Instatiation Template”选项。在展开项中,选择并用鼠标左键双击vio_0.veo,打开其例化模板,如下述代码所示。
//-----------BeginCuthereforINSTANTIATIONTemplate---//INST_TAG
vio_0your_instance_name(
.clk(clk),//inputwireclk
.probe_in0(probe_in0),//inputwire[5:0]probe_in0
.probe_out0(probe_out0),//outputwire[0:0]probe_out0
.probe_out1(probe_out1),//outputwire[0:0]probe_out1
.probe_out2(probe_out2)//outputwire[0:0]probe_out2
);
第九步:在“Sources”窗口中,单击“Hierarchy”标签。在该标签页中,找到并展开“Design Sources”选项。在展开项中,找到并用鼠标双击top.v文件,按下述代码修改设计代码,并添加vio的例化代码。
`timescale1ns/1ps
//
//Company:
//Engineer:
//
//CreateDate:2021/08/222358
//DesignName:
//ModuleName:top
//ProjectName:
//TargetDevices:
//ToolVersions:
//Description:
//
//Dependencies:
//
//Revision:
//Revision0.01-FileCreated
//AdditionalComments:
//
//
moduletop(
inputclk,
inputa,
inputb,
outputreg[5:0]z
);
reg[5:0]z_tmp;
wire[5:0]z_vio;
rega_tmp,b_tmp;
wirea_in,b_in;
wiresel;
wirea_vio,b_vio;
assigna_in=sel?a:a_vio;
assignb_in=sel?b:b_vio;
assignz_vio=z;
vio_0Inst_vio(
.clk(clk),//inputwireclk
.probe_in0(z),//inputwire[5:0]probe_in0
.probe_out0(sel),//outputwire[0:0]probe_out0
.probe_out1(a_vio),//outputwire[0:0]probe_out1
.probe_out2(b_vio)//outputwire[0:0]probe_out2
);
always@(posedgeclk)
begin
a_tmp<=a_in;
b_tmp<=b_in;
end
always @(*)
begin
z_tmp[0]=a_tmp & b_tmp;
z_tmp[1]=~(a_tmp & b_tmp);
z_tmp[2]=a_tmp | b_tmp;
z_tmp[3]=~(a_tmp | b_tmp);
z_tmp[4]=a_tmp ^ b_tmp;
z_tmp[5]=a_tmp ~^ b_tmp;
end
always @(posedge clk)
begin
z<=z_tmp;
end
endmodule
第 十 步 :保 存 该 设 计 文 件 。
相关文章
- 移动应用测试流程
- URP从原理到应用——基础篇
- HTML5数据推送SSE原理及应用开发
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- egg.js修改配置应用启动的端口号
- 图像处理各种变换、运算、算法的简明原理、作用和应用场合
- 37 MAPREDUCE中的DistributedCache应用
- 分布式实时处理系统在高性能计算场景下的应用
- 《数据库技术原理与应用教程第2版》——1.4数据管理
- 《数据库技术原理与应用教程第2版》——2.2数据库内部结构体系
- grep的正则表达式结合的几个典型应用
- 华为应用内支付无法拉起
- 《Python和HDF 5大数据应用》——第1章 简介 1.1 Python和HDF5
- 《HTML5和JavaScript Web应用开发》——第 2 章 移动Web 2.1移动优先
- Qt编写地图综合应用16-省市轮廓图下载
- 聊聊 KVC 和 KVO 的高阶应用
- GammaRay 是一个允许你查看 Qt 应用程序甚至在某种程度上修改它的独特应用,可谓是 Debugger 的良好补充
- 《数据库技术原理与应用教程(第2版)》——本章小结
- 《数据库技术原理与应用教程(第2版)》——习 题 3
- Pinterest将推图片搜索应用 方便用户在线购物
- 浅析Object.assign()基本用法(对象合并、同名属性覆盖、仅1个参数时直接返回、target不是对象会转成对象、源对象位置为非对象时不同的处理规则-字符串的特殊情况、拷贝的属性限制)及需要注意的点(浅拷贝、同名属性替换、数组的处理-把索引当属性替换、取值函数先取值再拷贝)和常见应用(给对象添加属性、合并多个对象、给属性设置默认值)
- 【Unity3D-UGUI应用篇】(七)UGUI实现窗口的自由拖拽
- 数据库原理及MySQL应用 | 并发控制
- 数据库原理及MySQL应用 | 视图
- 理解CEP应用真正特点
- 钩子原理与应用
- 深入理解 Linux 零拷贝以及 Linux 中 I/O 的底层原理,在kafka、nginx、golang等等各种文件传输场景中不同的优化手段和实际应用
- 语音分析应用场景——来电原因分析与运营效率提升
- 智能交通第三次革命 协同技术应用展开