0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vivado之VIO原理及应用

OpenFPGA 来源:OpenFPGA 作者:碎碎思 2021-09-23 16:11 9870次阅读

虚拟输入输出(Virtual Input Output,VIO)核是一个可定制的IP核,它可用于实时监视和驱动内部FPGA信号,如图所示。

48641394-0fe5-11ec-8fb8-12bb97331649.png

可以定制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_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

添加VIO后的整体设计如下:

48770274-0fe5-11ec-8fb8-12bb97331649.png

如上图所示,在该设计中添加一个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输入端口。

添jia VIO核

本节将添加VIO核,主要步骤如下所示。

第一步:用Vivado集成开发环境打开需要添加的工程。

第二步:在Vivado主界面左侧的“Flow Navigator”窗口中找到并展开PROJECT MANAGER选项。在展开项中,找到并选择“IP Catalog”选项。

第三步:在Vivado主界面的右侧窗口中,弹出“IP Catalog”标签页。在该标签页的搜索框中输入“VIO”,则在下面出现“VIO(Virtual Input/Output)”,如图所示,双击“VIO(Virtual Input/Output)”。

48a63846-0fe5-11ec-8fb8-12bb97331649.png

第四步:弹出“Customize IP-VIO(VirtualInput/Output)”对话框。

(1)单击“General Options”标签,如图所示,在该标签页中,按如下参数进行设置。

48d131ae-0fe5-11ec-8fb8-12bb97331649.png

Input ProbeCount:1。

Output ProbeCount:3。

勾选 Enable Input Probe Activity Detectors前面的复选框。

(2)单击“PROBE_IN Ports(0..0)”标签,如图所示,在该标签页中,按如下参数进行设置

48e223ec-0fe5-11ec-8fb8-12bb97331649.png

(3)单击“PROBE_OUTPorts(0..2)”标签,如图所示,在该标签页中,按如下参数进行设置。

48f1c478-0fe5-11ec-8fb8-12bb97331649.png

第五步:单击【OK】按钮,退出“Customize IP”对话框。

第六步:弹出“Generate Output Products”对话框。

第七步:单击【Generate】按钮,退出“Generate Output Products”对话框。

第八步:在“Sources”窗口中,单击“IP Sources”标签。在该标签页中,可以看到添加了名字为“vio_0”的IP核实例,如图所示。找到并展开“vio_0”选项。在展开项中,找到并展开“Instatiation Template”选项。在展开项中,选择并用鼠标左键双击vio_0.veo,打开其例化模板,如下述代码所示。

492d2dce-0fe5-11ec-8fb8-12bb97331649.png

//-----------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

第 十 步 :保 存 该 设 计 文 件 。

生成比特流文件

下载并调试设计

将生成的比特流文件下载到开发板上的FPGA元器件中,并通过VIO对设计进行监控,主要步骤如下所示。

第一步:将JTAG和FPGA板卡链接并和PC连接。

第二步:给开发板上电。

第三步:在“HARDWARE MANAGER”对话框中,单击【Open target】按钮,出现浮动菜单。在浮动菜单内,执行菜单命令【AutoConnect】。

第四步:在“Hardware”窗口中,选择FPGA,单击鼠标右键,出现浮动菜单。在浮动菜单内,执行菜单命令【Program Device】。

第五步:弹出“Program Device”对话框,如图所示。在该对话框中,选择合适的“Bit stream file”和“Debug probes files”。

49538564-0fe5-11ec-8fb8-12bb97331649.png

第六步:单击【Program】按钮。

第七步:在Vivado主界面右侧的窗口中,弹出“hw_vio_l”对话框,如图所示。在该对话框中,单击+按钮。出现浮动菜单。在浮动菜单内,分别双击a_vio、b_vio、sel和z_OBUF[5:0],将其添加到“hw_vio_l”对话框中,如图所示。

497dded6-0fe5-11ec-8fb8-12bb97331649.png

49b9002e-0fe5-11ec-8fb8-12bb97331649.png

第八步:在图所示的对话框中,先将sel的“Value”设置为1,此时a_vio和b_vio的值将送给FPGA设计。

第九步:在图所示的对话框中,将“sel”的“Value”设置为0,此时由开发板上开关的设置状态确定a和b的值,并将其送给FPGA设计。

第十步:关闭并退出设计。

编辑:jq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1643

    文章

    21927

    浏览量

    612732
  • JTAG
    +关注

    关注

    6

    文章

    403

    浏览量

    72777
  • 代码
    +关注

    关注

    30

    文章

    4883

    浏览量

    70104
  • VIO
    VIO
    +关注

    关注

    0

    文章

    11

    浏览量

    10308

原文标题:【Vivado那些事儿】-VIO原理及应用

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
    相关推荐
    热点推荐

    CANape 23.0新特性:支持VIO系统#CANape #VIO

    vector_canape
    北汇信息POLELINK
    发布于 :2025年03月14日 10:17:41

    AMD Vivado Design Suite IDE中的设计分析简介

    本文档涵盖了如何驱动 AMD Vivado Design Suite 来分析和改善您的设计。
    的头像 发表于 02-19 11:22 425次阅读
    AMD <b class='flag-5'>Vivado</b> Design Suite IDE中的设计分析简介

    请问LDC1000的VIO接口可以接5V电源吗?

    LDC1000的VIO接口可以接5V电源吗?
    发表于 01-17 08:40

    Vivado Design Suite用户指南:逻辑仿真

    电子发烧友网站提供《Vivado Design Suite用户指南:逻辑仿真.pdf》资料免费下载
    发表于 01-15 15:25 0次下载
    <b class='flag-5'>Vivado</b> Design Suite用户指南:逻辑仿真

    TCAN1051HGV VIO管脚作用是什么?

    我们项目中准备选用TCAN1051HGV,在阅读其规格书,请问VIO管脚作用是什么?我们的CPU电压供电电压是3.3V,而TCAN1051HGV电压VCC为5V,请问VIO管脚是不是与MCU的供电电压连接在一起,如果连接在一起,请问CANH/CANL高电平是5V还是3.
    发表于 12-17 07:46

    一种降低VIO/VSLAM系统漂移的新方法

    本文提出了一种新方法,通过使用点到平面匹配将VIO/VSLAM系统生成的稀疏3D点云与数字孪生体进行对齐,从而实现精确且全球一致的定位,无需视觉数据关联。所提方法为VIO/VSLAM系统提供了紧密
    的头像 发表于 12-13 11:18 542次阅读
    一种降低<b class='flag-5'>VIO</b>/VSLAM系统漂移的新方法

    Xilinx_Vivado_SDK的安装教程

    I Agree,然后点击 Next: 选择 Vivado HL System Edition(一般选择这个设计套件比较完整,它比 Vivado HL Design Edition 多了一个 System Generator for DSP with Mat
    的头像 发表于 11-16 09:53 3858次阅读
    Xilinx_<b class='flag-5'>Vivado</b>_SDK的安装教程

    每次Vivado编译的结果都一样吗

    很多FPGA工程师都有这种困惑,Vivado每次编译的结果都一样吗? 在AMD官网上,有这样一个帖子: Are Vivado results repeatable for identical
    的头像 发表于 11-11 11:23 1018次阅读
    每次<b class='flag-5'>Vivado</b>编译的结果都一样吗

    Vivado使用小技巧

    有时我们对时序约束进行了一些调整,希望能够快速看到对应的时序报告,而又不希望重新布局布线。这时,我们可以打开布线后的dcp,直接在Vivado Tcl Console里输入更新后的时序约束。如果调整
    的头像 发表于 10-24 15:08 819次阅读
    <b class='flag-5'>Vivado</b>使用小技巧

    Vivado编辑器乱码问题

    ,但是在Vivado里面打开用sublime写的代码之后,经常出现中文乱码,让人很不舒服。究其原因就是一般来说第三方的编辑器是采用utf8的编码方式,而vivado的text editor不是这种方式。
    的头像 发表于 10-15 17:24 1985次阅读
    <b class='flag-5'>Vivado</b>编辑器乱码问题

    Vivado 2024.1版本的新特性(2)

    从综合角度看,Vivado 2024.1对SystemVerilog和VHDL-2019的一些特性开始支持。先看SystemVerilog。
    的头像 发表于 09-18 10:34 1562次阅读
    <b class='flag-5'>Vivado</b> 2024.1版本的新特性(2)

    Vivado 2024.1版本的新特性(1)

    Vivado 2024.1已正式发布,今天我们就来看看新版本带来了哪些新特性。
    的头像 发表于 09-18 10:30 2206次阅读
    <b class='flag-5'>Vivado</b> 2024.1版本的新特性(1)

    基于CANoe的VIO系统应用测试方案介绍#CANoe #VTHiL

    VIO
    北汇信息POLELINK
    发布于 :2024年09月11日 09:23:20

    深入了解基于CANoe的VIO系统应用

    VIO System是Vector推出的一款适用于前期单板级测试使用的硬件系统,不仅可以进行总线通讯测试,也可以同时进行I/O信号测试,可以让工程师在ECU或者传感器开发前期就发现问题,能够尽早排查解决,极大降低了人力物力开发成本。
    的头像 发表于 09-01 16:21 3314次阅读
    深入了解基于CANoe的<b class='flag-5'>VIO</b>系统应用

    AD7682的VIO用什么地做参考,数字地还是模拟地?

    AD7682请问VIO的参考地是与VDD一样,用模拟地GND,还是数字地DGND
    发表于 05-21 06:44

    智能家居中的清凉“智”选,310V无刷吊扇驱动方案--其利天下

    炎炎夏日,如何营造出清凉、舒适且节能的室内环境成为了大众关注的焦点。吊扇作为一种经典的家用电器,以其大风量、长寿命、低能耗等优势,依然是众多家庭的首选。而随着智能控制技术与无刷电机技术的不断进步,吊扇正朝着智能化、高效化、低噪化的方向发展。那么接下来小编将结合目前市面上的指标,详细为大家讲解其利天下有限公司推出的无刷吊扇驱动方案。▲其利天下无刷吊扇驱动方案一

    其利天下技术
    1天前
    551

    电源入口处防反接电路-汽车电子硬件电路设计

    一、为什么要设计防反接电路电源入口处接线及线束制作一般人为操作,有正极和负极接反的可能性,可能会损坏电源和负载电路;汽车电子产品电性能测试标准ISO16750-2的4.7节包含了电压极性反接测试,汽车电子产品须通过该项测试。二、防反接电路设计1.基础版:二极管串联二极管是最简单的防反接电路,因为电源有电源路径(即正极)和返回路径(即负极,GND),那么用二极

    张飞实战电子官方
    2天前
    568

    半导体芯片需要做哪些测试

    首先我们需要了解芯片制造环节做⼀款芯片最基本的环节是设计->流片->封装->测试,芯片成本构成⼀般为人力成本20%,流片40%,封装35%,测试5%(对于先进工艺,流片成本可能超过60%)。测试其实是芯片各个环节中最“便宜”的一步,在这个每家公司都喊着“CostDown”的激烈市场中,人力成本逐年攀升,晶圆厂和封装厂都在乙方市场中“叱咤风云”,唯独只有测试显

    汉通达
    05-09 10:02
    662

    解决方案 | 芯佰微赋能示波器:高速ADC、USB控制器和RS232芯片——高性能示波器的秘密武器!

    示波器解决方案总述:示波器是电子技术领域中不可或缺的精密测量仪器,通过直观的波形显示,将电信号随时间的变化转化为可视化图形,使复杂的电子现象变得清晰易懂。无论是在科研探索、工业检测还是通信领域,示波器都发挥着不可替代的作用,帮助工程师和技术人员深入剖析电信号的细节,精准定位问题所在,为创新与发展提供坚实的技术支撑。一、技术瓶颈亟待突破性能指标受限:受模拟前端

    芯佰微电子
    05-09 10:36
    1.4k

    硬件设计基础----运算放大器

    1什么是运算放大器运算放大器(运放)用于调节和放大模拟信号,运放是一个内含多级放大电路的集成器件,如图所示:左图为同相位,Vn端接地或稳定的电平,Vp端电平上升,则输出端Vo电平上升,Vp端电平下降,则输出端Vo电平下降;右图为反相位,Vp端接地或稳定的电平,Vn端电平上升,则输出端Vo电平下降,Vn端电平下降,则输出端Vo电平上升2运算放大器的性质理想运算

    张飞实战电子官方
    05-08 19:34
    497

    ElfBoard技术贴|如何调整eMMC存储分区

    ELF 2开发板基于瑞芯微RK3588高性能处理器设计,拥有四核ARM Cortex-A76与四核ARM Cortex-A55的CPU架构,主频高达2.4GHz,内置6TOPS算力的NPU,这一设计让它能够轻松驾驭多种深度学习框架,高效处理各类复杂的AI任务。

    ElfBoard
    05-08 15:01
    914

    米尔基于MYD-YG2LX系统启动时间优化应用笔记

    1.概述MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600/DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、

    米尔电子
    05-08 08:07
    350

    运放技术——基本电路分析

    虚短和虚断的概念由于运放的电压放大倍数很大,一般通用型运算放大器的开环电压放大倍数都在80dB以上。而运放的输出电压是有限的,一般在10V~14V。因此运放的差模输入电压不足1mV,两输入端近似等电位,相当于“短路”。开环电压放大倍数越大,两输入端的电位越接近相等。“虚短”是指在分析运算放大器处于线性状态时,可把两输入端视为等电位,这一特性称为虚假短路,简称

    张飞实战电子官方
    05-07 19:32
    463

    飞凌嵌入式携手中移物联,谱写全国产化方案新生态

    4月22日,飞凌嵌入式“2025嵌入式及边缘AI技术论坛”在深圳成功举办。中移物联网有限公司(以下简称“中移物联”)携OneOS操作系统与飞凌嵌入式共同推出的工业级核心板亮相会议展区,操作系统产品部高级专家严镭受邀作《OneOS工业操作系统——助力国产化智能制造》主题演讲。

    飞凌嵌入式
    05-07 11:26
    1.5k

    ATA-2022B高压放大器在螺栓松动检测中的应用

    实验名称:ATA-2022B高压放大器在螺栓松动检测中的应用实验方向:超声检测实验设备:ATA-2022B高压放大器、函数信号发生器,压电陶瓷片,数据采集卡,示波器,PC等实验内容:本研究基于振动声调制的螺栓松动检测方法,其中低频泵浦波采用单频信号,而高频探测波采用扫频信号,利用泵浦波和探测波在接触面的振动声调制响应对螺栓的松动程度进行检测。通过螺栓松动检测

    Aigtek安泰电子
    05-06 18:44
    1.1k

    MOS管驱动电路——电机干扰与防护处理

    此电路分主电路(完成功能)和保护功能电路。MOS管驱动相关知识:1、跟双极性晶体管相比,一般认为使MOS管导通不需要电流,只要GS电压(Vbe类似)高于一定的值,就可以了。MOS管和晶体管向比较c,b,e—–>d(漏),g(栅),s(源)。2、NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以

    张飞实战电子官方
    05-06 19:34
    497

    压敏(MOV)在电机上的应用剖析

    一前言有刷直流电机是一种较为常见的直流电机。它的主要特点包括:1.结构相对简单,由定子、转子、电刷和换向器等组成;2.通过电刷与换向器的接触来实现电流的换向,从而使电枢绕组中的电流方向周期性改变,保证电机持续运转;3.具有调速性能较好等优点,可以通过改变电压等方式较为方便地调节转速。有刷直流电机在许多领域都有应用,比如一些电动工具、玩具、小型机械等。但它也存

    深圳市韬略科技有限公司
    05-06 11:34
    313

    硬件原理图学习笔记

    这一个星期认真学习了硬件原理图的知识,做了一些笔记,方便以后查找。硬件原理图分为三类1.管脚类(gpio)和门电路类输入输出引脚,上拉电阻,三极管与门,或门,非门上拉电阻:正向标志作用,给悬空的引脚一个确定的状态三极管:反向三极管(gpio输出高电平,NP两端导通,被控制端导通,电压为0)->NPN正向三极管(gpio输出低电平,PN两端导通,被控制端导通,

    张飞实战电子官方
    04-30 18:40
    515

    TurMass™ vs LoRa:无线通讯模块的革命性突破

    TurMass™凭借其高传输速率、强大并发能力、双向传输、超强抗干扰能力、超远传输距离、全国产技术、灵活组网方案以及便捷开发等八大优势,在无线通讯领域展现出强大的竞争力。

    道生物联
    05-06 10:50
    1.3k

    RZT2H CR52双核BOOT流程和例程代码分析

    RZT2H是多核处理器,启动时,需要一个“主核”先启动,然后主核根据规则,加载和启动其他内核。本文以T2H内部的CR52双核为例,说明T2H多核启动流程。

    RA生态工作室
    04-03 17:14
    2.1k