ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于TMS320C6678与XC7V690T的6U VPX信号处理板卡设计

基于TMS320C6678与XC7V690T的6U VPX信号处理板卡设计 做硬件这么多年VPX板卡一直是“高端”的代名词。手头这个活儿更是不一般基于TMS320C6678这颗8核DSP配上赛灵思的旗舰FPGA XC7V690T还得跑在6U VPX标准板卡上。这玩意儿在相控阵雷达信号处理、通信对抗、软件无线电这些领域地位很高别人一听你做过这块儿通常都会高看一眼。先说清楚这个设计难点在于C6678和XC7V690T不是简单的“粘贴复制”到一块板上它们的电源、时钟、高速互联、DDR3存储每一处都要单独推敲。这板子本身也不是单纯跑个点灯程序就算完它是真刀真枪去处理ADC采进来的宽带信号的。这几天正好把这一版原理图收尾踩了不少坑也积攒了一些确定性经验。这篇就把这次的完整设计框架和细节取舍一次讲透——从系统架构、核心器件选型对策到SRIO/PCIe高速链路规划、电源树设计、DDR3布线再到调试时的那些坑全盘托出。内容偏硬核适合正在做C6678或XC7V690T开发尤其是想上手VPX架构的工程师。1. 整体设计思路与架构拆解1.1 为什么是C6678XC7V690T这个组合这两个芯片的组合在业内被称为“经典黄金搭挡”原因在于它们算力特点高度互补且互联接口成熟。TMS320C6678是TI KeyStone架构的8核DSP单核主频可达1.25GHz定点运算能力达到160 GMACS浮点也可以做到40 GFLOPS。C6678的长处是算法执行效率极高特别是在做脉冲压缩、DBF波束形成、恒虚警检测等矩阵密集型运算时8个核可以并行处理。但C6678的短板在于接口能力和并行预处理能力。它虽然自带SRIO、PCIe、HyperLink但这些接口的接收能力有限无法像FPGA那样做到几十路LVDS同时接收也无法完成高速ADC数据的实时整理和抽取。XC7V690T这颗FPGA则正是“接口之王”。它属于赛灵思Virtex-7家族拥有约69万个逻辑单元同时具备66个GTH收发器单通道速率可达12.5Gbps。前端抓取ADC采样数据、做数字下变频、多通道抽取滤波、数据分发、时序控制这些活儿交给FPGA非常合适。它处理完的数据再通过高速总线交给DSP做深度算法处理处理完的结果再回传FPGA进行输出这套流水线逻辑在雷达和通信领域是经过实战检验的。用生活类比来说FPGA像是生产车间的“总调度质检员”负责把原材料ADC采样数据快速分拣、初步加工DSP则是车间里的“高级技工”负责把半成品加工成精密零件。两者各司其职效率才会高。1.2 6U VPX结构尺寸和板卡布局约束VPX比起传统CPCI、VME在高速互联上有了质的飞跃但也正因为引入了MultiGig RT2连接器给板级设计带来了不少物理限制。6U VPX的板卡尺寸是233.35mm×160mm在这个面积上要实现DSPFPGA两套最小系统的布局还要塞入电源模块、时钟模块、电平转换电路挑战相当大。最重要的一条经验在原理图设计阶段就必须考虑布局分区。C6678和XC7V690T都是大功耗器件——C6678在满负载工作下的功耗可以达到10W以上XC7V690T则可能超过15W。两个高热密度器件若集中放置散热就是灾难。所以布局时要有意识地将它们分置板卡两侧或前后排并根据结构配合风道做散热规划。还要仔细规划两个FPGA与DSP之间的互联布线通道。XC7V690T的GTH收发器位置是固定的它和C6678的SRIO接口之间的走线需要充分考虑FPGA的Bank分布。我常在布局阶段就给原理图Placement加约束保证高速差分对的走线长度可控避免后期布线时出现交叉扇出。1.3 SRIO、PCIe、HyperLink三种互联总线的职责分配在很多初学VPX的人看来DSP和FPGA之间有一条高速总线就够了何必搞这么多接口。但真正做信号处理板时总线带宽经常是瓶颈单一总线容易出现“堵车”。这板卡上我规划了三条互联通路SRIO x4作为主数据通路承担FPGA向DSP传输预处理后的基带数据。C6678支持SRIO Gen2速率每个通道速率可达5Gbpsx4模式理论带宽可达20Gbps双向40Gbps。FPGA侧用GTX收发器实现SRIO协议跑在5Gbps速率即可。PCIe x2作为控制面通路主要传输CPU下发的工作参数波位、频点、增益控制字以及DSP上报的工作状态。C6678内部自带PCIe控制器支持Gen2速率x2模式实测带宽约8Gbps控制通信用绰绰有余。HyperLink这是TI自家芯片之间的专属高速接口速率可达12.5Gbps但在C6678与C6678之间的板间级联时使用。如果这套板卡未来要做多板卡联动比如两片C6678组成双DSP处理阵列HyperLink就是最佳选择它的延迟极低几乎可以当作并行内存访问来用。所谓“术业有专攻”数据、控制、级联各占一条路运行时互不影响。这个架构在多项目中被反复验证算是C6678FPGA平台的标准范式。2. 核心器件选型及其背后的取舍逻辑2.1 FPGA选型XC7V690T-2FFG1761I的细节解析赛灵思Virtex-7家族里XC7V690T并不算最大规模的但其性价比和接口资源在信号处理板中极受欢迎。我这里选用的是FFG1761封装、速度等级-2、工业级后缀I的型号。这个封装共有1761个引脚BGA封装引脚间距0.8mm对PCB制造工艺要求较高需要选用HDI高密度互连工艺才能保证布线顺畅。选择-2速度等级是综合考虑了“是否能跑高速串行收发器”和“逻辑时序收敛难度”的折中。速度等级-3虽然性能更高但价格贵了不少且在这块板上并不需要跑到极限-2的速度等级配合干净的设计跑GTH的10Gbps速率绰绰有余。还有一个容易踩坑的点XC7V690T有多种配置接口。我选用了BPI x16 Flash配置的方式Flash选用N25Q128A13ESE40E。FPGA上电之后主动从Flash加载程序无需外部控制器干预。这里还要注意BPI配置模式下地址线A0-A25并联接入Flash数据线DQ0-DQ15也要一一对应。有一个容易出错的地方是赛灵思7系列FPGA的配置文件格式在BPI模式下可以选择“MultiBoot”但升级时需生成对应的MCS文件否则板卡无法启动。2.2 DSP选型TMS320C6678ACYP的细节解析TMS320C6678ACYP是C6678中的工业温度版本CYP后缀意味着封装为FCBGA-841工作温度范围-40℃~100℃。之所以不用商业级而选工业级原因之一是在雷达、电子对抗等机载或车载应用中温度适用范围必须足够宽裕。另外工业级在筛选和测试上标准更严批量生产的失效率相对可控。C6678的核心电压0.9V~1.1VIO电压1.5V/1.8V/3.3V等一组复杂组合。它的功耗需依据运行任务而定——8个内核全速跑浮点FFT运算时功耗接近12W如果只是跑控制管理任务功耗会降到5W左右。这要求DSP的供电电源设计必须兼顾“峰值供给”和“低负载效率”。我的做法是选用两颗可并联的数字电源芯片输出电流能力做到30A以上随着负载动态变化电源控制器自动切换PFM/PWM模式保证轻载时效率仍然在线。C6678对于时钟也有较高要求内核时钟可来自内部PLL倍频外部参考时钟通常为50MHz或100MHz。我选了50MHz的参考时钟配合C6678的PLL倍频参数锁定到主频1GHz。注意C6678的时钟输入必须是LVCMOS电平且要仔细匹配占空比否则会导致PLL锁定不稳定或失锁。2.3 电源架构设计多路电压轨与上电时序电源设计是这块板卡里的重头戏也是最容易被低估的部分。C6678加上XC7V690T两颗器件加起来需要的电压轨不下十路VCORE、VCCAUX、VCCINT、VCCBRAM、DSP1V0、DSP1V8、DSP3V3、DDR3L1V35等等。不做整体规划原理图阶段就会开始混乱。我采用的电源树方案是“输入12V→中间总线→多路负载点电源POL”电源架构示意图如下此处文字描述12V输入由背板VPX P0连接器引入首先经过电磁干扰滤波器。滤波之后兵分两路一路直接送给大电流DC/DC模块生成5V中压总线另一路经线性稳压器产生3.3V辅助电源供给板卡管理电路和时钟芯片。5V总线再分配给多个负载点电源模块分别生成FPGA的VCCINT1.0V、VCCAUX1.8V、VCCBRAM1.0V、DSP的CVDD1.0V、DVDD181.8V、DVDD333.3V以及DDR3L的VDDQ1.35V和VTT0.675V。上电时序方面XC7V690T要求VCCINT先上电、VCCAUX次之、最后是VCCIOC6678要求CVDD先于DVDD18DVDD18先于DVDD33。可用电源监控芯片配合逻辑门实现时序控制。我使用了一颗具备可编程时序逻辑的电源排序器将上述时序要求精确到毫秒级。严格来说不少板卡直接采用阻容延时也能实现上电顺序但在批量生产时可靠性会打折扣还是建议用专用芯片。2.4 时钟网络设计系统时钟的多级扇出与分配时钟是高速数字电路的“心跳”在这样大而全的板卡上尤其关键。整板的核心时钟源选用了一颗低相噪温补晶振频率10MHz。这个10MHz进入时钟发生器如LMK04828经内部PLL产生多路时钟输出一路100MHz供给FPGA GTX/GTH参考时钟一路50MHz供给DSP参考时钟一路125MHz供给SRIO PHY参考时钟还有一路用于ADC采样时钟或者可编程逻辑的通用时钟。时钟分配时最容易犯的错误是“扇出不够加缓冲”但不加端接就指望信号干净。时钟芯片输出通常是LVDS或LVPECL电平在走线时务必保证差分对内等长并与接收端端接电阻匹配。LMK04828内部的PLL2环路滤波器设计直接影响时钟抖动板级调试时这一块需要用频谱仪实际测量抖动要控制在皮秒量级否则千兆高速收发器的误码率就会抬高。3. SRIO与PCIe高速互联链路的设计与关键参数3.1 SRIO x4链路从FPGA收发器到DSP的电气规格SRIO是C6678与FPGA之间数据交换的核心总线。C6678的SRIO接口支持1x/2x/4x/8x模式但实际板卡中普遍采用x4模式兼顾带宽和引脚开销。FPGA侧的SRIO实现依赖底层GTH收发器。每个GTH通道的数据通路包含发送端和接收端发送端做并行数据到串行数据的转换接收端做恢复时钟和数据解串。SRIO Gen2模式下每通道速率为5Gbps采用的编码方式为8B/10B实际有效带宽为4Gbps。链路损耗计算是硬功夫。在FR4板材上5Gbps信号的差分走线损耗约为0.7dB/inch~1.0dB/inch。若FPGA与DSP之间的走线长度是6英寸加上连接器和过孔损耗链路总损耗预计在7dB左右。这个损耗值尚在GTH收发器可接受的范围因为GTH的接收端集成均衡器可以通过寄存器配置来补偿信道损耗。若走线长度超过10英寸我会建议在PCB设计中预留交流耦合电容位置以方便后续加装均衡芯片。讲到SRIO调试有个绕不开的操作跑回环测试。我在第一版硬件调试时会先在C6678侧配置内部回环模式确认DSP的SRIO控制器工作正常再让FPGA侧发送数据DSP侧接收数据比对是否有误码。只有当回环和直连双向测试均通过才说明链路物理层没有问题了。3.2 PCIe x2链路控制面的可靠通道PCIe虽然也是高速串行接口但它和SRIO在协议栈上差异较大。PCIe是标准的分组交换协议支持复杂的枚举和配置机制SRIO则更偏向于嵌入式轻量级协议。C6678自带的PCIe控制器支持Gen1和Gen2速率。我这张板子采用x2配置原因是节省引脚资源并且控制面的数据吞吐量并不大无需x4。PCIe是树形拓扑需要Root ComplexRC和EndpointEP。在系统中通常由FPGA充当RCDSP充当EP或者反过来。实际项目里我更多采用FPGA作为EP把RC的角色留给需要跑操作系统的主控处理器后续可通过VPX背板P2连接器扩展这样调试更灵活不用在FPGA里固话RC行为。PCIe链路还有个特殊性收发通道必须使用交流耦合电容这个电容通常放在发送端。PCIe规范要求这个电容容值为75nF~200nF。我板卡上统一选用了100nF的0402封装电容靠近发送端放置。3.3 高速连接器选型与信号完整性考量这块板卡上一套完整的VPX背板互联包括P0、P1、P2三个连接器。P0用于供电、管理、参考时钟以及系统的控制信号P1提供SRIO或PCIe数据链路P2扩展出更多的高速通道比如排第二路SRIO或者专用的ADC同步信号。VPX连接器典型为MultiGig RT2系列它的引脚设计和阻抗匹配做得极好差分对支持高达10Gbps以上的速率。在原理图设计时需要注意连接器引脚归属不要把高速差分对放在连接器两端相邻位置这样容易造成串扰。很多人忽略的一点是P0连接器上的参考时钟和电源管脚。它们是一对“隐性关键”。如果P0连接器供电引脚接触不良或滤波不干净整板的电源噪声会传导到所有模块。P0上还需要设计热插拔检测信号和电源管理总线IPMB这些信号是系统管理控制器读取板卡工作状态的依据。4. DDR3存储子系统的设计与布线策略4.1 C6678 DDR3控制器配置和存储容量规划C6678内置DDR3存储器控制器支持DDR3-800/1066/1333等速率等级。设计上我使用了4片DDR3L颗粒组建64bit位宽数据总线容量为4GB。选用DDR3L而不是DDR3主要原因是DDR3L的IO电压为1.35V相比DDR3标准的1.5V功耗更低在板卡上对整体热预算更友好。C6678的DDR3控制器支持ECC功能Error Correction Code。当有4片DDR3颗粒时可以分配其中一片的8bit作为ECC专用组成72bit位宽64bit数据8bit ECC这样控制器可以检测并纠正单bit错误。这个设计在高温环境中尤其有价值能显著降低由于存储位翻转导致程序跑飞的概率。4.2 DDR3布线关键规则与阻抗匹配DDR3的布线是高速PCB设计中最讲究的一个环节。主要有三大类约束需要遵守地址、控制、命令信号采用Fly-by拓扑走线末端加终端电阻上拉到VTT。走线长度要求尽量保持与时钟线等长。Fly-by拓扑的优势是信号完整性好、反射小相比T型拓扑更适合DDR3高速运行。数据信号采用点对点连接每个字节通道Byte Lane内部的DQS与DQ信号必须严格等长等长误差控制在±5mil以内数据组与数据组之间的走线长度差距也须限制在±20mil以内。时钟信号CK与CK#为差分对差分阻抗100Ω与DDR3芯片的距离要控制在300mil内时钟到每片DDR3颗粒的时延误差要控制在±10mil。在层叠结构上我选择了10层板设计L1信号、L2地、L3信号、L4电源、L5地、L6信号、L7信号、L8电源、L9地、L10信号。每个信号层相邻都有完整的地平面或电源平面确保回流路径短且连续。DDR3走线原则是“参考平面完整”一旦跨越分割区域阻抗就会突变产生反射这在调试时很难排查。4.3 DDR3初始化与校准流程的注意事项DDR3不是上电就能直接用的。它需要一个初始化序列包括复位、加载模式寄存器、ZQ校准、写电平校准等过程。C6678的DDR3控制器内嵌了这些流程但在原理图设计时需确保DDR3_RESET、DDR3_CKE、DDR3_ODT等信号被引出到合适位置。有一个坑必须提C6678的DDR3控制器支持DDR3动态ODT动态片上端接但必须在初始化时正确配置Mode Register否则ODT不会在读写操作中自动生效信号质量会恶化。若你在调试中发现DDR3读写偶尔出错先别怀疑芯片翻一翻ODT配置。另外DDR3数据总线没有终端电阻阻抗由控制器和DDR3芯片内部ODT控制。在PCB设计中不再额外放置端接电阻这样减少了BOM成本和寄生效应。5. 其他关键接口设计电平转换、串口与网络5.1 GPIO与电平转换电路FPGA的IO电压是1.8V但VPX背板上很多控制信号是3.3V或5V环境这就需要进行电平转换。电平转换有两种方案一是用分立MOS管搭建的双向电平转换电路二是用集成电平转换芯片方案。集成芯片方案更可靠。适合VPX板卡的转换芯片有SN74AVC4T245、TXS0108E等。其中TXS0108E属于自动方向检测型适合GPIO类信号8bit的非总线信号转换靠它很顺手。值得留意的是TXS0108E在转换速率上有限制不建议用于高于24Mbps的信号如果传输的是同步串行接口如SPI需选择带方向控制的SN74AVC4T245等芯片。5.2 板载串口与调试接口C6678的UART接口是标准16550兼容UART引脚电平为1.8V。调试主机的串口是RS-232电平或USB转TTL电平因此需要做电平转换。我在设计上选用SP3232EEN芯片完成RS-232电平转换另留出一路USB转串口芯片作为备用调试口。一个常见问题是C6678的UART默认输出映射到哪个引脚。C6678有丰富的引脚复用功能要仔细阅读数据手册配置好PINMUX寄存器。如果寄存器没配好串口输出看不到任何数据容易误判为硬件故障。建议原理图阶段就将串口引脚标注并梳理成表后续调试时能省不少时间。5.3 千兆以太网接口设计C6678没有内置网络MAC控制器但可以通过外接PHY芯片和EMIF总线扩展实现网络支持。典型方案是选用Intel的WG82574L或TI的DP83640千兆以太网PHY芯片。不过说实话在信号处理板卡上网络口的角色更偏向调试和维护不承担高速数据流。我在这块板上只设计了一路10/100/1000M自适应以太网口通过VPX背板P2引出用于远程加载程序和网络状态监控。在使用网络调试时你会体会到这套设计的便利性——无需打开机箱通过网络就能完成程序的远程升级和数据读取。6. 原理图设计流程、工具使用与实用技巧6.1 从自顶向下的层次化设计开始原理图设计并不是拿张图纸直接开画。我习惯用自顶向下的层次化方法将整套设计拆解为系统顶层、DSP最小系统、FPGA最小系统、电源模块、时钟模块、接口连接器等独立子模块。具体操作上工具选择OrCAD Capture CIS利用层次块Hierarchical Block将不同功能模块组织为独立页面这样每一块都能单独修改、单独检查不会出现改一处逻辑还要翻遍整张图的情况。复杂设计里层次化设计不是可选项而是必选项。层次化页面的命名也要讲究新增页面时命名规则建议采用“模块名_功能说明_V1.2”的格式。这样不光自己查图方便交接给同事时也不会产生理解障碍。6.2 元器件符号库与封装管理原理图符号库是设计的“地基”。如果符号库本身有错误后续所有工作都会跟着出错。C6678有841个引脚创建符号时要把引脚名称、编号、电气类型Input/Output/Power标注清楚。FPGA的1761个引脚更复杂建议直接使用官方提供的元件库再根据实际需求做删减。别偷懒创建“自定义命名”的引脚。例如FPGA上有多个电源引脚VCCINT它们虽然名字相同但位置不同在PCB布线时需要分别处理。正确的做法是保留所有电源引脚在原理图中用电源符号统一连接同时保留参考位号以方便查找对应关系。6.3 原理图检查清单与电源树仿真原理图画完后不要马上送去画PCB先做一轮严肃的设计检查电源树检查逐路核对每一路电源的输出电压、最大电流、纹波要求是否满足负载需求。用Excel表格列出“电源路径→负载芯片→电压→电流→容差”一目了然。时钟路径检查核对所有时钟信号的终端匹配电阻是否放置驱动强度和接收端的电平标准是否一致。高速接口检查确认差分对的极性没有接反交流耦合电容位置正确。上电时序检查借助仿真工具对电源时序进行SPICE仿真确认各个电压轨的上升沿和次序符合芯片手册要求。值得一提的是电源树的PDN仿真Power Delivery Network越来越受重视。使用Ansys SIwave或Sigrity PowerDC可以提前评估电源平面的直流压降和电流密度。虽然这套流程偏重后仿真但原理图阶段的电源去耦电容数量、容值组合也应据此优化避免后续PCB改版。7. 调试阶段的常见问题与排查方法7.1 上电后电源时序异常上电后最先要验证的就是电源时序。用示波器同时抓取多路电源的上升曲线确认各路电压轨的上电顺序是否符合数据手册要求。我第一次调试这块板时遇到了FPGA的VCCINT还未稳定时VCCAUX就已经上电的情况导致FPGA进入异常状态。最初怀疑是电源芯片本身的问题后来才排查出是电源排序器的逻辑配置有误。这里提醒一点如果使用了可编程电源排序器务必先阅读其数据手册中的时序精度说明不同排序器芯片之间的精度差异很大。7.2 串口无输出串口是调试的第一窗口。上电后串口就出现不了输出的原因首先检查引脚复用配置其次是检查串口芯片的供电和使能引脚。有一回怎么调都无输出查了一圈竟然是SP3232EEN的“EN”引脚被悬空所致——这种“低级错误”其实很常见原理图检查阶段就该排除。7.3 SRIO链路误码率高SRIO链路误码率高时先做物理层排查。用示波器观察接收端的眼图如果眼图张度不足优先检查PCB走线的阻抗是否连续通过调整GTH接收端的CTLE均衡系数来改善信号质量。如果眼图正常但还是有误码就要怀疑协议层配置。C6678的SRIO端口配置有多项参数链路速率、端口宽度、帧格式任何一项不一致都无法和FPGA握手成功。7.4 DDR3读写数据异常DDR3调试中寄存器配置和ODT设置不当是最常见的原因。推荐用TI的DDR3寄存器配置表快速检查相关参数。同时用逻辑分析仪抓取读写命令的时序对比初始化序列与手册要求是否一致。如果在读操作中偶尔出现数据错误优先怀疑时钟信号质量和数据线等长不要一上来就怀疑芯片本身。7.5 FPGA程序加载失败FPGA加载失败的表现是DONE信号一直保持低电平。排查顺序先看配置Flash是否已写入有效镜像再看FPGA的配置模式引脚是否为BPI模式最后检查Flash与FPGA之间的控制信号连接。需要注意的是N25Q128的写保护和复位引脚必须正确连接否则即使Flash里有镜像FPGA也可能因为读不到数据而加载失败。8. 调试常用工具与准备工作8.1 硬件调试必备工具清单调试VPX板卡比普通嵌入式的工具要求高不少。罗列一下我的常用装备多通道数字示波器带宽至少2GHz。若调SRIO或PCIe需要选配高频探头和差分探头。逻辑分析仪至少32通道支持协议解码。可编程直流电源至少三路能设定电压和电流限值。频谱分析仪用于检查时钟信号质量确认有没有杂散和谐波。热成像仪用来做整板功耗分布和散热检查。8.2 软件开发环境准备DSP侧的软件开发使用TI的CCSCode Composer Studio配合仿真器XDS560V2或XDS2000。FPGA侧的开发环境是赛灵思Vivado版本建议选用Vivado 2017.4及以上版本因为对7系列FPGA的支持更加成熟稳定。仿真器驱动的安装容易踩坑XDS系列仿真器在Windows系统下容易遇到驱动冲突。解决办法是先安装CCS再安装仿真器驱动程序包的顺序不要颠倒最好禁用系统的自动驱动更新避免旧版本驱动被强制替换。9. 经验总结与个人体会整套VPX处理板设计下来我的体会是“慢工出细活”绝不是空话。越是复杂的系统原理图阶段花的时间越值得到了调试阶段之前设计上的每一分严谨都会变成少踩的每一个坑。个人觉得很多初学者容易把注意力都放在功能框图层面而忽略了信号完整性、电源完整性、时序这些“生产后端”的考量。但在这类高速板卡上无论原理图画得多漂亮布局布线、层叠设计、端接处理不到位最终的信号质量依然会崩。原理图设计的本质不只是把管脚连起来更是在为后续物理实现铺路。再分享一个小技巧原理图评审阶段邀请一位“对上电时序和电源树比较敏感”的同事参与。电源设计的问题在原理图阶段通常不明显但在实测阶段却异常致命。多一个人把关往往能提前发现一半以上的隐患。这块6U VPX信号处理卡的后续扩展方向也比较明确可以增加第二片C6678组成双DSP对称处理架构也可以用HyperLink扩展多板卡互联进一步突破单板算力瓶颈。设计预留的SRIO和PCIe链路都具备这个升级潜力真到了那一步整块板卡依然是可靠的计算核心。
返回列表