FPGA_学习_15_IP核_VIO

前一篇博客我们提到在线调试的时候, 可执行文件只要烧进板子,程序它就会自己跑起来,不会等你点 这个按钮,它才开始跑。我们测试的模块中,里面可能有几个我们关心的信号,它会在程序刚运行很短的时间内发生状态跳变。 当我们打算去捕获它的状态变化的时候,这个时候程序已经跑过了,这导致我们无法抓取到。那这个时候我们应该怎么办呢? 引入VIO这个工具,用VIO的输出信号作为我们测试模块的使能信号,这样我们就能控制待测试的模块什么时候运行。

VIO是个特别简单的IP核,丝毫不用有畏难情绪。

1 VIO是什么

VIO是虚拟输入/输出(Virtual Input/Output),可以实时监测和驱动FPGA内部信号。 在线调试的时候,Vivado会提供一个VIO的界面,你可以修改VIO对待测模块的输出,也可以监测待测模块对VIO的输入。VIO和待测模块的信号如下图所示,就行串口通信一样,你的Tx要接到我的Rx,

2 VIO IP 配置

截图警告!

我对下面这个截图稍微补充一下哈, 截图只是在介绍这个东西是什么,而我们的VIO例程里,这输入探针数量是1,输出探针数量是5。 IP核名称是vio_0。

我对下面这个截图稍微补充一下哈, 截图只是在介绍这个东西是什么,而我们的VIO例程里,这输入探针位宽是4。

我对下面这个截图稍微补充一下哈, 截图只是在介绍这个东西是什么,而我们的VIO例程里,这5个输出探针位宽是2。

Ok之后直接Generate

IP核生成完了之后,都要去抄一下怎么例化。

3 VIO测试用例:4选1-选择器

cpp 复制代码
`timescale 1ns / 1ps

module lab_vio(
    input wire clk
);

reg     [3:0]   out;            // 待测模块的输出 VIO的输入
wire    [1:0]   a, b, c, d;     // VIO的输出 待测模块的输入 
wire    [1:0]   sel;            // VIO的输出 待测模块的输入 

always @(*) begin
        case(sel)
                2'b00:  out <= a;
                2'b01:  out <= b;
                2'b10:  out <= c;
                2'b11:  out <= d;
                default: out <= 2'bx;  
        endcase
end        

vio_0 vio_0_inst (
  .clk(clk),                // input wire clk
  .probe_in0(out),    // input wire [3 : 0] probe_in0
  .probe_out0(a),  // output wire [1 : 0] probe_out0
  .probe_out1(b),  // output wire [1 : 0] probe_out1
  .probe_out2(c),  // output wire [1 : 0] probe_out2
  .probe_out3(d),  // output wire [1 : 0] probe_out3
  .probe_out4(sel)  // output wire [1 : 0] probe_out4
);
endmodule

管脚约束代码,我们只用到了clk

cpp 复制代码
create_clock	-period		20.000		[get_ports	clk]
set_property	PACKAGE_PIN	N18			[get_ports	clk]
set_property	IOSTANDARD	LVCMOS33	[get_ports	clk]

4 在线调试

截图警告!

假设我设置 a b c d 分别为3 2 1 0, 然后分别设置sel为0 1 2 3,检测out的变化

|--------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| | |
| | |

通过以上的小实验呢,我们就算是基本掌握VIO的用法了,是不是很简单呢?

参考文献

Vivado调用VIO核_vio vivado_素年锦什的博客-CSDN博客

相关推荐
MartinYeung52 分钟前
[论文学习]透过增强式 Few-Shot Learning 实现高效 PII 从大型语言模型中提取
人工智能·学习·语言模型
公考指南针8 分钟前
公务员面试怎么准备?2026 结构化面试流程、答题训练和备考工具测评
经验分享·学习·面试
.千余11 分钟前
【C++】C++继承入门(上):继承语法与基本特性详解
开发语言·c++·笔记·学习·其他
承渊政道12 分钟前
【MySQL数据库学习】MySQL基本查询(下)
数据库·学习·mysql·leetcode·bash·数据库开发·数据库系统
skywalk816318 分钟前
段言的设计文档:中文编程赛道的竞争格局,谁在牌桌上?
开发语言·学习·编程
段一凡-华北理工大学24 分钟前
工业领域的Hadoop架构学习~系列文章24:adoop工业应用总结与展望 - 技术路线图与最佳实践
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
一锅炖出任易仙37 分钟前
创梦汤锅学习日记day30
学习·ai·ue5·游戏引擎
AOwhisky1 小时前
Redis 学习笔记(第二期):核心数据类型与消息队列实战
运维·数据库·redis·笔记·学习·云计算
keira6741 小时前
个人健康日程表(小时级行为系统)
学习·生活
YangYang9YangYan1 小时前
专科大数据技术学习数据分析的价值分析
大数据·学习·数据分析