
1. 项目概述从芯片手册到可靠电路板做嵌入式硬件设计尤其是面对像TI KeyStone II这类高性能多核DSP最考验工程师功力的往往不是那些高大上的算法实现而是最基础的“起板”工作——电源、时钟、复位、调试接口。手册里每个章节都看似独立但真正画板子的时候你会发现它们环环相扣任何一个细节的疏忽都可能导致系统无法启动或者运行中莫名其妙地宕机。我经历过好几次板子回来上电DSP就是“沉默不语”用示波器一个个信号抓过去最后问题都出在这些基础环节上。今天要聊的就是KeyStone II硬件设计中三个最核心、也最容易踩坑的基础部分时钟序列、JTAG/仿真接口和设备配置与复位。官方几百页的硬件设计指南Hardware Design Guide信息量巨大但有些关键点散落在各个角落缺乏串联。我将结合自己多次调试KeyStone II平台如66AK2H14/12/06等的实际经验把这些碎片化的信息重新梳理不仅告诉你“要怎么做”更重点解释“为什么必须这么做”以及“如果不这么做会怎样”。无论你是第一次接触KeyStone II的新手还是正在排查疑难杂症的老手希望这些从实战中总结出的细节和原理能帮你少走弯路。简单来说这个内容就是帮你把芯片手册里关于“让DSP跑起来”的最底层、最必需的硬件设计要点吃透。它适合所有涉及TI C66x多核DSP或KeyStone架构的硬件工程师、系统工程师以及需要深度介入硬件调试的软件工程师。我们将从时钟的严格时序要求开始讲到如何设计一个既好用又稳定的调试接口最后深入理解各种复位信号的区别和配置引脚的稳妥处理方案。2. 时钟系统设计不仅仅是提供频率时钟对于数字系统就像心跳对于人体。对于KeyStone II这种集成多核C66x DSP、ARM Cortex-A15、高速SerDes和各种加速器的复杂SoC其时钟系统更像一个精密的“心脏网络”有主次、有先后。设计不当轻则启动失败重则运行时出现间歇性数据错误且极难排查。2.1 时钟序列的核心逻辑与底层原理手册里的时钟序列表格Table 10列出了一堆时钟和它们相对于POR信号变高的时间要求最常见的就是那个“必须提前16 µs”。很多工程师只把它当作一个死板的时序参数去满足但理解其背后的原理才能在设计电源时序和时钟使能电路时做出正确判断。核心原理锁相环PLL的稳定与锁定。KeyStone II内部几乎所有时钟域都源自各自的PLL。PLL需要在其参考输入时钟稳定后经过一个锁定时间Lock Time才能输出稳定、相位确定的时钟。这个“16 µs”的要求本质上是确保在芯片解除复位POR变高、内部逻辑开始动作之前相关的PLL已经完成了锁定。想象一下如果内核逻辑开始取指执行但给它的核心时钟PLL还在失锁或抖动状态后果就是不可预知的指令执行错误大概率直接导致芯片“卡死”。DDR控制器更是如此在DDR PHY和控制器初始化之前其参考时钟DDRCLK必须绝对稳定否则内存训练就会失败。另一个关键原则禁止浮空。手册特别强调“所有时钟驱动器在CVDD至少达到有效电平之前必须处于高阻态。之后所有时钟输入必须处于活动状态或静态状态。” 这意味着上电期间你的时钟发生器晶振、时钟芯片的使能端必须受控确保在核心电压CVDD稳定前其输出为高阻三态。这是为了防止不稳定的电压给时钟缓冲器或芯片时钟输入引脚带来不确定的电流冲击。上电后不能有任何时钟引脚是“悬空”的。不用的时钟输入必须按照手册中的终止方案通常是通过电阻接地或上拉将其拉到一个确定的静态电平高或低而不是断开连接。悬空的CMOS输入会振荡产生微小电流增加功耗和噪声也可能意外使能某些内部模块。2.2 关键时钟信号详解与设计要点我们挑几个最容易出问题的时钟信号深入说一下1. DDRCLK / DDRCLK3A / DDRCLK3B要求必须在POR变高前至少16 µs有效且稳定。设计要点这是硬性要求没有商量余地。通常DDR时钟由专用时钟发生器或FPGA提供。在设计电源时序时必须确保给时钟芯片供电的电源通常是1.8V或2.5V比DSP的CVDD和DDR电源更早或至少同时上电并稳定。时钟使能信号应受控于“电源好”逻辑确保电压稳定后才输出时钟。实操心得我曾遇到一个案例DDRCLK虽然提前了10µs但抖动Jitter过大导致DDR3在高压温环境下训练失败。后来换用了更低抖动的时钟发生器并优化了电源滤波才解决。所以“有效”不仅指有信号更指信号质量幅度、抖动达标。2. SYSCLK, CORECLK, ARMCLK要求同样需在POR变高前16 µs有效。设计要点这些是内核与子系统的主时钟源。注意CORECLKSEL配置引脚的状态它决定了是SYSCLK还是ALTCORECLK作为核心PLL的参考源。这个配置引脚的电平必须在整个上电复位期间保持稳定。注意事项如果使用外部有源晶振要关注其启动时间Power-up Time。有些温补晶振TCXO启动较慢可能超过16µs这就需要设计额外的延时电路确保在POR释放前时钟早已稳定运行超过16µs。3. 高速SerDes参考时钟SRIOSGMIICLK, PCIECLK, XFICLK等要求分为两种情况体现了设计的灵活性作为启动设备必须在POR变高前16 µs有效。这是因为芯片在Boot ROM阶段就可能要初始化该SerDes接口来加载引导程序。启动后使用只需在该SerDes模块被软件解除复位并配置前有效即可。这给了硬件设计更大的自由度你可以用软件控制一个时钟芯片的输出来在后期才提供该时钟。设计要点仔细规划你的启动方式。如果从PCIe或SRIO启动那么对应的参考时钟必须像DDRCLK一样严格满足提前16µs的要求。如果仅作为后期数据通道则可以将该时钟的使能与对应模块的软件初始化流程同步简化上电时序。4. 未使用时钟的处理方法必须按照手册中“Table 8”进行终止。通常是将未使用的时钟输入引脚通过一个电阻如100欧姆接地GND或上拉到DVDD181.8V使其保持静态直流电平。绝对禁止悬空。原理SerDes的PLL参考输入内部电路可能非常敏感悬空引脚会引入噪声可能导致邻近正在使用的SerDes通道性能下降或增加整体功耗。2.3 时钟电路设计检查清单在实际画原理图和PCB时建议对照此清单检查时钟部分[ ] 所有时钟源的供电电源时序是否早于或等于DSP核心电源[ ] 时钟发生器的使能OE引脚是否受控于“所有相关电源好”逻辑[ ] 对于需提前16µs的时钟其发生器启动时间PCB走线延迟是否仍满足16µs裕量建议留出20-30%余量[ ] 每个时钟输入引脚是否都有匹配的端接电阻通常串联和AC耦合电容对于SerDes时钟值是否参考了手册和IBIS模型仿真[ ] 未使用的时钟输入引脚是否已按照Table 8正确终止[ ] 时钟配置选择引脚如CORECLKSEL, PASSCLKSEL是否已通过电阻设置为固定电平且在上电期间不会浮动[ ] 关键时钟线如DDRCLK是否做了严格的阻抗控制、等长匹配并远离噪声源3. JTAG与仿真接口不止于调试JTAG接口常被新手忽视认为这只是软件工程师调试用的。但在KeyStone II这样复杂的系统上一个设计良好的JTAG/仿真接口是硬件调试、生产测试乃至系统维护的生命线。3.1 JTAG/仿真接口的三种模式与选型KeyStone II的JTAG接口功能强大远不止标准的边界扫描Boundary Scan。标准仿真模式信号仅需5个标准JTAG信号TDI, TDO, TMS, TCK, TRSTn。用途基本的代码下载、运行控制、内存查看。功能足够大多数调试场景。优点连接简单只需一个14针标准接头。高速实时数据交换HS-RTDX模式信号5个JTAG信号 EMU0 和/或 EMU1。用途EMU0/1在此模式下是双向的用于在调试器和DSP之间进行相对高速的数据传输适合 profiling性能分析或实时打印日志对系统运行影响较小。设计注意因为EMU0/1是双向的它们不能被缓冲除非使用支持双向传输的缓冲器。直接连接到接头上。跟踪端口Trace Port模式信号使用EMU[18:00]等多达19个引脚来实时输出处理器内部的程序流、数据访问等跟踪信息。用途进行最深入的性能分析、死锁调试、代码覆盖率分析。这是定位复杂并发问题的终极武器。硬件要求需要60针的高密度仿真器接头。因为信号速度可达166 Mbps对PCB走线要求很高阻抗控制、等长。选型建议对于产品开发板强烈建议预留完整的60针跟踪接口。即使初期不用Trace功能它也能兼容前两种模式。一个只焊了14针接头的板子后期如果想做深度性能调优会非常尴尬。3.2 多设备系统与信号完整性设计当一块板上有多个DSP如多个66AK2Hxx时JTAG链的设计就有讲究了。方案一星型连接独立头方法每个DSP独占一个60针仿真头。优点电气性能最好信号最干净每个DSP的Trace功能完全独立。缺点成本高多个接头占用PCB面积大最大的问题是不支持全局断点和同步运行/停止。也就是说你无法让所有DSP同时暂停在同一个断点调试多核协同任务时会非常痛苦。方案二链式连接共享头方法将多个DSP的JTAG信号TDI, TDO, TMS, TCK, TRSTn串接成一条链并共享一个60针接头。Trace信号EMU[18:2]通常只连接到其中一个DSP主调试设备。优点节省成本和空间支持全局断点对于调试多核同步至关重要。缺点只有被连接Trace信号的DSP能使用完整的Trace功能Trace带宽可能因EMU0/1被用于全局断点而略有减少链路过长可能影响TCK信号质量。实操中的折中方案在实际的多核硬件设计中我通常采用链式连接并遵循以下规则缓冲是关键TCK和TMS这两个关键时钟和控制信号必须在链的驱动端靠近接头处进行缓冲然后分发到各个DSP。TDO从一个DSP连接到下一个DSP的TDI。这能保证时钟边沿质量。TCK的端接手册特别建议为TCK预留一个AC并联端接通常是一个小电阻串联电容到地的位置。因为TCK是连续运行的时钟干净的信号沿对JTAG操作稳定性至关重要。EMU0/1的处理将它们直接不缓冲从每个DSP连接到接头。如果使用全局断点功能它们需要在多个DSP之间做“线与”逻辑通常需要额外的上拉电阻和缓冲器如开漏缓冲来实现具体需参考仿真器供应商的建议。3.3 1.8V与3.3V电平转换的实战方案KeyStone II的IO电压是1.8VDVDD18而很多老款的或通用的JTAG仿真器只支持3.3V电平。直接连接会损坏DSP或仿真器。方案A使用缓冲器进行电压转换推荐用于信号完整性要求高的场景方法如图22所示使用像AUC1.8V和ALVC3.3V这样的缓冲器家族因为它们传播延迟相似。连接DSP端的1.8V JTAG信号TDI, TMS, TCK, TRSTn经过AUC缓冲器后由ALVC缓冲器转换为3.3V信号给仿真器。TDO信号方向相反。优点驱动能力强信号质量好延迟可控。缺点需要更多器件占用PCB面积。方案B使用FET开关器件如模拟开关方法如图23所示使用CBTLV或TVC等系列的模拟开关。原理开关本身是双向的且能承受不同的电压域。当开关导通时两侧信号连通电平由各自的上拉电阻决定。优点电路简单尤其适合EMU0/1这种双向信号。缺点开关的导通电阻Ron会形成分压可能影响高速信号如Trace信号的质量。因此手册建议对于高速的Trace信号EMU[18:2]最好直接连接这意味着你的仿真器必须支持1.8V电平。我的选择在现代设计中我更倾向于方案A专用电平转换缓冲器并选择支持1.8V电平的现代仿真器如TI的XDS560v2 Pro或更高版本。这样能获得最好的调试体验和信号可靠性。如果成本敏感且不用Trace功能可以只为5个JTAG信号做转换并选择支持1.8V的廉价仿真器。3.4 未使用仿真引脚的处理这是一个简单的安全操作如果完全不用JTAG/仿真接口除了TRSTn其他所有JTAG和EMU引脚都可以悬空。TRSTn引脚必须通过一个4.7kΩ电阻下拉到地GND。这是为了防止芯片意外进入测试模式。如果使用JTAG但不用部分EMU引脚如不用Trace这些未使用的EMU引脚可以悬空。4. 设备配置、复位与初始化启动的精确舞蹈这是硬件设计中最具仪式感的部分一系列信号必须在精确的时刻跳起“舞蹈”芯片才能正确苏醒并执行你的代码。4.1 理解四种复位信号的区别与协作KeyStone II有四个外部复位引脚功能截然不同绝不能混淆。1. POR (Power-On Reset)功能上电复位。当芯片上电或电源跌落Brown-out时必须用这个信号来复位所有内部配置寄存器到已知状态。行为当POR为低时大多数输出引脚为高阻态Hi-Z。关键要求必须由电源管理电路如电源监控芯片、FPGA产生。必须在所有电源轨CVDD, DVDD18, DDR电源等都稳定后才能释放变高。如果任何电源轨在运行中跌落电源管理电路必须重新拉低POR。RESET信号必须在POR释放前变为高电平否则芯片会进入“热复位”状态。2. RESETFULL功能完全复位。它执行和POR一样的功能复位所有寄存器并且额外负责锁存BOOTMODE和配置引脚的状态。与POR的关系这是最容易出错的地方必须分开控制POR和RESETFULL绝不能简单地连在一起。它们需要独立的控制逻辑。时序POR变高后RESETFULL必须继续保持低电平一段时间具体看器件手册。之后RESETFULL才能变高此时芯片锁存配置引脚状态。在系统运行中你可以随时拉低RESETFULL来让芯片彻底复位。协作当电源故障导致POR被拉低时控制逻辑也必须同时拉低RESETFULL并在POR释放后保持RESETFULL低电平足够时间以确保配置被重新正确锁存。3. RESET功能软件可配置复位。可由外部引脚或内部寄存器触发。行为复位除测试、仿真和已启用复位隔离的逻辑块外的几乎所有部分。输出变为高阻或无效电平PLL设置恢复默认。关键区别RESET不会重新锁存Boot模式引脚芯片会沿用之前POR/RESETFULL时锁存的配置。这被称为“热复位”适用于系统软件崩溃后的恢复。4. LRESET (Local Reset)功能本地核复位。用于复位单个或全部的DSP CorePac而不影响其他外设、内存和时钟。使用场景在多核调试中单独复位某个卡住的核心或者实现动态核心加载/卸载。操作序列必须严格遵循通过CORESEL引脚选择要复位的核心编号。拉低LRESET。在CORESEL和LRESET稳定后拉低LRESETNMIEN使能。保持LRESETNMIEN低电平至少规定的最小脉冲宽度。拉高LRESETNMIEN。保持CORESEL和LRESET有效一段时间保持时间。未使用处理如果不使用LRESET功能建议通过4.7kΩ电阻将其上拉到DVDD18防止误触发。5. RESETSTAT功能复位状态指示输出。只要芯片处于内部复位状态POR、RESETFULL、RESET引起此引脚就输出低电平。重要性务必将其连接到LED或测试点这是硬件调试的“眼睛”。如果芯片不上电首先就该查这个信号。如果它一直为低说明芯片内部复位未完成问题可能在电源、时钟或复位序列。4.2 配置引脚的处理细节决定成败配置引脚主要是GPIO[15:0]在启动时复用为Boot Mode和Config引脚的处理是硬件稳定性的基石。1. 内部上下拉电阻的陷阱事实KeyStone II的GPIO引脚内部有默认的上拉或下拉电阻例如GPIO0内部上拉GPIO1-15内部下拉。陷阱你不能完全依赖这些内部电阻来保证启动配置手册明确写道如果引脚连接了走线、测试点或其他器件就必须使用外部电阻。原理内部电阻值较大通常几十kΩ抗干扰能力弱。PCB上稍长的走线就像天线会引入噪声可能在上电瞬间使引脚电平漂移导致锁存错误的配置值。一旦锁存错误芯片可能从错误的接口启动或者PLL配置错误系统根本无法运行。2. 外部电阻选型规则目的与内部电阻相同如果你想将引脚拉高而内部是下拉你需要一个足够“强”的外部上拉电阻来压倒内部下拉。手册推荐使用1 kΩ电阻。目的与内部电阻相反如果你想将引脚拉低而内部是上拉同样使用1 kΩ电阻下拉到地。目的与内部电阻相同加固如果你同意内部电阻的默认方向只是想增强抗干扰能力可以使用一个较大的电阻如4.7 kΩ进行加固。多引脚并联如果多个配置输入引脚仅限输入引脚被连接在一起例如多个DSP采用相同配置则外部电阻值应满足R_ext ≤ 1000/N Ω其中N是并联的引脚数。这确保了总驱动能力足够。3. 配置引脚在启动后的命运在RESETFULL的上升沿这些引脚的状态被锁存到配置寄存器中。之后它们就释放为普通的GPIO可以由软件自由配置为输入或输出。这意味着你为启动配置所接的外部电阻在系统启动后仍然连接在GPIO上。如果这个GPIO被软件设置为输出并驱动一个电平就会和外部电阻“打架”造成不必要的功耗甚至损坏。解决方案在设计时就要想好这个GPIO后续的用途。如果它后续要作为输入外部电阻没问题。如果它要作为输出你可能需要一个简单的电路例如用一个三态缓冲器由RESETSTAT信号控制在复位期间将配置电平传递给DSP复位结束后将缓冲器置为高阻让软件完全控制该GPIO。4.3 复位与配置电路设计实例一个典型的可靠复位与配置电路如下电源监控使用一片多路电源监控芯片如TI的TPS3801系列监控CVDD、DVDD18等所有关键电源轨。POR生成所有电源都“好”之后监控芯片的复位输出低有效作为DSP的POR信号。RESETFULL生成使用一个小的CPLD或逻辑芯片如74LVC1Gxx。它的输入包括POR信号、一个来自系统主控如FPGA的“全局复位”请求。其逻辑是POR为低时RESETFULL强制为低POR变高后RESETFULL继续保持低电平一个固定延时可用RC电路或计数器实现然后变高系统运行中主控的“全局复位”请求可以拉低RESETFULL。RESET连接可以直接连接到主控的“热复位”输出或者通过一个电阻上拉到DVDD18由软件通过寄存器控制。配置引脚每个Boot Mode引脚GPIO[15:0]都根据选择的启动方式通过一个1 kΩ的电阻连接到DVDD18或GND。即使默认内部电阻方向符合要求也建议并联一个4.7kΩ电阻以增强抗噪。RESETSTAT连接到一个LED串联电阻和测试点。5. 常见问题排查与实战技巧即使设计再仔细第一版硬件也可能遇到问题。以下是一些典型的故障现象和排查思路问题1上电后无任何反应RESETSTAT常亮低电平。排查步骤查电源测量所有电源引脚电压是否准确、稳定。特别是检查电源时序CVDD、DVDD18等是否在POR释放前已稳定。查时钟用示波器测量DDRCLK、SYSCLK等关键时钟检查是否在POR上升沿前16µs就已存在且稳定幅度、频率正确。特别注意时钟使能信号是否受控。查POR/RESETFULL时序双通道示波器一个通道抓POR另一个抓RESETFULL和关键时钟。确保满足手册的时序图要求。查配置引脚在上电瞬间用示波器抓取几个关键的Boot Mode引脚如BOOTMODE[3:0]看电平是否清晰稳定没有毛刺。毛刺很可能导致锁存错误值。问题2JTAG连接失败仿真器无法识别器件。排查步骤查电压确认仿真器接口电压与DSP的DVDD18是否匹配。如果不匹配检查电平转换电路是否工作。查连接确认TDI、TDO、TMS、TCK、TRSTn这五根线是否连接正确没有短路、断路。在多设备链中检查TDI-TDO的链式连接顺序。查TRSTn如果完全不用JTAG检查TRSTn是否被4.7kΩ电阻下拉。如果使用JTAG检查TRSTn是否被正确驱动或上拉。查信号质量用示波器查看TCK信号特别是上升/下降沿是否干净、陡峭。过冲、振铃或边沿过缓都会导致通信失败。检查TCK线上是否应该增加端接。查上拉电阻确认TMS、TDI等信号在仿真器端或DSP端是否有合适的上拉电阻通常仿真器内部已有。问题3DDR初始化失败软件跑飞。排查步骤首要怀疑对象是DDRCLK测量其频率、幅度、抖动是否在DDR PHY要求的范围内。时钟质量是DDR稳定的第一要素。查DDR电源检查DDR核心电压VDD和终端电压VTT是否准确、纹波是否过大。查PCB布线DDR信号线特别是时钟、数据选通DQS是否严格做了阻抗控制、等长匹配地址/控制信号与时钟的时序关系是否满足查配置检查DDR相关的配置引脚如DDRSLRATE[1:0]电平是否正确决定了DDR3/DDR3L的类型和速率。问题4部分外设如PCIe、SGMII无法正常工作。排查步骤查参考时钟确认该外设的参考时钟如PCIECLK, SGMIICLK是否存在、频率是否正确。如果该接口不作为启动设备检查软件是否在初始化该模块前已经开启了时钟。查电源和复位该外设的模拟电源AVDD是否供电软件是否解除了该模块的复位查SerDes引脚检查RX/TX差分对是否交叉连接正确AC耦合电容是否放置PCB走线是否满足差分阻抗和等长要求一个宝贵的调试技巧充分利用LED和测试点。在设计阶段就把RESETSTAT、POR、RESETFULL以及关键电源的“电源好”信号引到测试点或连接到LED。当板子不工作时这些视觉指示能帮你快速缩小故障范围。硬件调试很多时候就是“望闻问切”而这些信号就是最直接的脉搏。