Vivado - JTAG to AXI Master (GPIO、IIC、HLS_IP)-2. JTAG to AXI Master

时间:2024-10-06 15:50:38

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)即可。