Vivado - JTAG to AXI Master (GPIO、IIC、HLS_IP)
目录
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 Core
3.1.1 寄存器描述
3.1.2 操作示例
3.2 AXI IIC IP Core
3.2.1 AXI IIC 寄存器描述
3.2.2 操作示例
3.3 驱动 HLS IP
3.3.1 HLS 代码
3.3.2 寄存器描述
3.3.3 操作示例
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 4 \-data {11111111_22222222_33333333_44444444} \-forcerun_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 {11111111_22222222_33333333_44444444},“-data”方向为左侧 LSB(即,地址 0)和右侧 MSB(即,地址 3)
2.2.3 创建并运行读取传输事务
create_hw_axi_txn \read_txn [get_hw_axis hw_axi_1] \-type READ \-address 4000_0000 \-len 2 \-forcerun_hw_axi [get_hw_axi_txns read_txn]---
INFO: [Labtoolstcl 44-481] READ DATA is: 0000000000000003
- read_txn,用户定义的传输事务名称
- [get_hw_axis hw_axi_1] ,返回 hw_axi_1 对象
- -address 4000_0000 是起始地址
- -len 2,会将 AXI 突发长度设置为 2 个字
- 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 objectSyntax:
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
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 readrun_hw_axi -quiet rd_txreturn 0x[get_property DATA [get_hw_axi_txn rd_tx]]
}
使用说明:
read 0x4000_0000
---
0x00000001
2.4.2 Write proc
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 writerun_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} {while {1} {write $gpio 0x0000_0003after 1000write $gpio 0x0000_0000after 1000}
}test_gpio 0x4000_0000
3. 示例
3.1 AXI-GPIO IP Core
3.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.
AXI GPIO 三态寄存器描述
| Bits | Field Name | Access Type | Reset Value | Description
|---------------------|------------|-------------|----------------------|----------------------
| [GPIOx_Width-1:0] | GPIOx_TRI | Read/Write | Default Tri State |0 = output, 1 = input.
3.1.2 操作示例
见 2.2 基本TCL命令。
proc write {address value} {set address [string range $address 2 [expr {[string length $address]-1}]]create_hw_axi_txn -quiet -force wr_tx [get_hw_axis hw_axi_1] -address $address -data $value -len 1 -size 32 -type writerun_hw_axi -quiet wr_tx
}write 0x4000_0004 0x0000_0000 # 设置 GPIO 为输出
write 0x4000_0000 0x0000_0003 # 设置 GPIO 状态。
3.2 AXI IIC IP Core
3.2.1 AXI IIC 寄存器描述
| Address Space Offset | Register Name | Description |
|----------------------|-----------------|----------------------------------------------------------|
| 01Ch | GIE | Global Interrupt Enable Register |
| 020h | ISR | Interrupt Status Register |
| 028h | IER | Interrupt Enable Register |
| 040h | SOFTR | Soft Reset Register |
| 100h | CR | Control Register |
| 104h | SR | Status Register |
| 108h | TX_FIFO | Transmit FIFO Register |
| 10Ch | RX_FIFO | Receive FIFO Register |
| 110h | ADR | Slave Address Register |
| 114h | TX_FIFO_OCY | Transmit FIFO Occupancy Register |
| 118h | RX_FIFO_OCY | Receive FIFO Occupancy Register |
| 11Ch | TEN_ADR | Slave Ten Bit Address Register |
| 120h | RX_FIFO_PIRQ | Receive FIFO Programmable Depth Interrupt Register |
| 124h | GPO | General Purpose Output Register |
| 128h | TSUSTA | Timing Parameter Register |
| 12Ch | TSUSTO | Timing Parameter Register |
| 130h | THDSTA | Timing Parameter Register |
| 134h | TSUDAT | Timing Parameter Register |
| 138h | TBUF | Timing Parameter Register |
| 13Ch | THIGH | Timing Parameter Register |
| 140h | TLOW | Timing Parameter Register |
| 144h | THDDAT | Timing Parameter Register |
3.2.2 操作示例
3.3 驱动 HLS IP
3.3.1 HLS 代码
功能:使用 ap_ctrl_hs 协议,控制接口使用 AXI_Llite。
启动该 HLS IP 后,内部代码执行一次,即 led_state 翻转,并传递给 led 顶层接口。
#include <ap_int.h>void blink_counter(ap_uint<1> *led)
{
#pragma HLS INTERFACE mode=ap_none port=led register
#pragma HLS INTERFACE mode=s_axilite port=returnstatic ap_uint<1> led_state = 0;led_state = ~led_state;*led = led_state;
}

* REGISTER
+-----------+---------+----------+
| Interface | Mode | Bitwidth |
+-----------+---------+----------+
| led | ap_none | 1 |
+-----------+---------+----------+* TOP LEVEL CONTROL
+-----------+------------+-----------+
| Interface | Type | Ports |
+-----------+------------+-----------+
| ap_clk | clock | ap_clk |
| ap_rst_n | reset | ap_rst_n |
| interrupt | interrupt | interrupt |
| ap_ctrl | ap_ctrl_hs | |
+-----------+------------+-----------+
3.3.2 寄存器描述
// ==============================================================
// control
// 0x0 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read/COR)
// bit 7 - auto_restart (Read/Write)
// bit 9 - interrupt (Read)
// others - reserved
// 0x4 : Global Interrupt Enable Register
// bit 0 - Global Interrupt Enable (Read/Write)
// others - reserved
// 0x8 : IP Interrupt Enable Register (Read/Write)
// bit 0 - enable ap_done interrupt (Read/Write)
// bit 1 - enable ap_ready interrupt (Read/Write)
// others - reserved
// 0xc : IP Interrupt Status Register (Read/COR)
// bit 0 - ap_done (Read/COR)
// bit 1 - ap_ready (Read/COR)
// others - reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
3.3.3 操作示例
1)构建 Block Design 原理图

2)配置 AXI 总线地址

3)烧写 bitstream 后,即可控制该 HLS IP。

proc write {address value} {set address [string range $address 2 [expr {[string length $address]-1}]]create_hw_axi_txn -quiet -force wr_tx [get_hw_axis hw_axi_1] -address $address -data $value -len 1 -size 32 -type writerun_hw_axi wr_tx
}write 0x0000_0000 0x0000_0001
4. 总结
- JTAG to AXI Master 功能简介
- 在 Vivado 中添加该 IP
- 基本 TCL 操作命令
- 三个示例
- 通过 JTAG to AXI 控制 AXI GPIO
- 通过 JTAG to AXI 控制 AXI IIC
- 通过 JTAG to AXI 控制 HLS IP Core
参考列表:
1)UG908
Programming and Debugging (UG908)
https://docs.amd.com/r/en-US/ug908-vivado-programming-debugging/Hardware-System-Communication-Using-the-JTAG-to-AXI-Master-Debug-Core2)Xilinx Wiki - JTAG to AXI
Xilinx Wiki - JTAG to AXI
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/64488613/Using+the+JTAG+to+AXI+to+test+Peripherals+in+Zynq+Ultrascale

相关文章:
Vivado - JTAG to AXI Master (GPIO、IIC、HLS_IP)
目录 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 …...
Java中JWT(JSON Web Token)的运用
目录 1. JWT的结构2. JWT的优点3. JWT的流转过程4.具体案例一、项目结构二、依赖配置三、用户模型四、JWT工具类五、JWT请求过滤器六、安全配置七、身份验证控制器八、测试JWT JWT(JSON Web Token)是一种开放标准(RFC 7519)&#…...
CSS3练习--电商web
免责声明:本文仅做分享! 目录 小练--小兔鲜儿 目录构建 SEO 三大标签 Favicon 图标 布局网页 版心 快捷导航(shortcut) 头部(header) logo 导航 搜索 购物车 底部(footer࿰…...
Linux 默认内核版本更改
随笔记录 目录 1. 背景介绍 2. 解决方法 2.1 查看所有可用版本 2.2 安装指定版本内核 2.3 检查当前内核列表 2.4 检查当前默认内核 2.5 设置新的默认内核 2.6 确认内核是否成功加载 2.7 重启 2.8 删除其他版本内核 1. 背景介绍 linux 一般安装多个内核版本&…...
【ubuntu】修改用户名、主机名、主文件夹名、登录名、密码
目录 1.他们是什么 2.修改方法 2.1 修改用户密码 2.2 修改主机名 2.2.1 切换到root用户 2.2.2 修改名称 2.3 修改用户名 主文件夹名 登录名 2.2.1 sudoers 2.2.2 passwd 2.2.3 shadow 2.2.4 group 2.2.5 修改主文件夹名 3.重启 1.他们是什么 (1…...
深入理解JavaScript 的原型继承
JavaScript 的原型链继承机制和 Java 的类继承机制有明显的区别,虽然它们都用于实现对象之间的继承,但它们的实现方式、概念以及运行机制都不同。 1. JavaScript 的原型继承 JavaScript 是基于原型链的继承,主要依赖对象的 __proto__ 属性或…...
Error while loading conda entry point: conda-libmamba-solver
问题 解决方法 conda install --solverclassic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive...
FANUC机器人—PCDK
前言 FANUC提供了一种使用其 PC 开发人员套件 (PCDK) 从 PC 命令和配置机器人的简单方法。该套件允许 PC 访问机器人上的变量、寄存器、IO、程序、位置和警报;接下来,我将如何开始使用 C#。 连接到机器人 将以下突出显示的行添加…...
如何在wsl中使用beyond compare
寫一個名為bc4的文件,內容如下: #!/bin/sh /mnt/c/Program\ Files/Beyond\ Compare\ 4/BComp.com $(wslpath -aw $1) $(wslpath -aw $2)bc4 file1 file2參考:https://forum.scootersoftware.com/forum/beyond-compare-4-discussion/version-…...
CNN+Transformer在自然语言处理中的具体应用
在自然语言处理(NLP)领域,CNN(卷积神经网络)和Transformer架构各自有着广泛的应用。NLP中的具体应用: CNN在NLP中的应用 1.文本分类:CNN可以用于文本分类任务,如情感分析、垃圾邮件…...
DotNetty ChannelRead接收数据为null
问题:C#使用Dotnetty和Java netty服务器通讯,结果能正确发送数据到服务器,却始终接收不到服务器返回的数据。 解决:一定一定要注意服务器和客户端使用的编码一定要完全一样才行 我先前在客户端添加了StringDecoder,服务器却没有…...
3分钟学会下载 blender
1. blender简介 Blender是一款开源的3D创作套件,它由Blender Foundation维护,并得到了全球志愿者和专业开发者的支持。Blender广泛应用于3D模型的制作、动画、渲染、视频编辑、游戏创建、模拟、 composting以及3D打印等多个领域。 功能特点:…...
实现Xshell与虚拟机中Linux服务器的连接(附常见错误解决)
前言 Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 本文将介绍Xshell与虚拟机中Linux服务器连接…...
Rust 语言开发 ESP32C3 并在 Wokwi 电子模拟器上运行(esp-hal 非标准库、LCD1602、I2C)
文章目录 esp-rs 简介GithubRust 包仓库Rust 教程Wokwi 电子模拟器开发环境Rust 环境esp-rs 环境创建 ESP32C3 项目项目结构编译项目命令运行模拟器ESP32C3 烧录 esp-rs 简介 esp-rs 是一个专注于为 Espressif 系列芯片(如 ESP32、ESP32-S2、ESP32-C3 等࿰…...
项目-坦克大战笔记-墙体销毁以及人机销毁
在子弹撞到墙或者人机身上时会将碰撞到的墙体或者人机销毁 我们需要做到几点 检测子弹碰撞到的墙体或者人机将物体获取到 每帧遍历墙体列表与人机列表,检测被碰撞的墙,创建一个方法返回值为对应类型将被碰撞的物体返回出来 public static gudin wallp…...
硬件设计-利用环路设计优化PLL的输出性能
目录 前言 问题描述 问题分析步骤 杂散源头排查 245.76M 参考相噪: 30.72M VCXO的相噪性能测试如下: 解决方案 前言 LMK04832是TI 新发布的低抖动双环去抖模拟时钟, 其最高输出频率可以到达3250MHz, 输出抖动极低,3200MHz…...
Vue入门-Node.js安装
进入Node.js中文网 点击进入Node.js中文网 或者手动输入网址: https://www.nodejs.com.cn/download.html 点击下载64位安装包: 下载好之后双击进行安装 可选择个性化安装或默认安装 直接点【Next】按钮,此处可根据个人需求…...
OpenCV threhold()函数
OpenCV threhold()函数的主要用途是将灰度图转换为二值图像,实现灰度图的二值化,在机器视觉中使用频度较高,如尺寸量测,物体识别等。其原型如下: 函数参数: src 输入数组(多通道、8 位或 32 位浮点…...
Qt教程(002):Qt项目创建于框架介绍
二、创建Qt项目 2.1 创建项目 【1、New Project】 【2、选择Qt Widgets Application】 【3、设置项目名称和保存路径】 注意,项目名称和路径不要带中文。 【4、选择QWidget】 带菜单栏的窗口QMainWindow空白窗口QWidget对话框窗口QDialog 【5、编译】 2.2 项目框…...
《C++游戏人工智能开发:开启智能游戏新纪元》
在当今的游戏世界中,人工智能(AI)已经成为了不可或缺的一部分。它能够为游戏增添深度、挑战性和真实感,让玩家沉浸其中,享受前所未有的游戏体验。而对于 C开发者来说,如何在 C中实现高效的游戏人工智能开发…...
FreeRTOS定时器那些坑:调试3天发现的优先级配置与内存泄漏问题
FreeRTOS定时器实战避坑指南:从优先级陷阱到内存泄漏的深度解析 凌晨三点的调试灯依然亮着,逻辑分析仪屏幕上跳动的波形似乎在嘲弄我的无知——这已经是连续第三天被FreeRTOS定时器"教做人"了。从优先级配置失误导致系统卡死,到内存…...
OFA-Image-Caption赋能Android应用:移动端图像智能描述实战
OFA-Image-Caption赋能Android应用:移动端图像智能描述实战 你有没有想过,手机拍下一张照片,它就能立刻告诉你照片里有什么?对于视障朋友来说,这不仅仅是便利,更是打开世界的一扇窗。而对于内容平台&#…...
Simulink模型到AUTOSAR RTE的‘最后一公里’:手把手教你处理ARXML接口冲突并自动配置ISOLAR
Simulink模型到AUTOSAR RTE的‘最后一公里’:手把手教你处理ARXML接口冲突并自动配置ISOLAR 在汽车电子软件开发中,Simulink与AUTOSAR工具链的集成已经成为行业标配。但当你满怀期待地将Simulink模型导出为ARXML文件,准备导入ISOLAR进行后续开…...
手把手教你用V4L2实现USB摄像头采集(附ioctl调用避坑指南)
V4L2 USB摄像头采集实战:从设备配置到帧捕获的完整指南 1. V4L2框架概述与开发环境搭建 Video4Linux2(简称V4L2)是Linux内核中针对视频设备的标准驱动框架,它为USB摄像头、采集卡等视频设备提供了一套统一的编程接口。作为嵌入式…...
智能风扇管家:FanControl如何让你的电脑安静又高效
智能风扇管家:FanControl如何让你的电脑安静又高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…...
.NET校招真实面经:手写代码、项目深挖、算法到底考什么
文章目录写在前面:校招面试就像相亲,你得先过了"眼缘"这一关第一部分:手写代码——别做"嘴强王者",要做"手速达人"1.1 面试官为啥非要你手写代码?1.2 .NET校招手写代码到底考啥…...
手把手教你微调MONAI Bundle预训练模型:用TotalSegmentator数据提升CT器官分割精度
深度定制化医学影像分割:基于MONAI Bundle的TotalSegmentator数据微调实战 医学影像分析领域正经历着从通用模型到专用模型的范式转变。当我在去年参与一个肝脏肿瘤分割项目时,深刻体会到预训练模型在特定数据集上表现不佳的困境——不同医院的CT扫描协议…...
Path of Building终极指南:三步解锁流放之路最强角色构建
Path of Building终极指南:三步解锁流放之路最强角色构建 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 想要在《流放之路》中打造完美角色却总是迷失在复杂…...
终极指南:如何用F3工具快速检测U盘和SD卡真实容量
终极指南:如何用F3工具快速检测U盘和SD卡真实容量 【免费下载链接】f3 F3 - Fight Flash Fraud 项目地址: https://gitcode.com/gh_mirrors/f3/f3 在数字时代,存储设备容量造假已成为普遍问题,许多U盘、SD卡通过软件修改显示虚假容量&…...
dry插件系统解析:如何扩展自定义Docker管理功能
dry插件系统解析:如何扩展自定义Docker管理功能 【免费下载链接】dry moncho/dry: dry(Docker Run Commands)是一款命令行工具,旨在简化对Docker容器的操作管理,提供了一种简洁的方式创建、启动、停止和删除Docker容器…...
