当前位置:   article > 正文

FPGA_学习_15_IP核_VIO_fpga vio

fpga 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-选择器

  1. `timescale 1ns / 1ps
  2. module lab_vio(
  3. input wire clk
  4. );
  5. reg [3:0] out; // 待测模块的输出 VIO的输入
  6. wire [1:0] a, b, c, d; // VIO的输出 待测模块的输入
  7. wire [1:0] sel; // VIO的输出 待测模块的输入
  8. always @(*) begin
  9. case(sel)
  10. 2'b00: out <= a;
  11. 2'b01: out <= b;
  12. 2'b10: out <= c;
  13. 2'b11: out <= d;
  14. default: out <= 2'bx;
  15. endcase
  16. end
  17. vio_0 vio_0_inst (
  18. .clk(clk), // input wire clk
  19. .probe_in0(out), // input wire [3 : 0] probe_in0
  20. .probe_out0(a), // output wire [1 : 0] probe_out0
  21. .probe_out1(b), // output wire [1 : 0] probe_out1
  22. .probe_out2(c), // output wire [1 : 0] probe_out2
  23. .probe_out3(d), // output wire [1 : 0] probe_out3
  24. .probe_out4(sel) // output wire [1 : 0] probe_out4
  25. );
  26. endmodule

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

  1. create_clock -period 20.000 [get_ports clk]
  2. set_property PACKAGE_PIN N18 [get_ports clk]
  3. 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博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/303841
推荐阅读
  

闽ICP备14008679号