好的,ZYNQ7000 的 JTAG 电路设计是硬件设计中的关键部分,它直接关系到芯片能否被成功配置、调试和编程。设计不当会导致无法连接、调试不稳定甚至芯片变砖。以下是详细的注意事项和最佳实践。
一、 核心原则:理解 ZYNQ 的双重 JTAG 角色
这是最重要的概念。ZYNQ7000 的 JTAG 接口同时服务于两个部分:
- PS 的调试接口:用于 ARM Cortex-A9 内核的调试、跟踪和软件烧写。
- PL 的配置与调试接口 :用于 FPGA 逻辑的配置、下载和调试(如通过 ILA/VIO)。
这两个部分在芯片内部通过一个 JTAG 链 串联。默认的内部链顺序为:
TDI -> PL TAP控制器 -> PS的DAP控制器 -> TDO
理解这一点对处理多器件菊花链非常重要。
二、 电路设计关键注意事项
1. 电源与上电顺序
- VCCINT 必须供电 :即使你只使用 PS 的 JTAG 调试 ARM,VCCINT(PL 内核电压)也必须正确上电。因为 JTAG 物理接口和部分 JTAG 电路位于 PL 域,VCCINT 不上电,JTAG 端口是"死"的。
- VCCO_MIO0 电压匹配 :JTAG 引脚(TCK, TMS, TDI, TDO)通常复用在 MIO[0:3] 上(请核对具体型号手册)。因此,BANK 500(VCCO_MIO0)的电压必须与你的 JTAG 适配器(如 Digilent、Xilinx Platform Cable USB 等)的输出电压匹配 ,通常是 3.3V 或 1.8V。这是导致无法识别芯片的最常见原因之一。
- 上电顺序:虽然 ZYNQ 对电源顺序有要求,但为确保 JTAG 可靠工作,建议所有相关电源(尤其是 VCCPINT, VCCPAUX, VCCINT, VCCO_MIO0)在 JTAG 连接尝试前都已稳定。
2. 引脚连接与上拉/下拉
- TCK, TMS, TDI 必须上拉 :
- TMS 和 TDI : 必须通过一个 10kΩ 左右的上拉电阻连接到 VCCO_MIO0。这确保在未连接调试器时,JTAG 状态机保持稳定的复位(Test-Logic-Reset)状态。
- TCK : 建议也通过一个 10kΩ 电阻上拉到 VCCO_MIO0,以防止噪声干扰。
- 参考:Xilinx 官方硬件开发指南明确要求此上拉。
- TDO 引脚 :是输出引脚,不能上拉或下拉,直接连接到连接器即可。
- PROG_B, DONE, INIT_B 等配置引脚 :如果使用 JTAG 进行 PL 配置,确保这些引脚有正确的上拉/下拉(例如,
PROG_B上拉,DONE上拉),并且没有被意外驱动。避免与配置模式设置冲突。
3. 多器件菊花链设计
当板上有多个可 JTAG 访问的器件(如 2个 ZYNQ, 或 ZYNQ + CPLD/FPGA)时:
- 理解内部链:不要为 ZYNQ 的 PS 和 PL 设计两个独立的 JTAG 端口。它们已经是内部链好的,你只需要将整个 ZYNQ 视为链中的一个节点。
- 正确顺序 :链的顺序应为:
JTAG适配器 TDI -> 第一个器件的 TDI -> 第一个器件的 TDO -> 第二个器件的 TDI -> ... -> 最后一个器件的 TDO -> JTAG适配器 TDO - 链中所有 TCK, TMS 并联:链中所有器件的 TCK 和 TMS 信号必须并联,并共用上拉电阻。
- 在 Vivado Hardware Manager 中设置:连接后,需要在 Vivado 中正确设置器件在链中的位置(IR长度等)。
4. 与安全启动模式的冲突
- 禁止 JTAG 模式 :如果 ZYNQ 被配置为 Secure Boot 模式,并且启用了 JTAG Disable 安全位,JTAG 端口将在引导后被永久禁用(直到下次非安全加载)。调试时请确保不启用此选项。
- 启动模式选择 :确保
MIO[5:0]或MIO[8:0](取决于型号)的启动模式设置正确。例如,设置为JTAG模式(如111111)时,PS 会等待 JTAG 连接,这可能影响你的正常启动流程。通常在生产中会设置为其他非 JTAG 模式。
5. PCB 布局与信号完整性
- 串联电阻 :在 TCK、TMS、TDI、TDO 信号线上靠近 ZYNQ 端,放置 22Ω 至 100Ω 的串联电阻。这有助于阻尼反射,提高信号质量,并提供一定的过冲保护。
- ESD 保护:在 JTAG 连接器端口附近放置 ESD 保护二极管,保护敏感的逻辑引脚。
- 走线长度:尽量使 JTAG 信号线短且等长(非严格要求,但建议)。避免将 JTAG 走线布在高速信号或开关电源附近。
6. 连接器标准
- 推荐使用标准的 10-pin (2×5, 1.27mm pitch) 或 14-pin (2×7, 2.54mm pitch) JTAG 连接器(如 ARM Cortex Debug 接口)。这确保了与市面上大多数调试器的兼容性。
三、 调试检查清单(当 JTAG 无法连接时)
- 查电源 :
- 所有电源(VCCINT, VCCO_MIO0等)是否都正常?
- VCCO_MIO0 电压是否与 JTAG 适配器电压匹配?
- 查上拉 :
- TMS、TDI(和 TCK)是否已正确上拉到 VCCO_MIO0?
- 查连接 :
- 电缆是否完好?连接器引脚定义是否与调试器匹配?(检查
TRSTn、SRSTn等额外引脚是否悬空或处理得当) - PCB 是否存在短路/开路?
- 电缆是否完好?连接器引脚定义是否与调试器匹配?(检查
- 查模式 :
- 启动模式引脚是否处于非 JTAG 禁用状态?
- 是否曾烧写过禁用 JTAG 的安全位?(如果是,需要用非安全启动清除)
- 查菊花链 :
- 如果是多器件,链的顺序和 Vivado 中的设置是否正确?
总结
设计 ZYNQ7000 JTAG 电路时,请牢记这几点:确保 VCCINT 和 VCCO_MIO0 供电正确且匹配;TMS/TDI/TCK 必须上拉;处理好菊花链;注意安全模式影响;并在 PCB 布局时考虑信号质量 。遵循这些注意事项,可以最大程度地保证 JTAG 接口的可靠性和可调试性。在投板前,强烈建议使用 Xilinx 的 HW_I/O_Pinout_Planning 工具或仔细核对数据手册的引脚描述。