尧图精选

ZYNQ硬件设计实战:核心板、视频采集与RFSoC射频直采的电源、DDR及高速接口解析

🕒 发布时间:2026/10/1 7:18:53 📁 来源:尧图网络
过去一年多我前后经手了三块ZYNQ开发平台的硬件设计。第一块是给实验室做的小型化通用核心板Zynq-7020方案主要目标是“最小系统高可靠、接口好扩展”第二块是配合机器视觉项目做的视频采集板带摄像头输入、HDMI输出和千兆网解决的就是网上经常被问到的“zynq开发板摄像头输入”这一类需求第三块用在宽带信号采集设备上是基于Zynq UltraScale RFSoC的射频直采板天线进来的信号直接进ADC数字化。同样是挂着“ZYNQ”名头的硬件设计三块板子的设计思路差别非常大核心板要解决“可用性和可复用性”视频板要解决“高速接口的时序和抗干扰”射频直采板要解决“模拟信号链的完整性和隔离”。这篇就把我从这三款平台里总结的硬件设计思路拆开讲讲包括前端架构、电源树、存储启动、模拟链路、PCB细节和调试验证希望能给准备做ZYNQ硬件设计的人一些能落地的参考。1. 三款板卡的定位差异同样的ZYNQ不同的设计出发点1.1 通用核心板把最小系统当成一颗“大芯片”来收敛第一块板子的定位非常明确别人拿到这块核心板不用翻原理图就能把系统跑起来所以内部所有细节必须在板上收敛。硬件选型上我用了Zynq-7020PS侧双核ARM Cortex-A9PL侧85K逻辑单元DDR3直接做在核心板上HP Bank、HR Bank以及GTX高速串行通道通过板对板连接器引到扩展板。核心板的设计思路核心是“收敛”两个字。电源、时钟、DDR、启动模式、电压监控这些最容易出问题的地方全部要在核心板上自己解决不能依赖底板的可靠性。时钟我用的是一颗低抖动可编程晶振同时输出PS_CLK和PL差分参考时钟而不是用普通有源晶振加逻辑去分频启动模式没有做成固定电阻而是用拨码开关接到MIO[6:2]这样样机调试可以在QSPI、SD卡、JTAG三种模式之间随时切换量产时再固定焊死。DDR3放在核心板上还有个很大的好处硬核控制器做PHY训练、眼图测试、回环测试都能在工厂阶段完成底板不用再关心DDR的等长和阻抗问题。还需要考虑的是接口电平匹配和ESD防护。ZYNQ的HR Bank支持1.8V/2.5V/3.3VHP Bank支持1.2V/1.5V/1.8V板对板连接器设计时一定要把每组Bank的电平通过核心板的电平转换或者Bank电压设置好否则底板一插上就可能因为电平不匹配烧IO。我当时还在扩展接口上预留了一路光耦隔离的输入输出用于工业控制场景里的开关量采集外面传感器怎么乱接都影响不到ZYNQ这是工业产品硬件设计的一个常见需求光耦选型上要注意输入侧电流限制电阻和输出侧上拉电压匹配的问题。1.2 视频采集板摄像头输入的接口时序比算力更让人头疼很多人搜“zynq开发板摄像头输入”以为Zynq-7000可以像接USB摄像头一样把MIPI信号接进去实际上不是这么简单。Zynq-7000没有硬核MIPI CSI-2控制器MIPI D-PHY的差分信号要先接到PL侧的高速LVDS-I/O再用Xilinx的MIPI CSI-2 RX Subsystem IP或者第三方IP在FPGA内部做协议解码和字节复原。如果是Zynq UltraScale器件则有集成的MIPI CSI-2 IP可以直接用但硬件上的约束一点都不会少。我用的摄像头模组输出MIPI CSI-2 2-lane速率1.2Gbps/lane。原理图设计阶段重点盯三个地方第一MIPI差分对严格按100Ω差分阻抗控制同一对信号P/N等长误差控制在5mil以内lane与lane之间的长度差控制在20mil以内第二摄像头的I2C控制线必须远离MIPI差分走线不然图像容易出现横纹、花屏或者偶发丢帧第三摄像头的供电通常1.2V核心、1.8V/2.8V IO要用独立的LDO不能直接跟数字IO共电。这些约束在原理图阶段如果不写进设计说明Layout工程师很难靠自觉做对。视频采集板还带了HDMI输出TMDS同样是100Ω差分DDR、千兆网口又是一堆高速约束所以这块板层数我直接定到8层。做这种板子的经验是一定要在项目一开始就把所有高速接口列一个表写明阻抗、等长、最大走线长度、要不要换层、参考平面是哪层后面Layout评审才不会被返工拖死。1.3 射频直采板天线到ADC之间少一个模块就少一层烦恼第三块板子是最有挑战的。传统接收链路是“天线→带通滤波→LNA→混频器→中频滤波→中频放大→ADC”而射频直采直接把ADC推到射频端信号经过必要的滤波放大后直接数字化。RFSoC例如Zynq UltraScale RFSoC系列在一个芯片里集成了RF-ADC和RF-DACRF-ADC可以跑到数GSPS模拟输入带宽覆盖到GHz级别。硬件设计思路立刻变了不用再设计本振和混频器但也同时把采样时钟抖动、抗混叠滤波、模拟输入驱动、信号隔离这些压力全部转移到板卡设计上。这块板的定位是宽带信号采集、测试测量仪器、无线通信数字化前端以及医疗超声这类对信号链完整性要求很高的场景。项目里我选的RFSoC器件板卡上自己做了四路模拟前端电路。这里的核心设计理念是做减法传统方案里混频器、LO、IF滤波器每一个都是性能瓶颈级联起来还叠加噪声射频直采省掉这些模块代价是必须接受更高的采样时钟抖动约束、更严格的抗混叠滤波要求和更大的功耗。硬件设计上从SMA座到RF-ADC引脚的这段路径每一毫米走线、每一颗元件都是要算进链路预算的。2. 电源树与上电时序最容易翻车却又最常被忽视2.1 ZYNQ的电源域为什么这么碎ZYNQ的电源域比普通MCU复杂得多。粗略数一下内核电源VCCINT、BRAM电源VCCBRAM、辅助电源VCCAUX、多个BANK的VCCO还分PS侧和PL侧、PS的VCCPLL、DDR的VCCO_DDRRFSoC还要额外加上RF-ADC和RF-DAC的模拟电源与数字电源。这些电压如果上电顺序不对轻则启动失败重则触发芯片闩锁损坏器件。我设计时遵守的原则是VCCINT和VCCBRAM基本同时上电然后VCCAUX之后是VCCO、VCCO_DDR这些IO电源最后PS侧的PLL电压复位信号在所有电源都OK之后延迟至少200ms释放。实际项目里我不会自己搭一堆RC延时电路去搞时序最省事的做法是选一颗PMIC利用它固定且可编程的上电顺序直接输出多路电源如果用的是分离式DC-DC/LDO就在每一路电源芯片的PG引脚后面接一个电压监控复位芯片全部PG后输出系统复位。2.2 三块板卡电源方案对比三块板子的电源拓扑差别很大我整理了一张对比表方便参考板卡主要电源需求拓扑方案设计关注点通用核心板VCCINT 1.0VVCCAUX 1.8VVCCO 3.3V/1.8VDDR3 1.5VPMIC多路DC-DCLDO后级各路电压上电顺序严格启动模式拨码时不能影响电源视频采集板VCCINT 1.0V大电流VCCAUX 1.8VHP BANK 1.8VDDR3L 1.35V摄像头模组1.2V/1.8V大电流Buck多路LDO独立供电摄像头模组电源用独立LDO避免数字开关纹波串入MIPI信号射频直采板RFSoC内核大电流RF-ADC的AVDD/DVDDJESD204B时钟电源多相BuckLDO后级时钟芯片独立模拟LDO模拟电源必须低噪声开关电源远离模拟前端区域RFSoC的内核电流比Zynq-7000大得多如果器件选型满载运行实测可能到十几安培这种电流用普通LDO根本不现实必须用多相Buck或者大电流PMIC。但RF-ADC的AVDD这类模拟电源又绝不能直接挂在Buck输出上一定要在Buck后面加低噪声LDO和磁珠隔离否则开关纹波会直接劣化ADC的SFDR和SNR。2.3 一个电源纹波的实际教训视频采集板第一次打样回来HDMI画面出现周期性横向亮度条纹间隔刚好跟板上一颗DC-DC的开关频率吻合。用示波器量HDMI的TMDS电源和摄像头模组电源发现开关纹波大概30到40mV顺着共用的电源母线串到了MIPI和HDMI信号链路里。整改方案很直接把摄像头模组电源和HDMI相关电源从数字母线上拆开分别用独立LDO加磁珠隔离供电纹波压到10mV以内现象消失。这个案例给我的教训是电源指标在原理图阶段就要写清楚不能只盯着“能不能供上电”还要看“供出来的电干不干净”。模拟和高速接口电路附近开关电感的摆放、磁珠的位置、滤波电容的大小都必须提前规划。3. 存储、启动与板级互联从烧写到运行的整条链路3.1 DDR布线三款板卡分别怎么处理DDR设计是ZYNQ硬件设计绕不开的坎。三块板子用的DDR方案不一样核心板是DDR3L速率800MT/s板子只用了6层视频采集板是DDR3L速率1066MT/s板子8层射频直采板用的是DDR4速率2400MT/s板子直接12层。速率越高DDR布线约束越严格。具体布线上地址和控制总线按组做等长约束误差控制在正负20到25mil以内数据组按字节通道自己一组DQ和DQS成对等长误差控制在正负5到10milDQS差分对内正负5mil以内。保持参考平面完整这一点最容易被忽视DDR走线底下如果恰好有电源平面被切开信号回流路径会绕远眼图直接劣化。ODT和VTT端接电阻要靠近DDR芯片VREF走线尽量远离切换信号最好单独走一条平行线中间用地线隔离。另外建议在硬件设计评审时至少留出DDR的CS或CLK测试点或者把这些信号引到扩展连接器的少数备用引脚上。ZYNQ的DDR控制器有PHY训练功能正常情况启动时由FSBL自动完成训练但板卡调试阶段如果怀疑DDR时序有问题有测试点就意味着可以用示波器实测不用拆芯片。3.2 启动配置与烧写链路ZYNQ的启动模式由MIO[6:2]引脚的电平决定常见的有QSPI、SD卡、JTAG、NAND。第一次画ZYNQ板的人很容易忽视BOOT_MODE引脚的上下拉和上电时序导致板子回来以后JTAG能连上但SD卡或者QSPI怎么都启动不了。我在三块板子上都做了同样的设计BOOT_MODE引脚通过拨码开关或者0欧电阻实现可配置QSPI Flash选容量大的W25Q256CS、CLK、D0到D3都串33到47欧姆电阻做阻尼SD卡启动时注意SD卡的供电和卡座检测引脚别把CD引脚接错。烧写时候最常用的两条路径调试阶段用JTAG通过Vivado Hardware Manager下载FPGA bitstream和PS程序量产阶段用SD卡启动或者把BOOT.BIN烧进QSPI Flash。关于“zynq烧写”这个高频问题我补充一点经验QSPI烧写时镜像偏移地址一定要看所使用Flash的扇区大小和Petalinux生成的默认配置很多启动失败并不是代码问题而是BOOT.BIN烧到了错误偏移位置。另外量产时如果用Petalinux我会先用SD卡方式跑通再通过Linux里的flashcp命令把镜像写进QSPI这样比JTAG批量烧写快很多也适合产线自动化。3.3 核心板与扩展板的板级互联选型核心板形态一般有三种邮票孔、LGA触点、板对板连接器。邮票孔可靠且成本低但返修困难板对板连接器BTB信号密度高、成品高度低但需要压合工艺打样前期不能用手焊LGA类似QFN封装打样和小批量都很合适缺点同样是返修麻烦。通用核心板我选了0.5mm间距的BTB连接器把PL的高速差分信号和普通IO分开排列连接器两侧留足机械定位引脚按电源、地、信号、地间隔布局能有效减少信号间串扰。有一点要单独提醒如果是射频直采板模拟前端和SMA接口最好不要通过核心板连接器走RF信号直连连接器会带来插损、反射、串扰很难控制。RFSoC这类平台我建议做成整板系统或者至少把模拟前端电路和RFSoC放在同一块主板上连接器只走控制和数字接口。这个原则也解释了为什么很多商用射频板卡不做“核心板”形态因为模拟信号链的完整性比可扩展性更优先。4. 射频直采路径的模拟前端从天线到ADC的每一分贝4.1 为什么把ADC往前推传统接收链路和射频直采的差异用两行字可以看清楚传统接收天线 → 带通滤波 → LNA → 混频器 → 中频滤波 → 中频放大 → ADC 射频直采天线 → 带通滤波 → LNA → 抗混叠滤波 → 巴伦 → ADC射频直采最直接的好处是去掉了混频器和本振也就顺带消灭了镜像抑制、本振泄漏、I/Q失衡校准这些老式接收机里让人头疼的问题。瞬时带宽大是另一个关键优势传统窄带中频方案要看一个宽频段需要调本振扫频射频直采可以一次把整个频段采下来对宽带信号采集、频谱仪、示波器这类仪器仪表场景是质的改变。代价也明确ADC采样率和模拟输入带宽要足够高采样时钟必须非常干净抗混叠滤波器的带外抑制要求高整板功耗明显上升。这些代价必须在项目早期做方案评估时就接受否则后面硬件设计会非常被动。4.2 前端链路设计逐级算增益和噪声射频直采板的模拟前端要从SMA口一直算到RF-ADC引脚。我设计时用了这样一个典型链路单元增益/插损说明带通滤波器-1.2dB抑制带外干扰兼顾带内平坦度LNA20dBNF 1.1dB低噪声放大器决定整链噪声系数数控衰减器0~-31.5dB插损0.8dB大信号时降低增益保护ADC抗混叠低通滤波器-1.0dB抑制带外能量防止采样混叠巴伦-0.5dB单端转差分驱动RF-ADC输入RF-ADC采样满量程输入功率需匹配链路输出最大增益状态下的总增益大约是-1.220-0.8-1.0-0.516.5dB。级联噪声系数用Friis公式算F_total F1 (F2-1)/G1 (F3-1)/(G1·G2) ...因为LNA是第一级且增益较高整链噪声系数基本被LNA主导算出来大概在2dB左右。这里要特别注意如果没有LNA或者LNA增益不够后面衰减器和滤波器的插损会直接恶化噪声系数所以LNA的位置和增益必须在链路第一级就定好。衰减器放在LNA后面而不是前面是为了避免大幅度衰减时把信噪比一起衰减掉。数控衰减器的步进最好0.5dB方便系统做自动增益控制。最后面的巴伦要关注平衡度和带宽巴伦不平衡会产生二阶失真两个输出端幅度和相位不对称ADC差分输入的优势就浪费了。4.3 采样时钟抖动射频直采最容易被低估的指标射频直采系统里采样时钟的抖动会直接叠加进ADC的采样噪声。抖动和信噪比的关系可以用一个近似公式描述SNR_clock 20log10(1 / (2π × f_in × t_jitter_rms))举例如果输入信号频率是1GHz采样时钟的均方根抖动是200fs算出来SNR_clock只有58dB左右。如果系统目标SNR要60dB以上200fs的时钟抖动就已经成为瓶颈。所以射频直采板对时钟的要求是“皮秒级以下”设计时要尽量把抖动压到100fs以内。实现上我通常用LMK04828或AD9528这类低抖动时钟发生器配合板上TCXO作为参考源产生RF-ADC的器件时钟和JESD204B需要的SYSREF时钟芯片供电用独立低噪声LDO尽量别跟任何开关电源共用时钟走线按50Ω阻抗控制走线要短禁止跨分割时钟芯片下面要铺完整地平面。RFSoC内部虽然也有时钟分频和PLL但外部参考时钟不干净的话内部什么校准都救不回来。4.4 一个调测杂散的真实案例射频直采板第一次完整采样时我在1GHz附近输入一个单音信号频谱上持续出现距离载波几百kHz的杂散而且幅度会跟着板卡负载变化。一开始怀疑抗混叠滤波器或者巴伦有问题换了几颗料都没解决。后来直接用信号源替代板上的参考时钟杂散立刻消失这才定位到是参考时钟被污染。进一步排查发现时钟芯片的电源引脚离一颗功率电感太近开关噪声通过电源线和空间辐射耦合进去。整改方案是在时钟芯片电源前端加了一级π型LC滤波并把电感位置挪远、包地隔离杂散降了20dB。这个案例让我在后续所有板卡设计里都坚持一条规矩模拟电源平面和时钟走线附近绝对不摆开关电源电感也尽量不走数字总线。5. 高速与模拟混合PCB射频直采板为什么难画5.1 层叠设计12层怎么分配射频直采板做到12层是很常见的。我用的一个典型层叠安排是L1顶层做RF和模拟走线L2完整地平面L3数字信号走线L4地平面L5电源1L6数字走线L7地平面L8电源2L9数字走线L10地平面L11低速控制信号L12底层。RF走线全部放在L1尽量不打过孔因为过孔的stub在GHz频段就是个等效电容和开路短截线会拉着信号产生反射和谐振。关于“模拟地”和“数字地”要不要分开很多资料还在讲老方法但实际上现代RFSoC的RF-ADC内部模拟地和数字地已经在Die附近连在一起了板级把AGND和DGND彻底分割反而容易造成回流路径断裂。我更推荐的做法是保持参考平面连续模拟前端区域和数字区域在物理空间上分区布局RFSoC的散热焊盘下面大面积铺地模拟电源用磁珠或LC隔离而不是把地割成两片。真正的风险不是“地没分”而是走线跨越了被切开的地平面导致回流绕远。5.2 摄像头输入与高速数字接口的布线实战视频采集板的MIPI摄像头输入我在项目里要求Layout工程师把这些约束写进设计文档MIPI差分对阻抗100Ω同一lane内P/N误差小于5millane组间误差小于20mil走线尽可能走表层避免打孔如果万不得已要换层过孔旁边必须加回流地孔MIPI走线两侧每隔一段距离铺地孔栅栏做隔离。HDMI的TMDS差分同样100Ω要和MIPI保持物理距离避免互相串扰千兆网的RGMII接口要做好时钟和数据线等长总长控制在150mm以内超过这个长度时序裕量就很紧张。还有一个容易被忽略的点摄像头通过FPC排线连接时FPC线的长度和特征阻抗直接影响信号质量。模组输出端的驱动能力和信号速率如果较强FPC线最好不超过15cm超过这个长度要考虑用带屏蔽层的FPC或者在线路中间加redriver。很多“图像花屏”问题最后排查出来都是FPC太长、插座接触不良、地线不足导致的信号反射。5.3 散热、屏蔽与结构件的配合射频直采板的发热问题不能等到样机回来再考虑。RFSoC在满负荷运行时的功耗相当可观像ZU47DR这类器件如果同时跑高速RF通道和大量PL逻辑实测功耗可以到25W以上单纯靠PCB自然散热是顶不住的。硬件设计必须在早期就做热规划芯片底部的散热焊盘大面积连接地平面过孔要密集并且灌锡或者用导热胶填充把热量导到背面再加散热器结构件上要留出散热器空间必要时用导热垫片把热量直接传到铝合金外壳。模拟前端区域加屏蔽罩是射频直采板的基本要求。屏蔽罩和地平面的连接要做到边沿密布地过孔过孔间距不要超过λ/20否则高频信号会从缝隙辐射出去。DC-DC电感的摆放位置要尽量远离SMA输入座见过不少板子因为电感磁场辐射直接干扰到模拟输入端后面再怎么加屏蔽都费劲。所以布局阶段就要把“功率区”“数字区”“模拟前端区”三个区域先画出来再开始拉线。6. 硬件验证与软硬协同不是画完板子就结束了6.1 上电自检的完整顺序新板子回来我最忌讳直接插电然后打开电源。上电自检我有一套固定顺序照着做能省掉大量排查时间先用万用表蜂鸣档检查各路电源对地有没有短路重点是VCCINT、VCCO、VCCAUX对GND还有DDR电源和地之间输入电源限制电流上电比如先设0.5A限流确认没有短路后再逐步放开量各路电压是否在目标值附近用示波器确认上电时序用示波器量PS_CLK和PL差分时钟确认频率和电平正常JTAG连上打开Vivado Hardware Manager看能否扫描到芯片IDCODE扫描不到优先查JTAG链路、TDI/TDO有没有串接错误下载一个最简单的LED点灯和串口打印程序确认PS能跑然后再跑DDR读写测试确认DDR3/DDR4硬核工作正常最后逐步验证I2C、SPI、摄像头、网口、RF链路。打样阶段建议专门做一个小转接板把JTAG、BOOT_MODE、串口、几个关键电源测试点引出来。不然每次调试都去焊飞线既费时间又容易把板子搞坏。6.2 PS侧烧写后怎么用ILA抓波形“zynq在ps烧录后看ila波形”是调试时经常卡住的问题。原因是ILA核在PL侧如果板子是QSPI或SD卡启动FSBL加载PL bitstream之后系统已经跑起来了在Vivado Hardware Manager里不一定能自动看到ILA窗口。调试阶段的建议是先用JTAG直接下载PL的bitstream这样Hardware Manager会自动弹出ILA窗口波形随便抓。如果一定要在QSPI/SD启动后的系统里看波形可以用第二种方式系统起来后通过FPGA管理器或者XSDB命令重新加载包含ILA的bit然后再连接ILA。简单说用XSDB执行connect targets -set -filter {name ~ *fpga*} fpga -file /path/to/ilabit.bit这几条命令的本质是告诉调试工具先建立JTAG连接然后找到FPGA目标再加载含ILA的比特流。之后在Vivado Hardware Manager里刷新就能看到ILA窗口并设置触发条件。注意加载bit时会短暂打断PL逻辑如果PL正在跑实时任务要安排在停机窗口里操作。6.3 BusyBox环境里的硬件验证“zynq移植busybox”和硬件设计看起来关系不大但我在板卡调试里发现一个裁剪过的BusyBox根文件系统恰恰是验证硬件最顺手的工具。串口进Shell之后用devmem就可以直接读寄存器不用写代码编译一大堆驱动。U-Boot起来后进入Linux我通常会验证这几个点读XADC温度寄存器确认器件温度正常具体寄存器基址和偏移按UG480查表换算用网口iperf测试吞吐确认千兆网PHY的RGMII时序没问题用GPIO控制扩展IO和光耦隔离输入确认工业接口通断正常再读QSPI Flash的ID和内容验证启动链路的稳定性。整个过程在BusyBox环境里几分钟就能跑一遍比临时编译各种测试程序效率高太多。做了三块板子之后我最大的体会是ZYNQ硬件设计是一个处理“不确定性”和“确定性”相互纠缠的过程。核心板要把所有不确定性收敛在最小系统里射频直采则要把每一个模拟指标摊开在所有设计细节上视频板卡夹在两者之间。如果你刚开始接触ZYNQ硬件建议先从核心板这类项目练手把电源、DDR、启动、JTAG调通再挑战高速接口最后才考虑射频直采硬件设计没有银弹但把“需求—架构—选型—布局—验证”每一环都走踏实成功的板子基本是水到渠成的事。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →