Zynq 7000 系列中的JTAG和DAP子系统

Zynq 7000系列SoC器件通过标准JTAG调试接口提供调试访问。在内部,SoC设备器件在处理系统(PS)内部实现了一个Arm调试访问端口(DAP),同时在可编程逻辑(PL)内部实现了一个标准的JTAG测试访问端口(TAP)控制器。作为Arm CoreSight调试架构的一部分,Arm DAP允许用户利用行业标准的第三方调试工具。
除了标准JTAG功能外,AMD TAP控制器还支持一系列PL功能,包括PL调试、eFuse/BBRAM编程、片上XADC访问等。最重要的是,它还允许通过TAP同时使用跟踪缓冲区和PS与PL之间的交叉触发接口,对Arm软件和PL硬件进行调试。
Zynq 7000 SoC包含的另一个重要的调试特性是调试跟踪支持。这一特性允许用户将PS和PL的跟踪捕获到一个公共跟踪缓冲区中,该缓冲区要么通过下文描述的JTAG读出,要么通过跟踪端口接口单元(TPIU)发送出去。

一、框图

在这里插入图片描述
上图展示了顶层DAP/TAP架构。一旦BootROM将控制权传递给用户软件,假设是非安全启动过程,JTAG链将自动启用。这允许从用户软件入口点进行调试。
JTAG支持两种不同模式:级联JTAG模式(也称为单链模式)和独立JTAG模式(也称为分链模式)。模式是在系统复位解除时通过模式输入确定的。
在级联JTAG链模式下,TAP和DAP都可以从外部JTAG调试工具或JTAG测试仪访问。尽管PL侧有专用的PL_TDO/TMS/TCK/TDI I/O,但只能连接一根JTAG电缆,并且可以同时访问PS和PL功能。为了使用单独的电缆同时调试Arm软件和PL设计,用户必须切换到独立JTAG模式。在这种模式下,JTAG电缆只能从专用的PL_TDO/TMS/TCK/TDI引脚看到AMD TAP控制器。为了调试Arm软件,用户可以将Arm DAP信号(PJTAG)通过MIO或EMIO路由到PL SelectIO引脚。
要使用JTAG调试,PS和PL都必须上电。出于安全原因,JTAG链受到三重冗余门控逻辑的保护,以防止由于单一事件扰动(SEU)而在安全环境下意外启用调试。Zynq 7000 SoC设备还提供JTAG禁用锁定功能,以防止由于软件错误而启用调试。
Zynq 7000 SoC提供了使用一个eFuse位记录来永久禁用JTAG的功能。在选择此选项时应谨慎,因为eFuse JTAG禁用是不可逆的。

二、跟踪端口接口单元(TPIU)

是用于将实时跟踪信息转储到外部跟踪捕获模块的跟踪接收器模块之一。为了监控更长时间的跟踪信息,必须启用TPIU通过MIO或EMIO进行转储,以便跟踪信息被外部跟踪捕获设备捕获,例如HP逻辑分析仪、Lauterbach Trace32、Arm DStream等。

三、特征

• 支持JTAG 1149.1边界扫描
• 两个符合1149.1标准的TAP控制器:一个JTAG TAP控制器和一个Arm DAP
• Zynq 7000系列器件的AMD TAP提供单一独特的IDCODE
• 支持IEEE 1532在系统可编程(ISC)设备编程
eFuse编程
BBRAM编程
XADC访问
板上闪存编程
• 支持AMD ChipScope调试
• 使用Arm DAP进行Arm CoreSight调试中心控制
• 通过DAP-AP端口间接访问PS地址空间
• 使用PS中的MIO或PL中的EMIO进行外部跟踪捕获
这些功能使得JTAG调试接口在开发、测试和调试过程中能够提供强大的支持和灵活性。通过JTAG接口,开发人员可以访问和控制设备的内部状态,捕获和分析系统的行为,从而更有效地进行调试和优化工作。此外,它还支持多种在系统可编程设备的编程,为设备配置和定制化提供了便利。

四、功能

Arm DAP和JTAG TAP控制器以菊花链方式连接,其中Arm DAP位于链的前端。这两个JTAG控制器属于两个不同的电源域。Arm DAP位于PS(处理系统)电源域中,而TAP则位于PL(可编程逻辑)电源域中。JTAG I/O焊盘位于PL电源域中,以便利用PL中现有的JTAG I/O焊盘。尽管PS支持PL掉电模式,但为了支持所有与JTAG相关的功能,这两个电源域都必须上电。
在独立模式下,用户可以同时访问TAP和Arm DAP控制器。出于安全原因,当PS复位解除时,Arm DAP控制器将被旁路。位于PL中的AMD TAP控制器可以通过eFuse或PL配置逻辑中的控制寄存器进行禁用。
PS内的所有调试组件都直接受调试工具的控制,如Arm RVDS或AMD XDK,通过Arm DAP进行。PS内的所有调试组件(包括DAP)均按照Arm CoreSight架构设计和集成。尽管PL内没有CoreSight组件,但PS内的FTM组件允许将PL跟踪转储到ETB中。CTI/CTM支持PS和PL之间的交叉触发。
所有PS(处理系统)调试组件都与调试APB(高级外设总线)相连,而DAP(调试访问端口)作为唯一的总线主设备。通过JTAG连接到Arm DAP的外部调试工具使用调试APB总线来配置所有调试组件,包括CPU、CTI/CTM、PTM、ITM和FTM。
PL中的AMD TAP控制器具有四个主要目的:
• 边界扫描测试
• eFuse编程
• BBRAM编程
• PL调试ChipScope。
TPIU提供了长时间捕获跟踪的机制。没有内部时间限制来确定跟踪可以转储多长时间,因此唯一的实际限制是Zynq 7000的带宽。如果使用通过MIO的PS I/O进行跟踪转储,则最大跟踪带宽取决于可以分配多少个MIO跟踪I/O。另一种选择是通过EMIO进行跟踪转储。PL软逻辑将EMIO跟踪信号连接到PL SelectIO。处理EMIO跟踪还有其他潜在的创新方法。
例如,用户可以将EMIO跟踪数据回环到PS,并将其存储在DDR内存中,或者通过千兆以太网导出跟踪以启用远程调试或监控。在典型的调试流程中,用户启用最小的跟踪源转储功能,以适应分配给TPIU的吞吐量中的跟踪数据。在通过跟踪监控确定发生调试的小时间窗口后,如果需要,用户可以启用完全跟踪转储功能,并将短时间的数据存储到ETB中,以便进行下一级的调试。除了调试之外,跟踪端口还为软件分析带来了显著的价值。软件分析有助于用户识别消耗最多CPU功率的软件例程。基于此,用户可以决定是执行软件优化还是将进程卸载到PL。

五、I/O信号

在级联JTAG模式下,对于用户来说,只有PL侧的PL_TDO/TMS/TCK/TDI信号是有意义的。通过这些信号,用户可以访问Arm DAP和AMD TAP。
在独立JTAG模式下,用户只能通过PL_TDO/TMS/TCK/TDI信号访问AMD TAP。要访问Arm DAP,用户必须使用PJTAG信号,如表27-1所示。将PJTAG信号路由到芯片引脚输出有两种选择:通过EMIO到PL SelectIO,或者通过MIO。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

minio如何配置防盗链

MinIO 是一个开源的对象存储服务器,用于存储大量的数据,同时提供了丰富的功能和 API。配置防盗链可以帮助你控制谁可以访问存储在 MinIO 上的对象。以下是在 MinIO 中配置防盗链的一般步骤: 编辑 config.json 文件: 找到 MinIO 服…

每日昨日之螺旋矩阵

螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:…

文心一言 VS 讯飞星火 VS chatgpt (241)-- 算法导论17.3 7题

七、为动态整数多重集 S (允许包含重复值)设计一种数据结构,支持如下两个操作:① INSERT(S,x) 将 x 插入 S 中;② DELETE-LARGER-HALF(S) 将最大的 ⌈|S|/2⌉ 个元素从S中删除。解释如何实现这种数据结构,使得任意 m 个 INSERT 和…

spring高级篇(二)

1、Aware和InitializingBean Aware和InitializingBean都与Bean的生命周期管理相关。 Aware接口: 概念: Aware接口是Spring框架中的一个标记接口,它表示一个类能够感知到(aware of)Spring容器的存在及其特定的环境。Spring框架提供了多个Awar…

sublime运行编译C和Java

1.先安装终端 参照以下教程 如何在 Sublime 文本编辑器中使用终端?_sublime终端窗口怎么打开-CSDN博客 可能遇到的问题:有些sublime text3可能并没有显示“package control”。这个问题对于笔者来说是有些吊诡的,因为之前一开始安装时是能…

nginx容器化方案预研

一、概述 目前 nginx迁移升级不方便,且生产环境没有编译环境,导致生产环境nginx版本过旧、目前存在安全漏洞无法升级。运维建议容器化nginx,因此预研了此容器方案 二、镜像制作 基础镜像 cloudservice-alpine-base-v1.tar 2.1 加载基础镜像 docker load -i cloudservic…

C++恶魔轮盘赌(道具版)

家人们&#xff0c;更新了昂&#xff0c;前文&#xff1a;来自阳了个阳C的恶魔轮盘赌无道具版 作为阳了个阳C的好同学&#xff0c;我光荣地揽下了道具版的重担 不多说话&#xff0c;直接上代码 #include<bits/stdc.h> #include<Windows.h> typedef long long ll…

STM32总结

1. Keil5 下载代码和编译代码需要注意的事项 下载代码&#xff1a; 安装包版本&#xff1a;确保选择与目标硬件兼容的Keil版本。工程设置&#xff1a;在下载代码前&#xff0c;检查工程的设置&#xff0c;确认芯片型号、晶振频率等信息是否正确配置。依赖库&#xff1a;确保所…

类和对象-对象特性-成员变量和成员函数分开存储

成员变量和成员函数分开存储 #include <bits/stdc.h> using namespace std; class Person{}; void test01(){Person p;//c编译器会给每个空对象也分配一个字节空间&#xff0c;是为了区分空对象占内存的位置//每个空对象也应该有一个独一无二的内存地址 cout<<si…

每天学习一个Linux命令之basename

每天学习一个Linux命令之basename 简介 在Linux系统中&#xff0c;basename是一个用于获取一个文件名或目录名的基本名称的命令。它可以用来去除路径前缀或者获取文件名的纯粹部分。basename常用于脚本编程和文件处理&#xff0c;非常实用。 基本用法 basename命令的基本语…

创建socket服务端和客户端--通信(简单入门)

目录 服务端(server) 客户端(client) 服务端(server) socket_client.py import socket #用的协议必须是同一个(要不然交流根本听不懂啊) # 1、创建服务器的socket对象 tcp_server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2、绑定IP和端口 tcp_server_…

【大模型系列】大模型评价指标总结

文章目录 1 图生文 (Image-to-Text)1.1 BLEU&#xff1a;基于准确率&#xff0c;得分越高越好1.2 METEOR&#xff1a;基于准确率和召回率&#xff0c;得分越高越好1.3 ROUGE&#xff1a;得分越高越好1.4 CIDEr&#xff1a;得分越高越好1.5 SPICE&#xff1a;得分越高越好1.6 Hu…

文本美学:text-image打造视觉吸引力

当我最近浏览 GitHub 时&#xff0c;偶然发现了一个项目&#xff0c;它能够将文字、图片和视频转化为文本&#xff0c;我觉得非常有趣。于是我就花了一些时间了解了一下&#xff0c;发现它的使用也非常简单方便。今天我打算和家人们分享这个发现。 项目介绍 话不多说&#xf…

4.2冰达机器人:视觉实例-机器人视觉循线、视觉实例-调整循线颜色

4.2.10a视觉实例-机器人视觉循线 本节内容演示一个机器人视觉的视觉循线实例 准备工作&#xff1a;布置一块区域作为循线场所&#xff0c;如下图所示。用蓝色胶带在地面贴一条路线&#xff08;机器人极限转弯半径0.5m&#xff0c;不要贴得过于曲折&#xff09;&#xff0c;将…

【超级简单】vscode进入服务器的docker容器

前提 1、已经运行docker容器 2、已经用vscode链接服务器 在vscode中安装的插件 Dev Containers docker 在容器中安装的依赖 yum install openssh-server yum install openssh-clientsvscode进入服务器的docker容器 找到自己的容器&#xff0c;右键点击&#xff0c;找到…

c#多线程 使用lock锁

使用 lock 关键字可以确保在同一时刻只有一个线程可以访问被锁定的代码块&#xff0c;从而避免线程资源竞争。以下是修改后的示例代码&#xff1a; using System; using System.Threading;class Program {static int sharedNumber 0;static int iterations 1000000;static o…

从零开始学习写Shell脚本【第二期,语法说明-变量】

从零开始学习写Shell脚本【第一期&#xff0c;语法说明-变量】 Shell脚本的语法包括变量、控制结构、函数等&#xff1a; 变量的定义&#xff1a;使用符号进行赋值&#xff0c;不需要指定类型。变量的引用&#xff1a;使用$符号加上变量名。例子 # 变量定义 name"John&…

安卓手机APP开发__媒体开发部分__检索元数据

安卓手机APP开发__媒体开发部分__检索元数据 目录 在播放期间 没有播放时 动作照片 在播放期间 媒体的元数据在播放期间能以多种方式来检索。最正常不过的方法 是监听Player.Listener这个监听器的方法onMediaMetadataChanged的事件&#xff0c; 这将提供一个可以使用的Med…

苍穹外卖day1--开发环境搭建

整体结构 前端&#xff1a;管理端&#xff08;Web&#xff09; 用户端&#xff08;小程序&#xff09; 后端&#xff1a;后端服务&#xff08;Java&#xff09; 前端工程基于ngnix运行 启动nginx&#xff1a;双击nginx.exe即可启动nginx服务&#xff0c;访问端口号为80 后端…

Xinstall:实现注册后自动绑定,提升用户体验

在移动互联网时代&#xff0c;App的注册与绑定流程对于用户体验至关重要。繁琐的注册步骤和手动绑定操作往往会让用户望而却步&#xff0c;导致用户流失。为了解决这一问题&#xff0c;Xinstall品牌推出了注册后自动绑定功能&#xff0c;极大提升了用户体验。 Xinstall的自动…