购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.1 JTAG和DAP子系统

开发人员可以通过标准的JTAG(IEEE 1149.1)调试接口来访问Zynq-7000 SoC平台的调试功能。在内部,Zynq-7000 SoC实现PS内的一个Arm调试访问端口(Debug Access Port,DAP)和PL内的一个标准的JTAG测试访问端口(Test Access Port,TAP)控制器。Arm DAP作为Arm CoreSight调试器结构的一部分,允许用户补充支持工业上标准的第三方调试器工具。

除了标准的JTAG功能,Xilinx TAP端口还支持大量的PL特性,包括调试PL、编程eFUSE/BBRAM、访问片上XADC等。更重要的是,通过DAP和PL硬件,同步地使用PS和PL之间带有的一个共享跟踪缓冲区与交叉触发接口,使得它允许进行Arm软件调试。

Zynq-7000 SoC全可编程平台包含的另一个重要调试特性是支持调试跟踪。这个特性允许用户将对PS和PL的所有跟踪捕获到一个公共的跟踪缓冲区内。通过JTAG读取跟踪缓冲区,或者通过TPIU(Trace Port Interface Unit,跟踪端口接口单元)将跟踪缓冲区的内容发送出去。

DAP/TAP的顶层结构如图4.1所示。根据JTAG BOOT_MODE引脚的设置,控制器处于级联JTAG链模式或独立JTAG链模式。在非安全启动过程中,一旦内部的ROM代码将控制权交给了用户软件,就自动使能JTAG链。这允许从用户软件入口点对系统进行调试。

JTAG支持两种不同的模式:级联JTAG链模式(也称单个链模式)和独立JTAG链模式(也称分裂链模式)。当系统脱离复位后,由模式输入引脚确定JTAG的模式。

由PS上的模式引脚确定JTAG的模式,当它处于级联JTAG链模式时,通过外部的JTAG调试工具或JTAG测试器可以看到TAP和DAP。在PL侧有专用的PL_TDO/TMS/TCK/TDI引脚,它只能连接一条JTAG电缆。通过该电缆,可以同时访问Zynq-7000 SoC内的PS和PL。

为了使用单独的电缆同时调试Arm软件和PL设计,用户必须切换到独立JTAG链模式。在这种模式下,通过专用的PL_TDO/TMS/TCK/TDI引脚,JTAG只能看到Xilinx TAP控制器。为了调试Arm软件,通过MIO或EMIO,用户可以连接ARM DAP信号(PJTAG),并在PL内例化一个软核。

图4.1 DAP/TAP的顶层结构

需要特别注意的是,必须给PS和PL同时上电,才能使用JTAG进行调试。由于安全性的原因,JTAG链路使用3个冗余门电路逻辑进行保护,用于防止由于单独事件扰乱(SEU)导致的在安全环境下偶尔使能调试的情况出现。

通过使用一个eFUSE比特位进行记录,Zynq-7000 SoC提供了永久禁止JTAG的功能。由于eFUSE JTAG禁止是不可逆的,因此在选择这个选项时要特别注意。

图4.2给出了调试跟踪端口的结构。通过调试APB,使用JTAG/DAP接口或软件,用户可以使能下列调试跟踪源:PTM、ITM和FTM。

图4.2 调试跟踪端口的结构

该部分主要关注TPIU,它是跟踪槽模块的其中一个,用于将实时跟踪导入外部的跟踪捕获模块。TPIU和ETB可以正确接收多个跟踪源,并将其汇总到跟踪的准确副本中。

尽管ETB能够支持高跟踪带宽,但是由于其4KB容量的限制,它只允许在很小的窗口时间内捕获跟踪。为了在一个较长的时间周期内监视跟踪信息,通过MIO/EMIO,用户必须使能TPIU导入,只有这样才能跟踪外部跟踪捕获设备(如HP逻辑分析仪、Lauterbach Trace32、Arm DStream等)的捕获。

JTAG调试接口的关键性能如下。

(1)支持JTAG/IEEE 1149.1边界扫描。

(2)具有两个IEEE 1149.1兼容的TAP控制器,即一个JTAG TAP控制器和一个Arm DAP控制器。

(3)具有用于每个Zynq-7000 SoC的唯一IDCODE。

(4)支持IEEE 1532系统内可配置(In System Configurable,ISC)编程,即eFUSE编程、BBRAM编程和XADC访问。

(5)支持板上Flash编程。

(6)支持Xilinx Chipscope调试。

(7)使用Arm DAP的Arm CoreSight调试中心控制CPU。

(8)通过DAP-AP端口直接访问系统地址空间。

(9)使用PS内的MIO,或者PL内的EMIO实现捕获外部跟踪。

4.1.1 JTAG和DAP子系统的功能

Arm DAP和JTAG TAP控制器按顺序连接到菊花链上,如图4.3所示。其中,Arm DAP在菊花链的前端,并且两个JTAG控制器属于两个不同的电压域。Arm DAP在PS电压域内,JTAG TAP在PL电压域内。JTAG I/O引脚在PL电压域内,利用了PL内已有的JTAG I/O引脚。尽管PS支持PL断电模式,但是应该给所有的电压域上电,以支持所有JTAG相关的属性。

Arm DAP控制器有一个4位长度的指令寄存器(Instruction Register,IR),JTAG TAP控制器有一个6位长度的指令寄存器。Arm DAP和JTAG TAP控制器完全独立地工作。在独立模式下,用户能够同时访问Arm DAP和JTAG TAP控制器。由于安全性原因,当PS脱离复位后,旁路Arm DAP控制器。可以通过PL配置逻辑内的eFUSE或控制寄存器来禁止PL内的Xilinx TAP控制器。

所有PL内的调试单元都处于调试工具的直接控制下,这些调试工具包括Arm RVDS或Xilinx SDK。PS内的所有设计和集成调试单元(包括DAP)都遵循Arm CoreSight结构。尽管在PL内没有CoreSight功能模块,但是PS内的FTM允许将PL跟踪导入ETB。CTI/CTM支持PS和PL之间的交叉触发。

将所有的PS调试目标都绑定到带有DAP的调试APB上,作为唯一的总线主设备,如图4.3所示。外部的调试工具通过JTAG连接Arm DAP控制器,使用调试APB配置所有的调试单元,包括CPU、CTI/CTM、PTM、ITM和FTM。调试APB用于从ETB上提取数据。

正确配置所有的调试单元支持用户的调试需要是一个比较复杂的过程。值得庆幸的是,其中大多数工作都由调试工具自动完成。然而,了解Zynq-7000 SoC的调试结构是必要的,这样可以更好地利用全系统调试能力。

除调试控制外,Arm DAP控制器还作为系统互联的一个主设备。在以前的调试系统中,为了探测系统地址空间,要求停止CPU的运行。而在这个新的安排中,允许用户直接访问系统地址空间,但不会停止CPU的运行。

TPIU提供了一种机制,用来在较长的时间周期内捕获跟踪。这里并没有内部的时间限制,即导出一个跟踪的时间在实际中唯一的限制就是Zynq-7000 SoC的带宽。如果通过MIO引脚,使用PS的I/O作为跟踪的导出,则最大的跟踪带宽取决于能够分配跟踪I/O的MIO引脚个数。另外,还可以通过EMIO导出跟踪。PL软件逻辑将EMIO跟踪信号连接到PL SelectIO。这里有其他潜在的创新方法用来管理EMIO跟踪。

图4.3 Arm DAP和JTAG TAP控制器按顺序连接到菊花链上

例如,用户能环路EMIO跟踪数据,将其返回PS,并且将其保存到DDR中或通过吉比特以太网输出跟踪,用于远程调试或监视。在典型的调试流程中,用户能充分使能跟踪导出能力,使得跟踪数据能适应所分配的TPIU吞吐量。在一个很小的时间窗口后,当通过跟踪窗口发生了所确定的调试后,如果有要求,则用户能充分使能跟踪导出能力,将较短周期数据保存到ETB内,用于下一级调试。不同于调试,跟踪端口也产生重要的数据,用于软件统计。软件统计用于帮助用户识别CPU功耗最高的软件例程。基于这个统计数据,用户就能执行软件优化或改由PL进行处理。

思考与练习4.1:请说明Zynq-7000 SoC的JTAG子系统的结构特点和实现的功能。

思考与练习4.2:请说明Zynq-7000 SoC的DAP子系统的结构特点和实现的功能。

4.1.2 JTAG和DAP子系统I/O信号

JTAG信号如表4.1所示。Zynq-7000 SoC全可编程平台不支持用于Arm DAP的SWD模式。在级联JTAG链模式下,只有PJTAG信号对JTAG是有用的,用户可以通过该信号访问Arm DAP或Xilinx TAP。在独立JTAG链模式下,用户通过PSJTAG信号只能访问Xilinx JTAG。为了访问Arm DAP,用户必须使用PL软核的SelectIO将EMIO信号连接到SelectIO。另外,用户还必须确定用于进行Arm DAP调试的信号。用户可见的TPIU信号如表4.2所示。

表4.1 JTAG信号

表4.2 用户可见的TPIU信号

注:带有EMIO,用于I/O参考的边界是PS/PL边界;带有PJTAG,边界是芯片封装的边界。

4.1.3 编程模型

下面给出两个例子,用于说明PS和PL调式。

1.实例:带有跟踪端口使能的软件调试

图4.4给出了Arm工具链的解决方案,也可能用Xilinx或Lauterbach调试工具代替Arm RealView ICE。在这种情况下,不要求编程PL,只要给芯片上电,用户就能够开始进行软件调试。此时,DAP是活动的,用于软件调试。但是,TAP处于旁路模式,可以通过MIO引脚使能跟踪端口。尽管在一些情况下存在MIO可用性的限制,但是用户可以使能跟踪导出能力,而不依赖PL配置。此时,对于大多数用户的主要挑战是需要分配MIO引脚用于跟踪端口。

图4.4 用户例子(1)

2.实例:包含跟踪端口使能的PS和PL调试

图4.5所示的例子给出了使用两个独立的调试工具在同一时刻使能PS和PL调试的方法,连接到Xilinx TAP的典型工具是Xilinx调试工具,连接到PS DAP的工具可以是Xilinx或来自Arm和Lauterbach的第三方调试工具。

图4.5 用户例子(2)

为了支持这种模式,要求配置PL,用于将DAP JTAG信号连接到PL的SelectIO。图4.5给出了通过PL SelectIO访问跟踪端口。如果有办法将跟踪端口连接到有限的MIO引脚进行复用,则可以像前面的例子那样,使用MIO跟踪端口。通过PL SelectIO访问跟踪端口可以支持最大32位的跟踪数据和提供给用户足够的跟踪端口吞吐量,以适应大多数的调试需求。当使用JTAG访问DAP时,必须配置PL。在PS/PL边界上,将来自EMIO的跟踪信号连接到PL SelectIO。

4.1.4 Arm DAP控制器

DAP是Arm标准调试端口的一个实现,它由单个配置内所提供的大量组件组成。所有组件都适配到各种不同的结构组件中,用于调试端口(Debug Port,DP)。该端口用于从外部调试器访问DAP和访问端口(Access Port,AP),用于访问SoC资源。

IEEE 1149.1 JTAG DP扫描链可用于读/写寄存器。下面两个扫描链寄存器用于访问调试端口内的主控制器和访问寄存器。

(1)DPACC用于访问调试端口。

(2)APACC用于访问访问端口。

APACC能够访问系统调试单元内的一个寄存器。由JTAG DP实现的扫描链模型捕获当前APACC或DPACC的值,并用新的值更新它们。一个更新将引起对DAP寄存器的读/写访问,也可能引起对其所连接的调试单元内的一个调试寄存器的读/写访问。Arm DAP IR指令如表4.3所示,所有其他IR指令的实现均为BYPASS。

表4.3 Arm DAP IR指令

Arm DAP由一个DP和3个AP构成。在3个AP之间,Zynq-7000 SoC作为总线主设备只实现APB-AP,用于访问所有的调试端口,并且AHB-AP用于直接访问系统存储器空间。DP内的所有寄存器如表4.4所示。

表4.4 DP内的所有寄存器

DAP内的AHB-AP和APB-AP寄存器如表4.5所示。对于每个AP,这里都有一个与之相关的唯一的寄存器集。尽管DAP允许JTAG AP,但是Zynq-7000 SoC不支持这种特性。

表4.5 DAP内的AHB-AP和APB-AP寄存器

4.1.5 TPIU

TPIU内的所有寄存器如表4.6所示。

表4.6 TPIU内的所有寄存器

续表

4.1.6 Xilinx TAP控制器

Xilinx TAP包含协议和典型JTAG结构描述的4个强制专用引脚。表4.7给出了JTAG命令。

表4.7 JTAG命令 OujpErxG0Xjv/Zmz6BbU5+HDBEiD+MkF5IN4W18nHf3ZmA1lMJkbFf4ZM9LXf9tf

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开