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

目录

1. 简介

2. JTAG to AXI Master

2.1 添加 IP Core

2.2 基本TCL命令

2.2.1 复位 JTAG-to-AXI Master

2.2.2 创建并运行写入传输事务

2.2.3 创建并运行读取传输事务

2.2.4 命令列表

2.3 帮助信息

2.4 创建TCL读写程序

2.4.1 Read proc

2.4.2 Write proc

2.4.3 创建复杂过程

3. 示例

3.1 AXI-GPIO IP

3.1.1 寄存器描述

3.1.2 TCL 代码

3.2 HLS IP

3.2.1 HLS IP

3.2.2 Block Design

3.2.3 寄存器描述

3.2.4 TCL 代码

3.3 AXI UART Lite

3.3.1 Block Design

3.3.2 AXI UART 寄存器描述

3.3.3 TCL 代码

3.4 AXI IIC IP

3.4.1 Block Design

3.4.2 AXI IIC 寄存器描述

3.4.3 Standard Controller Logic Flow

3.4.4 Dynamic Controller Logic Flow

3.4.5 TCL 代码

3.4.5.1 Basic CMD

3.4.5.2 IIC Init proc

3.4.5.3 IIC Write proc

3.4.5.4 IIC Read proc

4. 总结


1. 简介

本文分享 JTAG to AXI Master IP Core 的使用教程。

此 IP 用于 AXI 接口向设计输入数据,或者读取数据。通过 Tcl 控制台编写命令来驱动此 IP,通过 JTAG 即可进行操作,而这个 IP 则在 AXI 端口上驱动 AXI 事务。由于这个核心没有自己的地址空间,它对所有从 JTAG 生成的 AXI 事务都是透明的。

与 Vivado 逻辑分析器一起,此 IP 可以用作 AXI 系统调试和测试工具。

IP Feature:

  • 最大工作频率为 200MHz
  • 协议支持:
    • AXI4
    • AXI4-Lite
  • 地址宽度: 32 位或者 64 位
  • ID 宽度支持最多四位,允许用户定义 ID 信号
  • AXI4-Lite 数据宽度为 32 位
  • AXI4 数据宽度为 32 位或者 64 位
  • 支持所有内存映射AXI接口事务,包括:
    • 突发类型 - INCR(增量)、FIXED(固定)和WRAP(环绕)
    • 突发长度:
      • 对于INCR和FIXED为1到256
      • 对于WRAP为2、4、8和16
  • 支持缓存信号
  • 硬件调试运行时 Tcl 控制台控制同时读/写操作

2. JTAG to AXI Master

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 axi_read_1r {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 axi_write_1r {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
}

使用说明:

axi_write_1r 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} {
        axi_write_1r $gpio_BA 0x0000_0003
        after 1000
        axi_write_1r $gpio_BA 0x0000_0000
        after 1000
    }
}

test_gpio 0x4000_0000

说明:

向 test_gpio 过程中传入gpio 基地址(Base Address)即可。

3. 示例

3.1 AXI-GPIO IP

3.1.1 寄存器描述

1)AXI GPIO 寄存器描述

| Address Space Offset | Register Name | Access Type | Default Value | Description
|----------------------|---------------|-------------|---------------|------------------------------------------
| 0x0000               | GPIO_DATA     | R/W         | 0x0           | Channel 1 AXI GPIO Data Register.
| 0x0004               | GPIO_TRI      | R/W         | 0x0           | Channel 1 AXI GPIO 3-state Control Register.
| 0x0008               | GPIO2_DATA    | R/W         | 0x0           | Channel 2 AXI GPIO Data Register.
| 0x000C               | GPIO2_TRI     | R/W         | 0x0           | Channel 2 AXI GPIO 3-state Control.
| 0x011C               | GIER          | R/W         | 0x0           | Global Interrupt Enable Register.
| 0x0128               | IP IER        | R/W         | 0x0           | IP Interrupt Enable Register (IP IER).
| 0x0120               | IP ISR        | R/TOW       | 0x0           | IP Interrupt Status Register.

2)AXI GPIO 三态寄存器描述

| Bits                | Field Name | Access Type | Reset Value          | Description
|---------------------|------------|-------------|----------------------|----------------------
| [GPIOx_Width-1:0]   | GPIOx_TRI  | Re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值