ARTICLE DETAIL

资讯详情

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

ZYNQ7030与AD9361硬件PCB设计:选型、接口与调试实战

ZYNQ7030与AD9361硬件PCB设计:选型、接口与调试实战 做了这么多年板子ZYNQ7030 搭 AD9361 这套组合我一共投过三版。第一版直接废掉原因是 DDR3 走线跨了电源分割跑内存测试跑到一半就挂第二版能跑通但接收底噪比官方评估板高了 4 dB 多频谱上还带一串等间隔的小杂散查了两个星期才发现是 DC-DC 的开关频率从地平面耦合到了射频巴伦附近第三版把叠层、分区、去耦整套重做指标才勉强能跟 ADI 的评估板对标。这次我把硬件电路设计和 PCB 开发这部分完整摊开讲包括器件选型怎么反推、电源树怎么算、LVDS 那十几对差分线为什么必须严格等长、FPGA 的引脚规划怎么提前锁死 PCB 的布局以及板子回来之后怎么分四个阶段把问题关进笼子。整篇内容偏硬件和 PCB 实操适合正在做类似架构、或者准备从官方评估板转向自研板子的朋友参考软件驱动和上位机部分留到后面单独写。1. 先把需求翻译成器件参数选型这一步别省1.1 用三个问题把方案框死我见过太多项目一上来就定ZYNQ7030 AD9361问他为什么答网上都这么用。这种选型方式后面一定会出问题因为你不知道自己要付出什么代价。我的做法是先回答三个问题瞬时带宽要多少AD9361 的单通道可编程带宽是 200 kHz 到 56 MHz这个数字决定了你的采样率下限。如果你只需要 20 MHz 带宽的信号采样率按 1.5 到 2 倍过采样取 40 MSPS 就够不用硬跑 61.44 MSPS接口速率和功耗都能省一大截。要不要相干双通道收发2x2意味着两路射频链路必须共用同一个本振AD9361 内部本来就是共本振结构这一点没问题。但如果你要做相位干涉类应用两片 AD9361 之间的本振相位关系就必须靠外部同步信号和共参考时钟来保证硬件上要多留 SYNC_IN 的走线和时钟分配网络。算力放在哪如果只是做简单的滤波、抽取、FFTZYNQ7030 的 400 个 DSP48E1 和 265 个 36Kb BRAM 完全够用如果要做大规模并行解调或者神经网络推理那 7030 就不够了得往上选 7045 甚至 7100。这三个问题答完方案基本就定了。我把 Zynq-7000 几款常用器件的资源列个表方便对照具体数值还是以赛灵思最新的器件手册为准。型号逻辑单元LUTDSP48E1BRAM(36Kb)高速收发器适合的场景Z-701028K17,6008060无单通道低速采集控制为主Z-702085K53,200220140无1x1 或 2x2 收发加轻量算法Z-7030125K78,6004002654 路2x2 收发加中等复杂度 DSPZ-7045350K218,6009005458 路多通道宽带复杂信号处理Z-7100444K277,4002,02075516 路大规模并行处理阵列系统1.2 ZYNQ7030 卡在中间的甜点位7030 是个很有意思的器件。它比 7020 多了将近 50% 的逻辑资源和 80% 的 DSP但又没有 7045 那种夸张的功耗和封装尺寸。实际做 2x2 收发的时候7020 是那种刚好不够的状态——你做完 AXI 总线、DMA、AD9361 接口逻辑之后剩下的资源做两级抽取滤波就快满了想再加个自动增益控制或者数字下变频的补偿模块就得抠着用。7030 让你有余量做通道校准、IQ 不平衡补偿这些东西这部分在射频指标要求高的场合是必须的。另外 7030 有 4 路高速收发器如果你的系统里还需要接一个高速 ADC 或者光模块这条路是留着的。7020 没有这个能力这是很多人选型时容易忽略的一点。1.3 AD9361 的边界必须提前说清楚AD9361 是很成熟的一颗射频捷变收发器覆盖 70 MHz 到 6 GHz2 发 2 收12 位 ADC/DAC采样率最高能到 61.44 MSPS。它内部集成了本振、混频器、模拟滤波器、可变增益放大器、抽取滤波器和自动校准电路一颗芯片就把原来需要十几个器件的模拟前端收进去了。但它的边界也很清楚。第一它是零中频架构虽然内部有直流偏移和 IQ 不平衡的校准但校准需要时间而且受温度影响你如果做的是快速跳频应用每次跳频后重新校准的时间开销要算进去。第二它的噪声系数在 2 到 4 dB 量级具体随频段和增益设置变化如果你的接收链路要求更低的噪声系数前面还得加低噪声放大器。第三它的发射输出功率有限典型值在 0 dBm 上下要驱动天线必须加功率放大器那就涉及到收发切换、滤波和匹配的一整套设计。1.4 这套组合的真实应用场景我接触过的类似架构的项目大致分成几类软件无线电实验平台需要灵活配置频率和带宽小型化的通信终端比如数据链或者专网设备便携式频谱监测设备靠 ZYNQ 做实时频谱分析和信号识别还有一些雷达或者测距类的原型系统用双通道做相位差测距。这几类的共同点是带宽和实时性要求都比较高用单片机加通用射频芯片的方案做不到用纯 FPGA 加分立射频链路又太占面积和调试工时ZYNQ 加 AD9361 刚好卡在这个位置。2. 接口划分PS、PL、射频三块怎么切才是对的2.1 控制通路和数据通路必须分开这是我在第一版板子上犯的错。当时图省事把 AD9361 的 SPI 接到了 ZYNQ 的 MIO 上走 PS 的 SPI 控制器数据接口走 PL。板子回来之后发现每次调本振频率都会影响数据流的连续性因为 PS 侧的 SPI 事务是通过 AXI 总线访问的会有不确定的延迟抖动。正确的做法是把接口按实时性分组。控制类信号——SPI、RESETB、GPO——可以走 PS 也可以走 PL看你的软件架构但实时性强的信号——ENABLE、TXNRX 这种收发切换信号——必须走 PL因为收发切换的时间精度直接影响 TDD 系统的保护间隔。我后来的做法是把所有 AD9361 的控制信号都放到 PL用一条 AXI GPIO 或者自定义寄存器统一管理软件通过读写寄存器控制时序完全由 FPGA 逻辑保证。数据通路就更不用说了RX 和 TX 的数据、帧同步、时钟全部走 PL 的 I/O然后通过 AXI 总线和 DMA 搬到 DDR 里。这里要提前算好带宽我在后面细说。2.2 CMOS 还是 LVDS把账算清楚AD9361 的数字接口有两种模式这个选择会直接影响你的引脚数、布线难度和能跑的最高采样率。对比项CMOS 单端模式LVDS 差分模式数据线数量P0/P1 各 12 根单端每方向 6 对差分信号完整性差地弹和串扰明显好共模抑制强布线难度线多但规则简单线少但对内等长要求严格最高采样率受限于单端速率单方向可以跑到 61.44 MSPS双通道影响需要两个端口同时工作总线时间复用采样率要打折扣端接通常加串阻需要 100 欧姆差分端接我最终选了 LVDS。原因很实际CMOS 模式下 24 根单端数据线加上时钟和帧同步一共 30 根左右的走线要保证它们互相之间的时序关系在四层以上的板子上反而更难做因为每根线都要单独控阻抗、单独做等长而且单端线上的地弹会让采样眼图变得很糟。LVDS 只有 6 对数据加时钟和帧同步差分对本身抗共模干扰走线数量少反而好控。代价是必须严格做对内等长而且要做延迟校准这个我后面单独讲。还有一个需要提前确认的点LVDS 模式下双通道工作会把总线做时间复用实际能跑的最高采样率要按接口手册反算常见做法是降到 30.72 MSPS 这一档。如果你非要跑满 61.44 MSPS 的 2x2就得回去认真核对接口时序表看总线带宽够不够。2.3 那些容易被忽略的控制引脚新手最容易漏掉的是 SYNC_IN 和 GPO。SYNC_IN 是做多芯片同步用的如果你只有一片 AD9361按手册要求做接地或者串联处理绝对不能悬空因为悬空的输入会在内部产生不确定的翻转可能让状态机跑飞。GPO 是几个通用输出引脚可以配置成输出校准完成标志、PLL 锁定标志之类的信号我在板子上把 GPO0 接到了一颗 LED 上调试的时候不用上电就能看到芯片有没有配置成功很省事。RESETB 一定要接到一个可控的 GPIO 上不要图省事直接上拉。理由是你需要在软件里控制复位时机——电源上电之后先让 RESETB 拉低一段时间等所有电源都平稳之后再释放这样才能保证内部寄存器处于确定的初始状态。硬件上再并一个 10 kΩ 上拉和 100 nF 到地的小电容防止上电瞬间的毛刺误触发。2.4 引脚预算表把接口列成表格这一步是给 FPGA 工程师和 PCB 工程师的共同输入两边都按这张表干活后面才不会扯皮。分类信号方向数量备注接收数据RX_D[5:0]_P/NAD9361 输出6 对必须与 DATA_CLK 等长接收时钟DATA_CLK_P/NAD9361 输出1 对源同步时钟要进 BUFG接收帧RX_FRAME_P/NAD9361 输出1 对标记 I/Q 与通道边界发送数据TX_D[5:0]_P/NFPGA 输出6 对相对 FB_CLK 输出发送时钟FB_CLK_P/NAD9361 输出1 对反馈时钟发送帧TX_FRAME_P/NFPGA 输出1 对实时控制ENABLE / TXNRXFPGA 输出2走 PL不走 PS复位RESETBFPGA 输出1需要上拉与去耦同步SYNC_IN输入1不用时必须接地状态GPO[3:0]输入4接调试 LED 很值控制总线SPI_CLK / CSB / DI / DO双向4可走 PS 或 PL3. 与 FPGA 工程师的互动引脚规划先于 PCB 布局3.1 IO Bank、VCCO 与电平标准的三重约束这一块是我特别想强调的因为硬件和 FPGA 两个角色如果没对齐板子做出来就是白板。Zynq-7000 的 PL 侧 I/O 按 bank 组织每个 bank 有独立的 VCCO 供电引脚而 VCCO 的电压直接决定了这个 bank 能用什么电平标准。你如果在约束文件里写了 LVDS但硬件上这个 bank 的 VCCO 接的是 3.3 V那综合的时候就会直接报错或者更糟——工具给你换成了不匹配的标准上板之后完全收不到数据。所以流程必须是反过来的先确定 AD9361 接口要用什么电平标准再反推出这个 bank 的 VCCO 应该是多少然后把这个约束写进电源设计里。我一般是先出一份《bank 分配与 VCCO 表》电源工程师、PCB 工程师、FPGA 工程师三方各拿一份任何一方要改都得同步更新。另一个约束是差分对的位置。7 系列器件的差分对是绑定在特定引脚对上的你不能随便拿两个相邻引脚当差分对用。所以引脚分配必须用 Xilinx 的引脚规划工具做做完导出 XDCPCB 按 XDC 布线而不是 PCB 先画完再想办法凑引脚。我见过一个项目因为 PCB 先画了结果发现 6 对 LVDS 数据线里有两对跨了 bank最后只能加一层转接板白白多花两个月。3.2 HR Bank 做 LVDS 的电阻网络问题这个坑非常隐蔽但一旦踩上就很难受。7 系列器件分 HRHigh Rangebank 和 HPHigh Performancebank 两类。HP bank 的 VCCO 只能到 1.8 V支持真正的 LVDS 收发HR bank 的 VCCO 可以到 3.3 V但它不支持真正的 LVDS 输出只能用 LVDS_25 这种仿差分输出而且必须在外部加三个电阻组成的端接网络才能正常工作。具体来说HR bank 做 LVDS 输出的时候每对差分线要靠外部电阻把电流源输出的信号转换成差分电压电阻值通常是两个 50 欧姆串在正负端之间中间再拉一个电阻到某个参考电平。网络上流传的接法有好几种可靠性参差不齐。我的建议很简单**AD9361 的数
返回列表