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} {set address [string range $address 2 [expr {[string length $address]-1}]]create_hw_axi_txn -quiet -force rd_tx [get_hw_axis hw_axi_1] -address $address -len 1 -size 32 -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} {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_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)icon-default.png?t=O83Ahttps://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 AXIicon-default.png?t=O83Ahttps://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/64488613/Using+the+JTAG+to+AXI+to+test+Peripherals+in+Zynq+Ultrascale

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550575.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

cuda程序编译流程

cuda程序编译流程 本文以cuda example的matrixMul矩阵乘法为例说明cuda程序的编译流程。 1. 源代码 .cu 文件 在matrixMul示例中&#xff0c;源代码文件 matrixMul.cu 是典型的CUDA程序&#xff0c;包含以下部分&#xff1a; 流程图 主机代码&#xff08;Host Code&#xf…

GNSS定位中自适应调整电离层延迟参数过程噪声的方法

文章目录 前言一、非差非组合PPP模型二、电离层功率谱密度计算三、具体实现方法3.1 不平滑3.2 三阶多项式平滑 参考文献 前言 GNSS定位中不少技术手段如PPP和长基线RTK需要将电离层延迟作为参数估计&#xff0c;电离层延迟的变化通常被描述为随机游走过程&#xff0c;而功率谱密…

1.2.1 计算机网络分层结构(上)

体系结构可分层使得不同的层次承担不同的功能。 知识点&#xff1a; 1.不同类型的节点&#xff0c;实现的功能层次可能不一样。 2.分层结构的设计并不唯一&#xff0c;可以根据实际需求增加或减少层次。 3.一个功能可以放在不同的层次反复出现。 根据分层结构不同可以分为&…

CORE MVC 过滤器 (筛选器)《2》 TypeFilter、ServiceFilter

TypeFilter、ServiceFilter ServiceFilter vs TypeFilter ServiceFilter和TypeFilter都实现了IFilterFactory ServiceFilter需要对自定义的Filter进行注册&#xff0c;TypeFilter不需要 ServiceFilter的Filter生命周期源自于您如何注册&#xff08;全局、区域&#xff09;&…

推荐4款2024年热门的PDF转ppt工具

有时候&#xff0c;我们为了方便&#xff0c;需要将PDF里面的内容直接转换的PPT的格式&#xff0c;既方便自己演示和讲解&#xff0c;也让我们可以更加灵活的进行文件的编辑和修改。如果大家不知道要如何进行操作的话&#xff0c;我可以为大家推荐几个比窘方便实用的PDF转换工具…

STM32LL库之printf函数重定向

1. 加入以下代码 int fputc(int ch,FILE *f) {LL_USART_TransmitData8(USART1,ch);while(!LL_USART_IsActiveFlag_TXE(USART1));//需要等待发送完成return(ch); }记得添加 stdio.h 头文件 2. 在MDK中勾选&#xff1a;Use MicroLIB

swiper+fixed的错误,splice函数的使用,提取年月日substring

做项目时的一些问题 swiperfixedsplice函数的使用重点在 alldata.splice(0, alldata.length, ...response.data.data);splicealldata.splice(0, alldata.length, ...response.data.data) 这行代码的功能为什么不直接赋值 提取年月日 substring swiperfixed 项目中的一个错误&a…

【人人都是P8程序员】Cursor 使用的十大技巧

Cursor 使用的十大技巧 总是在一个空的文件夹中创建一个新的项目 表述需求时尽量明确但谨慎 让Cursor从项目一开始就写README文档&#xff0c;让其记录清楚产品功能、实现技术栈等等&#xff0c;并在完成关键步骤后对README文档做及时的更新&#xff0c;第二天继续完成项目时…

npj Climate and Atmospheric Science I 新疆生地所陈亚宁研究员团队孙帆博士后发表最新研究进展

题目&#xff1a;The dominant warming season shifted from winter to spring in the arid region of Northwest China 主导中国西北干旱区升温的季节已从冬季转变为春季 期刊&#xff1a;npj Climate and Atmospheric Science IF及分区&#xff1a;实时IF/JCR分区/中科院分…

【Linux】Docker下载与使用-nginx

目录 一、Docker介绍 二、Docker结构 三、下载Daocker 1. 在linux上下载docker&#xff0c;执行以下命令即可&#xff1a; 2. 开启docker 3. 执行以下操作并进行使用 四、在Docker上安装nginx 一、Docker介绍 Docker&#xff1a;是给予Go语言实现的开源项…

召回12 曝光过滤 Bloom Filter

在推荐系统中&#xff0c;如果用户看过某个物品&#xff0c;就不再把物品推荐给这个用户。小红书、抖音都这样做曝光过滤&#xff0c;原因是实验表明重复曝光同一个物品会损害用户体验。但也不是所有推荐系统都有曝光过滤&#xff0c;像 YouTube 这样的长视频就没有曝光过滤&am…

ASR-01语音模块+C8T6实现语音控制LED

不说废话&#xff0c;简单直接&#xff0c;上教程&#xff0c;包会的&#xff0c;看不会&#xff0c;后台私我 一、接线图 STM32F103C8T6 ASR-01OLED屏PA10(RX接收串口)TX&#xff08;发送串口&#xff09;PB8SCL PB9 SDAVCCVCCGNDGND 二、天问软件Block图形编程 大家不要问…

Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录

概述 公司有个项目使用到Grafana作为监控界面,因为项目方的环境极其复杂,仅物理隔离的环境就有三四个,而且每个都得部署项目,今天在某个环境测试,查看界面遇到一个比较奇怪的Grafana问题,后面针对该问题进行跟踪分析并解决,故而博文记录,用于备忘。 问题 登录项目We…

fastadmin 搜索提交重置按钮文本修改

默认 修改require-backend.min.js文件 效果 当然最好还是去需修改lang文件 效果 如果修改没生效记得清楚一下缓存&#xff0c;再刷新 完结 赠人玫瑰&#xff0c;手有余香&#xff01;如果文章内容对你有所帮助&#xff0c;请不要吝啬你的点赞评论和关注&#xff0c;你…

Tair简介

概述 Tair是淘宝团队开源的高可用分布式KV存储引擎&#xff0c;采用服务端自动负载均衡方式&#xff0c;使客户端逻辑简单。Tair&#xff0c;即TaoBao Pair缩写&#xff0c;Pair表示一对、一双等意思&#xff0c;即Key-Value数据对。 Tair分为持久化和非持久化两种方式。非持…

【Linux学习】【Ubuntu入门】2-1 Linux系统下运行C语言输出hello word

1.双击打开VMware软件&#xff0c;点击开启此虚拟机后&#xff0c;等待点击头像输入密码进入 2.“CtrlAltt”调出命令行终端&#xff0c;输入命令sudo apt-get install vim安装vim&#xff0c;输入命令sudo apt-get install gcc安装gcc 3.输入命令vi hello.c进入C语言编写环境&…

【D3.js in Action 3 精译_025】3.4 让 D3 数据适应屏幕(中)—— 线性比例尺的用法

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

[Python数据分析]最通俗入门Kmeans聚类分析,可视化展示附代码。

什么是k-means分析?【头条@William数据分析,看原版】 想象一下,你有一堆五颜六色的糖果,你想把它们按照颜色分成几堆。k-means分析就是这么一个自动分类的过程。它会根据糖果的颜色特征,把它们分成若干个组,每个组里的糖果颜色都比较相似。 更专业一点说,k-means分析是…

【C++并发入门】摄像头帧率计算和多线程相机读取(上):并发基础概念和代码实现

前言 高帧率摄像头往往应用在很多opencv项目中&#xff0c;今天就来通过简单计算摄像头帧率&#xff0c;抛出一个单线程读取摄像头会遇到的问题&#xff0c;同时提出一种解决方案&#xff0c;使用多线程对摄像头进行读取。同时本文介绍了线程入门的基础知识&#xff0c;讲解了…

【muduo源码分析】「阻塞」「非阻塞」「同步」「异步」

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言何为「muduo库」安装muduo库阻塞、非阻塞、同步、异步数据准备数据准备 引言 从本篇博客开始&#xff0c;我会陆续发表muduo库源码分析的相关文章。感谢大家的持续关注&#xff01;&#xff01;…