当前位置:   article > 正文

VIVADO关于VIO IP核(Virtual Input/Output)的使用

vio ip

平台:vivado2017.4

最近在验证一个单独的模块时,希望可以在线实时改变内部寄存器的值。经过分析发现,VIVADO的VIO可以完美解决我的这个问题。

下面来看看官方介绍。

VIO它可以实时监控和驱动FPGA内部的信号,输入和输出端口的数量和宽度是可以设置的。因为VIO核心与被监控和驱动的设计是同步的,因此应用于设计的时钟约束也会应用于VIO。

下面我们用VIO来监控模块IIC_JFM24C512的动作。此模块是一个EEPROM控制模块。这里使用VIO来给EEPROM写入数据,和读出数据。

在IP Catalog中搜索VIO。

这里我们分析EEPROM控制模块,我们需要监视的地方就是EEPROM读出的数据,需要控制的是EEPROM读写开始使能,EEPROM读写类型,EEPROM读写字地址,EEPROM需要写入的数据。共计五个端口,输入一个,输出四个。

这里选择输入一个端口,输出四个端口。

 设置输入端口为16位。

 

 设置输出端口。选择位宽(Probe Width),选择默认值(Initial Value)这里全部设置为零。

 在IP source中找到该IP并将代码例化到接口中去。

  1. //------------------------------------------------------------
  2. //------------------------------------------------------------
  3. wire [15:0] iic_wrdat;
  4. wire [15:0] iic_rddat;
  5. wire iic_opt_start;
  6. wire [3:0] iic_opt_type;
  7. wire [15:0] iic_word_addr;
  8. IIC_JFM24C512 u_IIC_JFM24C512(
  9. .iic_word_addr (iic_word_addr ),
  10. .iic_deveice_addr (7'b1010000 ),
  11. .iic_opt_type (iic_opt_type ),
  12. .iic_wrdat (iic_wrdat ),
  13. .iic_rddat (iic_rddat ),
  14. .iic_busy ( ),
  15. .iic_dat (EPM_SDA ),
  16. .iic_clk (EPM_SCL ),
  17. .iic_16byte_en (1'b0 ),
  18. .iic_16wordaddr_en (1'b1 ),
  19. .iic_opt_start (iic_opt_start ),
  20. .rst_n (I_sys_rst_n ),
  21. .clk_ref (I_sys_clk ),
  22. .clk (I_sys_clk ));
  23. //------------------------------------------------------------
  24. //vio
  25. //------------------------------------------------------------
  26. vio_0 your_instance_name (
  27. .clk (I_sys_clk ),// input wire clk
  28. .probe_in0 (iic_rddat ),// input wire [15 : 0] probe_in0
  29. .probe_out0 (iic_opt_start ),// output wire [0 : 0] probe_out0
  30. .probe_out1 (iic_opt_type ),// output wire [2 : 0] probe_out1
  31. .probe_out2 (iic_word_addr ),// output wire [15 : 0] probe_out2
  32. .probe_out3 (iic_wrdat )// output wire [15 : 0] probe_out3
  33. );
  34. //------------------------------------------------------------
  35. //------------------------------------------------------------

一般在VIO使用过程中同时可以伴随逻辑分析仪ila一起调试,这里我们在IIC_JFM24C512模块内部例化ILA采集信号。

  1. //----------------------------------------------------------------
  2. //----------------------------------------------------------------
  3. ila_1 u_ila_1 (
  4. .clk(clk), // input wire clk
  5. .probe0(iic_word_addr ), // input wire [15:0] probe0
  6. .probe1(iic_deveice_addr ), // input wire [6:0] probe1
  7. .probe2(iic_opt_type ), // input wire [2:0] probe2
  8. .probe3(iic_wrdat ), // input wire [15:0] probe3
  9. .probe4(iic_rddat ), // input wire [15:0] probe4
  10. .probe5(iic_busy ), // input wire [0:0] probe5
  11. .probe6(iic_dat ), // input wire [0:0] probe6
  12. .probe7(iic_clk ), // input wire [0:0] probe7
  13. .probe8(iic_opt_start ) // input wire [0:0] probe8
  14. );
  15. //----------------------------------------------------------------
  16. //----------------------------------------------------------------

好了现在已经将ILA和VIO都添加到模块中区。生成BIT流后下载到板卡,我们上板看看现象。

这是我们添加采集的EEPROM信号。

 这是添加的VIO测信号。

 

 下面我们利用VIO向发送读写命令。第一步向地址0写入数据11。

 向地址1写入数据22。

 向地址2写入数据33。

 下面使用读从地址0读出了数据11。

 

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

闽ICP备14008679号