2.1 添加 IP Core
1). 添加 JTAG to AXI Master v1.2 IP Core:
2). 下载 bitstream 后,可以看到该调试核:
2.2 基本TCL命令
2.2.1 复位 JTAG-to-AXI Master
在创建并发出传输事务之前执行:
reset_hw_axi [get_hw_axis hw_axi_1]
2.2.2 创建并运行写入传输事务
create_hw_axi_txn \
write_txn [get_hw_axis hw_axi_1] \
-type WRITE \
-address 4000_0000 \
-len 1 \
-data {12345678} \
-force
run_hw_axi [get_hw_axi_txns write_txn]
- write_txn,用户定义的传输事务名称
- [get_hw_axis hw_axi_1] ,返回 hw_axi_1 对象
- -address 40000000 是起始地址
- -len 1,会将 AXI 突发长度设置为 1 个字
- -data {12345678},“-data” 为十六进制
2.2.3 创建并运行读取传输事务
create_hw_axi_txn \
read_txn [get_hw_axis hw_axi_1] \
-type READ \
-address 4000_0000 \
-len 1 \
-force
run_hw_axi [get_hw_axi_txns read_txn]
---
INFO: [Labtoolstcl 44-481] READ DATA is: 00000003
- read_txn,用户定义的传输事务名称
- [get_hw_axis hw_axi_1] ,返回 hw_axi_1 对象
- -address 4000_0000 是起始地址
- -len 1,会将 AXI 突发长度设置为 1 个字
- INFO 为读取到的数据。
2.2.4 命令列表
| Tcl 命令 | 描述
|----------------------|------------------------------------------------------------------
| create_hw_axi_txn | 创建硬件 AXI 传输事务对象。
| delete_hw_axi_txn | 删除硬件 AXI 传输事务对象。
| get_hw_axi_txns | 获取硬件 AXI 传输事务对象列表。
| get_hw_axis | 获取硬件 AXI 对象列表。
| refresh_hw_axi | 刷新硬件 AXI 对象状态。
| report_hw_axi_txn | 报告已格式化的硬件 AXI 传输事务数据。
| reset_hw_axi | 复位硬件 AXI 核状态。
| run_hw_axi | 在对应 hw_axi 对象中运行硬件 AXI 读写传输事务并更新传输事务状态。
2.3 帮助信息
查看帮助信息
create_hw_axi_txn -help
---
Description:
Create hardware AXI transaction object
Syntax:
create_hw_axi_txn [-address <arg>] [-data <arg>] [-size <arg>] -type <arg>
[-len <arg>] [-burst <arg>] [-cache <arg>] [-id <arg>]
[-force] [-quiet] [-verbose] <name> <hw_axi>
Returns:
New hardware AXI transaction object.
Usage:
Name Description
-----------------------
2.4 创建TCL读写程序
2.4.1 Read proc
读取一个数据字长(DataBit = 32)。
proc read {address} {
# 移除地址中的 "0x" 前缀(如果存在)和任何下划线
set address [string map {"0x" "" "_" ""} $address]
# 创建读事务
create_hw_axi_txn -quiet -force rd_tx [get_hw_axis hw_axi_1] -address $address -len 1 -type read
run_hw_axi -quiet rd_tx
# 在返回的数据上加上前缀 '0x'
return 0x[get_property DATA [get_hw_axi_txn rd_tx]]
}
使用说明:
read 0x4000_0000
---
0x00000001
2.4.2 Write proc
写入一个数据字长(DataBit = 32)。
proc write {address value} {
# 移除地址中的 "0x" 前缀(如果存在)和任何下划线
set address [string map {"0x" "" "_" ""} $address]
# 创建写事务
create_hw_axi_txn -quiet -force wr_tx [get_hw_axis hw_axi_1] -address $address -data $value -len 1 -type write
run_hw_axi -quiet wr_tx
}
使用说明:
write 0x4000_0000 0x0000_0003
错误提示:
ERROR: [Labtoolstcl 44-224] Invalid option value 'wr_tx' specified for 'hw_axi_txns'.
原因:write 0x4000_0000 0x0000_00003,第二个参数为需要写入的数据,误打多了一位。更正后错误提示消失。
2.4.3 创建复杂过程
创建复杂过程,调用 2.4.2 Write proc 中定义的写过程,实现 LED 闪烁。
proc test_gpio {gpio_BA} {
while {1} {
write $gpio_BA 0x0000_0003
after 1000
write $gpio_BA 0x0000_0000
after 1000
}
}
test_gpio 0x4000_0000
说明:
向 test_gpio 过程中传入gpio 基地址(Base Address)即可。