从某呼上看到如下文章:
非常感兴趣,想着之后自动化测试芯片参数也可以使用类似的方法,可以避开麻烦的c++代码,于是就照猫画虎尝试着如何实现。
第一步,了解如何使用jtag2axi这个IP核,IP核资料请参考xilinx的pg174-jtag-axi,网上也有相关的资料,然后自己画了一个简单的vivado程序,用的IP集成图形界面:

很简单的一个,GPIO控制的是我买的小小小开发板上的2个LED。程序编译完成后下载到开发板上,先用TCL脚本语言在vivado 的tcl console上试试能否使用,代码如下:
#1.使用前必须reset
reset_hw_axi [get_hw_axis hw_axi_1]
#2.先创建事务
create_hw_axi_txn wr_txn [get_hw_axis hw_axi_1] -address 40000000 -data {00000003} -len 1 -type write
#3.再执行事务
run_hw_axi [get_hw_axi_txns wr_txn]
#4.执行完事务需要删除事务,事务名删除之前不可重复
delete_hw_axi_txn [get_hw_axi_txns wr_txn ]
成功点亮2个LED,具体tcl命令如何写,是参考很多网上的资料以及xilinx的文档ug835-vivado-tcl-commands-en-us-2024.2。
现在已经确保FPGA程序部分和TCL命令没有问题,接下来就是如何使用matlab来控制FPGA了。这部分就是按照文章开头提到的文章,从中检出关键的部分:
在matlab里使用system指令,当然,vivado需要添加到系统环境变量路径里。
然后是重点,matlab中执行的是vivado 批处理命令中的tcl脚本,所以需要建立一个tcl脚本的文本文件,我命名问t1.tcl,内容如下:
#硬件相关
open_hw_manager
connect_hw_server
open_hw_target
current_hw_device [get_hw_devices xc7a35t_0]
refresh_hw_device [lindex [get_hw_devices xc7a35t_0] 0]
#执行读写任务
#1.使用前必须reset
reset_hw_axi [get_hw_axis hw_axi_1]
#2.先创建事务
create_hw_axi_txn wr_txn [get_hw_axis hw_axi_1] -address 40000000 -data {00000003} -len 1 -type write
#3.再执行事务
run_hw_axi [get_hw_axi_txns wr_txn]
#4.执行完事务需要删除事务,事务名删除之前不可重复
delete_hw_axi_txn [get_hw_axi_txns wr_txn ]
#硬件相关
close_hw_manager
把这个文件保存在matlab的当前工作路径就可以执行了。
执行过程如下:
首先打开 开发板电源,将bit文件烧写进FPGA,我在线烧写的。
然后打开matlab,执行代码:
system('vivado -mode batch -source {t1.tcl}')
之后按照tcl里的命令正常执行并点亮的FPGA开发板上的LED。下一步准备在FPGA内部做一个DDS,然后将数据存入BRAM,在matlab里控制BRAM的存储并从BRAM中读出数据在matlab画出图形。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删