当前位置:   article > 正文

VIVADO使用TCL控制VIO核批量写寄存器_vivado tcl vio

vivado tcl vio

使用vivado调试FPGA过程中,通常需要ARM或CPU向FPGA下发指令或配置寄存器,在与ARM或CPU联调之前,需要验证FPGA逻辑是否正常,因此一般需要用到vio核。当涉及单个寄存器控制时,手动输入即可,但很多时候需设置多个寄存器来实现功能的控制,比如滤波器参数配置、ad芯片SPI寄存器控制等,此时可通过TCL批量操作VIO核,避免手动逐个输入,极大提高开发效率。

比如vio例化代码:

  1. vio_adc_cfg vio_adc_cfg (
  2. .clk(PSCLK), // input wire clk
  3. .probe_out0(cfadcwdat[23:0]), // output wire [23 : 0] probe_out0
  4. .probe_out1(cfadcEn) // output wire [0 : 0] probe_out1
  5. );

生成bit并且烧写后,使用tcl控制vio:

1.  tcl栏直接输入

  1. set_property OUTPUT_VALUE 1 [get_hw_probes cfadcEn -of_objects [get_hw_vios hw_vio_2]]
  2. commit_hw_vio [get_hw_probes {cfadcEn} -of_objects [get_hw_vios hw_vio_2]]
  3. set_property OUTPUT_VALUE 0 [get_hw_probes cfadcEn -of_objects [get_hw_vios hw_vio_2]]
  4. commit_hw_vio [get_hw_probes {cfadcEn} -of_objects [get_hw_vios hw_vio_2]]

 即可以实现cfadcEn信号到1再到0。

上述tcl语句中,commit_hw_vio表示将hw_probe OUTPUT_VALUE属性值写入VIO核。注意,TCL语句中VIO名称(hw_vio_2)不是模块中例化的名称(vio_adc_cfg),如果使用vio模块名称,语法如下:

set_property OUTPUT_VALUE 1 [get_hw_probes cfadcEn -of_objects [get_hw_vios -of_objects [get_hw_devices xc7z045_0] -filter {CELL_NAME=~" vio_adc_cfg "}]]

2.  编写tcl文件,从tcl栏打开此文件

比如在D:/04_record/vio路径下新建tcl文件,写入:

  1. set_property OUTPUT_VALUE 000010 [get_hw_probes cfadcwdat -of_objects [get_hw_vios hw_vio_2]]
  2. commit_hw_vio [get_hw_probes {cfadcwdat} -of_objects [get_hw_vios hw_vio_2]]

然后将此文件保存。

在vivado tcl控制台输入       

cd D:/04_record/vio

修改工作目录为vio文件夹下,继续输入

source vio_tcl.tcl

可执行tcl中的内容。

 可见,当使用vio控制执行多个寄存器或同一寄存器多个值时,编写一个tcl文件即可轻松实现。

3. vio控制的实时性

不使用tcl控制vio时,手动连续更改寄存器值,间隔时长无法保证,通常为秒级延迟。为验证使用tcl控制的时间,使用ila抓取控制信号进行测试。

验证每条命令响应时间是否是一个clk时钟,使用ila观察被控制的信号如下图:(tcl语句是控制ps1_wr_en信号写1后立即写0)

可见,写后并不是一时钟周期就改变,响应比较慢,不可实现精确的控制。此次测试至少大于4000个时钟周期,至于具体关系还没有完全验证,这点在使用时是需要注意的。

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

闽ICP备14008679号