FPGA开发技巧备忘录——Xilinx JTAG to AXI Master IP的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

FPGA开发技巧备忘录——Xilinx JTAG to AXI Master IP的使用


前言

无意间发现了JTAG to AXI Master IP核,发现这个东西对于FPGA单独调试应该比较有用,故而来研究了一番,发现这个东西切实很好用而且也比较简单。想起我之前为了构造一个指令系统专门写了一个UART2BUS,如果当时我知道使用JTAG to AXI Master IP核,那我肯定直接使用这个了,所以说真的是要不停的学习才能不会落伍呀

用法

很多FPGA工程都是通过总线寄存器来进行时序的控制,参数的传递等等。那JTAG to AXI Master IP就提供了一种这样的便捷的方法,而且只需要JTAG接口就可以了,这个接口对于每一个FPGA板卡来说肯定是必备的,而且调试环境也是Vivado现成提供的。在项目初期,FPGA单独进行开发的时候(或者软件部分还没有参与进来的时候),利用JTAG to AXI Master IP 相关调试的工作就可以不需要软件人员的配置而继续进行下去。

在这里插入图片描述
这里我套用我的博文《ZYNQ开发系列——使用AXI4LITE接口进行PS和PL交互》中的工程,在其基础上将JTAG to AXI Master IP添加上去

在这里插入图片描述
基地址和地址区间设置为与PS相同的,这样相当于不仅仅ARM可以对BUS_AXI进行操作,JTAG_AXI_0这个IP核也是可以对BUS_AXI进行操作

在这里插入图片描述
就是这么简单,什么手册都没看,看着端口名字就知道怎么连接了。

Tcl指令

我们可以打开vivado界面通过按钮来找到FPGA器件后,然后再输入tcl指令,而在这里,我为了以后使用的便利性,我就不打开vivado了。直接打开vivado tcl shell输入指令来操作,为后面的操作脚本化来做准备。

open_hw
connect_hw_server
open_hw_target
current_hw_device [get_hw_devices xc7z030_1]
refresh_hw_device -update_hw_probes false [lindex [get_hw_devices xc7z030_1] 0]


proc ReadReg { address } {
create_hw_axi_txn read_txn [get_hw_axis hw_axi_1] -address $address -type read
run_hw_axi  read_txn
set read_value [lindex [report_hw_axi_txn  read_txn] 1];
delete_hw_axi_txn read_txn
set tmp addr=0x
append tmp $address
append tmp , data=0x
append tmp $read_value
return $tmp
}

proc WriteReg { address data } {
create_hw_axi_txn write_txn [get_hw_axis hw_axi_1] -address $address -data $data -type write
run_hw_axi  write_txn
set write_value [lindex [report_hw_axi_txn  write_txn] 1];
delete_hw_axi_txn write_txn
}

读地址测试:

ReadReg 43c00000
ReadReg 43c00004
ReadReg 43c00008
ReadReg 43c0000c
ReadReg 43c00010

在这里插入图片描述
读写测试:

WriteReg 43c0001c 00000001
ReadReg 43c0001c
WriteReg 43c0001c 00000002
ReadReg 43c0001c

在这里插入图片描述
大功告成!!

展望

这确实是一个比较方便的调试手段,不需要额外增加其他硬件资源,而JTAG下载线是FPGA调试所必备的。这种调试手段确实能够提升效率,后续我要研究下如何使用我的vb.net的上位机来进行操作,通过上位机来控制,做到每个寄存器地址的实时扫描以及解析,将又不失为一种更为高效的调试手段。

我在网上看到有一篇《JTAG to AXI Master的API函数读写操作》,看起来似乎不错,准备研究和尝试一下,同时或者我自己将tcl指令封装起来也不失为另外一种实现方法。下一篇见

### AXI Master 接口概述 AXI (Advanced eXtensible Interface) 是一种用于片上系统(SoC)设计中的高速互连协议,属于ARM公司AMBA架构的一部分[^2]。AXI总线支持两种主要的操作模式:从机(AXI Slave)和主机(AXI Master)。 #### 主要特点 - **高带宽传输**:能够处理大量数据流。 - **低延迟通信**:优化了读写操作的时间效率。 - **灵活配置选项**:允许根据具体应用场景调整参数设置。 ### AXI Master 工作机制 AXI Master 设备可以主动发起事务请求到其他设备或内存位置。这种能力使得它能够在不需要外部触发的情况下执行读取或写入命令。当AXI Master 发起一次访问时,会向目标地址发送相应的控制信号以及可能的数据信息;一旦接收到应答,则完成整个过程[^1]。 对于FPGA开发而言,在PL端创建AXI Master IP核意味着赋予该模块自主寻址并交换数据的能力,这相较于仅能响应查询的Slave更加积极主动。通过这种方式,不仅可以提高系统的灵活性还可以增强性能表现。 ### 构建AXI Master IP核的方法 为了在PL侧建立一个有效的AXI Master接口IP核,通常遵循如下技术路径: 1. 定义所需的功能特性; 2. 使用HLS(高层次综合工具)或者Vivado HLS来编写算法级描述; 3. 自动生成RTL代码并通过仿真验证其功能正确性; 4. 将生成好的核心集成至更大的SoC平台内测试互联情况。 下面给出一段简单的Verilog代码片段作为示例,展示了如何定义一个基本的AXI Lite master接口部分逻辑结构: ```verilog module axi_lite_master ( input wire aclk, input wire aresetn, output reg [31:0] awaddr, // Write address channel signals. output reg awvalid, input wire awready, ... ); // Internal state machine and other logic here... endmodule ``` 此段代码仅为示意用途,并未展示完整的内部状态机及其他必要的组件连接细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA十年老鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值