☰
国产RFSOC+FPGA双芯宽带高速信号处理板设计实战
2026/10/6 20:24:32 网站建设 项目流程

这阵子集中做了一块国产RFSOC+FPGA双芯架构的宽带高速信号处理板,从方案评估、器件选型到回板调试、跑通数据链路,整套流程走下来,踩了不少坑,也积累了一些值得记录的经验。做这类板卡的人应该都有同感:单看RFSOC的集成度确实高,但真到宽带多通道实时处理的场景,单颗芯片的资源和IO往往撑不住,所以就有了“RFSOC负责射频采样与前端处理、FPGA负责数据调度与复杂算法”这种双芯分工的架构。

这篇文章我会把整个设计和实现过程按实战顺序拆开讲,内容包括:为什么非要双芯组合、两颗芯片之间怎么分活、数据接口怎么选型、带宽怎么估算、时钟和电源这些“硬骨头”怎么啃,以及调试阶段最容易翻车的地方。内容面向硬件工程师、FPGA逻辑工程师、嵌入式软件工程师,也适合正在评估类似方案的项目负责人参考。如果你正准备设计一块类似的高速信号处理板,或者已经在调JESD204B/高速串行接口的路上,这篇应该能帮你少走不少弯路。

1. 为什么非要用“国产RFSOC+FPGA”双芯组合:先算清楚这笔账

1.1 单颗RFSOC的瓶颈出现在哪里

说到宽带高速信号处理,第一反应往往是“用一颗RFSOC全搞定”。RFSOC的好处大家都知道:射频直采直发,内部集成了高速ADC/DAC、可编程逻辑(PL)和ARM处理器(PS),BOM面积小、链路短、开发周期相对集成方案要短得多。但实际做系统方案时,我越来越多地发现单芯方案在一些场景下并不好使。

举一个实际算账的例子。假设系统要求是4通道、单通道500MHz带宽的中频直采接收,ADC采样率定在1.2GSPS、16bit精度。光接收链路原始数据率就是4乘1.2G乘16bit,等于76.8Gbps,也就是9.6GB/s。即便在RFSOC内部先做数字下变频(DDC),把有效带宽压到500MHz,IQ各16bit输出,那也还有4乘500M乘2乘16bit,即64Gbps的吞吐。这部分数据如果要实时做FFT、测向算法、脉冲参数测量,或者要落盘存储,单靠RFSOC内部的DSP和查找表资源,往往会非常紧张。

更麻烦的是资源冲突。RFSOC的PL资源要同时承担射频数据搬移、DDC/DUC逻辑、PS接口的AXI互联、DDR控制、中断管理等杂活,再塞入复杂的基带算法和协议处理,布局布线很容易时序收敛不了。调一个不是瓶颈的模块,会连累整条射频链路。

所以这块板子的定位想清楚之后,我很快就决定了双芯架构:RFSOC聚焦射频采集和预处理,外挂一颗资源更充裕的FPGA做数据调度、算法加速和对外高速接口。两颗芯片各干各擅长的事,开发和调试也能并行推进。

1.2 双芯之间的分工逻辑:谁做射频,谁做处理

双芯架构听起来简单,但脏活累活怎么分,其实需要很细的考虑。我在这块板子上最终的分工是这样的:

RFSOC负责射频相关的所有工作:多通道ADC采样、DAC发射,内置DDC/DUC和抽取/内插滤波,增益控制,以及和射频前端(低噪声放大器、衰减器、滤波器)的SPI配置。这部分如果放到外部FPGA里做,等于要用FPGA的GTH/GTY高速收发器直接接收JESD204B数据流,开发复杂度和风险会大幅增加,没必要。

外部FPGA承担的则是更“业务化”的处理:多通道数据的汇聚与分发、大点数FFT/信道化、脉冲检测与参数测量、数据压缩与格式化、对外PCIe/SRIO/光纤接口,以及和上位机之间的命令控制链路。

这里有一个容易被忽略的好处:RFSOC内部的中频处理是相对通用的,射频链路定型之后基本不会大改;而业务算法在项目过程中会频繁调整。把业务算法放到外部FPGA,改版时只需要动这一颗FPGA的逻辑和固件,射频模块可以保持稳定。这个解耦在项目交付阶段给我省了非常多的事。

1.3 国产器件的选型考虑:不要只看资源表

既然标题里定了“国产RFSOC”,那就得说说选型时容易踩的坑。很多人在国产器件选型时只看逻辑资源、DSP数量和ADC/DAC采样率,这几个数字好看就定了。但实际工程里,更关键的反而是这几项:

第一是高速串行收发器的速率和误码表现。RFSOC和FPGA之间如果走1x/4x SerDes,线速率可能到10Gbps以上,这时收发器在高温下的抖动和误码率直接决定系统能不能稳定跑。选型时建议重点对比收发器在什么线速率下有完整的误码率测试报告。

第二是PS端ARM的外设完整度和软件生态。RFSOC的ARM要跑Linux,以太网、串口、SD/eMMC、DDR控制器这些能不能稳定工作,启动镜像怎么固化,工具链是否顺手,都决定了软件开发周期。

第三是工具链成熟度。国产FPGA的IDE这些年进步明显,但插件的稳定性、综合编译速度、在线逻辑分析仪等Debug工具的易用度,和国外一线厂商的差距仍然存在。这不是说不能用,而是要提前安排测试板或者参考板把关键流程跑一遍,别等原理图都画完才发现某个IP核没有对应版本。

选型阶段我列过一个简单的评估表,把RFSOC和FPGA的关键指标、功耗、封装、工具链成熟度、供货周期逐项打分,最后定下来的组合是:射频前级用带4路3GSPS级别ADC/DAC的国产RFSOC,外部处理端用一颗逻辑资源中等偏上、带8路以上10Gbps收发器的国产FPGA。整个过程中最花时间的不是对比性能参数,而是把两份参考设计和评估板的功耗数据拿来核对电源预算。

2. 双芯架构的数据通路:接口选型、带宽估算与帧格式设计

2.1 端到端带宽需求估算:从采样率开始推

设计双芯系统,第一步永远是算清楚端到端带宽。很多板子做出来跑不通,或者跑到一半频繁丢数,根子在方案阶段没有把每一级接口的水位算准。

我习惯的做法是画一条数据流水线,从天线口的模拟信号开始,一级一级标出数据率。拿我这块板子的接收链路举例:

第一级是ADC采样。ADC工作在1.2GSPS、16bit,4通道的原始数据率是76.8Gbps。这一级主要在RFSOC内部处理,不涉及芯片间传输,但要注意芯片内部PL到数据通路之间是否有足够的位宽缓冲,避免采样数据在内部堵塞。

第二级是DDC下变频。通过数字混频和抽取滤波,把有效带宽从采样率降下来。假设抽取因子设为2,输出IQ各16bit,那么4通道最终的数据率就是4乘600M乘2乘16bit,等于76.8Gbps。注意DDC做完之后数据率不一定比原始数据率低,因为IQ双路本身会带来数据量翻倍。

第三级才是关键:RFSOC的PL把DDC后的数据传给外部FPGA。这里传输方式如果选择4路10Gbps的SerDes,理论带宽为4乘10Gbps减去协议开销,实际可用带宽大约在34到36Gbps左右。如果你的需求是76.8Gbps,那显然不够用。这台板子的办法是把DDC后的数据经内部进一步做信道化或抽取降速,同时只把有效信号带宽内的数据发送出去。也就是说,链路预算的计算要追溯到“最终要输出给后端的有效数据率”,而不是笼统地拿采样率乘位数。

表格式的估算能让人看得更直观:

链路节点数据率传输介质说明
ADC原始采样76.8GbpsRFSOC内部4ch x 1.2GSPS x 16bit
DDC后IQ76.8GbpsRFSOC内部4ch x 600MSPS x 2 x 16bit
二次抽取后19.2GbpsRFSOC->外部FPGA只送有效带宽
外部FPGA->DDR120Gbps理论DDR4接口实际考虑刷新与效率
FPGA->上位机25.6GbpsPCIe3.0 x8 / 光纤压缩后数据

这个表做完之后,接口方案的取舍就清晰了:RFSOC到外部FPGA之间并不需要盲目追求最高速率,真正该做的是在RFSOC内部把数据尽量压缩,降低后续所有环节的压力。

2.2 RFSOC与FPGA之间的高速接口选型

两颗芯片之间的接口是我在这类项目里花时间最多的地方,没有之一。常见的选项有:并行LVDS、JESD204B、Aurora 8B/10B、SRIO、PCIe。

并行LVDS是早期中频数字化板卡常用的方案,优点是协议简单、延迟低、不需要高速收发器,缺点是引脚消耗极大,几十对差分线布起来非常痛苦,而且千兆级别的同步时钟在PCB上对等长要求很苛刻。对于RFSOC到外部FPGA这种几十Gbps的吞吐需求,并行LVDS基本可以排除。

JESD204B是ADC/DAC和FPGA/ASIC之间最主流的接口标准,但通常是FPGA作为接收端去接ADC芯片;RFSOC和FPGA之间用JESD204B,更多是把RFSOC模拟出来的数据在内部打包成JESD204B帧格式发给外部FPGA。这样做的好处是链路有完整的数据对齐和误码监控机制,SYSREF同步可以严格保证多通道间的确定性延迟。缺点是配置参数多,Lane数、帧格式、K字符、多帧对齐这些概念新手很容易晕。

Aurora协议则是Xilinx生态里很常用的轻量串行协议,如果我们用国产FPGA,也有对应的高速串行接口方案。它比JESD204B更容易上手,灵活度高,线速率和通道数可以自定义。缺点是协议开销相对高一点,8B/10B编码会有20%的带宽损失,对于10Gbps的物理链路,实际有效带宽也就8Gbps。

SRIO和PCIe则更偏系统级互连,如果两颗芯片之间除了纯数据搬运还需要做地址映射、消息传递,那么它们是更合适的选择。

我在实际项目中最终用的是JESD204B方案,原因有两个:一是链路本身内置了确定性延迟机制,多通道之间的一致性对齐有保障,这在测向、波束形成场景里是硬指标;二是JESD204B的误码检测比较完善,能通过Lane的误码计数快速定位物理链路问题。代价是要花时间把JESD204B的子类、多帧长度、SYSREF时序这些参数彻底搞懂。

2.3 帧格式与流量控制:避免乒乓缓冲失效的细节

芯片间传输一旦上了高速串行链路,就不能像寄存器那样敲一个值就完事,数据必须以帧为单位组织。帧格式设计看起来是个纯软件/逻辑问题,但设计不好直接导致后续处理单元解析困难、丢帧、缓存溢出。

我这块板子的帧格式参考了常见的做法。帧头使用固定字节数(比如4字节同步字),然后是通道号、数据属性、时间戳,之后是有效负载数据,帧尾附带CRC32校验。时间戳非常重要,尤其是多片同步或者长时间采集的场景,没有时间戳,后面做数据关联和波形对齐会难到怀疑人生。

流量控制是另一个容易被忽视的点。两颗芯片之间如果只靠“发完就完”,接收端缓存溢出几乎是必然。所以必须设计背压机制。在JESD204B这类协议里,标准本身并不提供传输层的反压机制,数据是按速率持续流动的。我这边把处理链路设计成:外部FPGA内部的接收缓冲接近半满时,通过一个低延迟的GPIO或者带内标志通知RFSOC侧暂停发送,或者让发送端降低有效数据速率。这个背压不一定要断流,可以是通过动态调整抽取因子或丢弃非关键通道数据来实现。

3. 硬件实现中的“坑位”:时钟、电源与PCB布局

3.1 时钟设计:采样时钟的相位噪声直接决定系统底噪

高速信号处理板的时钟设计,在很多项目里是被低估的。我见过不少板子,逻辑都能跑通,但射频指标一直上不去,最后排查来排查去,问题出在采样时钟的相位噪声。采样时钟并不是一个“能出时钟就行”的信号,它本质上参与ADC的量化过程,相噪差,ADC的无杂散动态范围和信噪比会明显恶化。

具体到双芯架构,RFSOC和外部FPGA还需要考虑时钟同步的问题。我的做法是做一个时钟树,用一块低相噪的PLL芯片产生系统参考时钟,再分配出几路:一路给RFSOC采样时钟;一路作为JESD204B的SYSREF同步信号;一路提供给外部FPGA的参考时钟。所有时钟最好同源,这样两颗芯片之间的采样相位关系才是确定的。

PCB布线时,SYSREF要和采样时钟做等长匹配。很多第一次做JESD204B的人会在概念里认为SYSREF只是一个“参考信号”,走线长短无所谓,结果多芯片同步时对齐一直不稳定,折腾很久才发现是SYSREF相对采样时钟的时序裕量不够。

3.2 电源树设计:数字噪声是如何混进射频通路的

双芯高速板卡的电源设计,难点在于“同时伺候好数字和模拟”。RFSOC内部的RF采样电路对电源噪声极其敏感,而旁边的FPGA又是功耗大户,开关电源的纹波和开关噪声很容易通过平面耦合到射频区域。

我的电源树是按“分区供电”的思路做的。数字大电流部分(FPGA核心、SerDes收发器、DDR)使用高效率的DC-DC,模拟部分(RFSOC的ADC/DAC供电、时钟芯片)则使用低噪声LDO。DC-DC的开关频率尽量避开RFSOC采样频率及其整数倍,不然开关纹波会以混叠分量的形式出现在ADC输出频谱里,那个杂散很难滤除。

还需要注意的是磁珠和滤波电容的位置。磁珠用来隔离DC-DC和模拟LDO的输出,但磁珠本身在特定频段会有阻抗峰值,选型时要看阻抗特性曲线,而不是只看直流电阻。电源平面切割也要谨慎,确保模拟地和数字地只有一个明确的单点连接参考,避免让回流电流绕着板子跑一圈。

3.3 PCB叠层、阻抗与布局:给高速链路留好退路

双芯高速板的PCB设计,我个人的建议是最少8层,常规做到10到12层会更舒服。层叠安排上,表层走高速串行差分线,内层要有完整的参考地平面,关键信号层之间不能随便跨越分割。

阻抗控制方面,10Gbps级别的JESD204B差分线要按100欧姆差分阻抗设计,单端高速信号按50欧姆。需要注意的是,国产板材的介电常数和损耗因子与常规FR4有差异,做阻抗计算时要用厂家提供的实际参数,不要照抄网上模板。

布局上的一个经验是:RFSOC的射频输入输出尽量靠近板边连接器,模拟前端区域要和其他数字区域隔开,必要时用屏蔽罩或者地孔墙做隔离。FPGA放置在RFSOC的另一侧,两颗芯片之间的SerDes走线尽量短、少打孔换层。如果顶层实在走不通,必须换层时,要保证成对信号线同层换层且换层位置附近有足够的地孔伴随。

另外,强烈建议在高速链路上预留测试点,至少把时钟信号和一组差分数据引到测试焊盘上。调试的时候如果没有这些测试点,只能拿示波器探头在细间距的BGA扇出上硬碰,非常痛苦。

4. 调试与验证:从串口打印到第一条稳定波形

4.1 上电时序和启动的优先级

双芯板卡回板后,第一件事不是写逻辑,而是检查上电时序。RFSOC、FPGA、DDR、时钟芯片各有各的上电顺序要求,电源轨电压异常导致芯片损坏的例子并不罕见。

我调试时会先做一次完整的电源测试:用可编程电源限流上电,逐路测量电源轨的电压和上电顺序,确认没有短路,然后再进入启动流程。启动的顺序应该是:时钟芯片供电并锁定 -> PS端ARM启动,通过串口打印信息确认运行 -> 加载PL比特流 -> 通过内部寄存器访问确认两颗芯片之间的SerDes链路训练成功 -> 最后才是数据通路的跑数验证。

很多团队一上来就加载完整逻辑,结果一片黑,不知道是时钟没锁、DDR初始化失败还是SerDes没对齐。把启动流程拆成多个可观测的里程碑,每个阶段都有对应的串口打印或状态寄存器可以查,调试效率会高很多。

4.2 从串口打印到第一条波形:一条亲测有效的调试路径

这块板子的调通路径,我按下面的顺序走,基本是顺畅的:

  1. 确认PS端Linux启动正常,串口能敲命令,DDR读写测试通过。这一步能排除RFSOC的ARM最小系统问题。
  2. 加载一份只包含内部回环的最小比特流,在RFSOC内部把ADC采样数据直接回环到DAC,用频谱仪看输出信号是否正常。这一步验证的是射频前端、ADC、DAC本身的工作状态。
  3. 开启JESD204B链路,在外部FPGA里写一个接收帧检测模块,统计SYSREF同步状态、帧同步状态、链路误码率。链路指标达标后再进行下一步。
  4. 建立整条数据通路,用信号源产生单音信号,从上位机抓取FFT结果,确认频率和幅度都正确。

测试中我发现一个比较隐蔽的问题:链路偶尔会出现周期性误码,单独跑回环却一切正常。最后定位到是SYSREF信号的重复触发时序和JESD204B的本地多帧时钟边界没有完全对齐,导致每隔一段时间出现一次帧对齐丢失。解决办法是在配置链路时把SYSREF的触发窗口拉长,并且保证SYSREF到达后留有足够的建立保持时间。这类问题用误码计数是最容易发现的,所以调试代码里一定要有在线误码统计,别等到上位机看到错误数据才往回追。

4.3 实测吞吐率、误码率与整机老化

数据通路跑通之后,还要做两个维度的验证,一个是极限吞吐率,一个是长稳老化。

极限吞吐率测试我是这样做的:在外部FPGA内部生成伪随机数据,灌入JESD204B上行链路,另一侧接收并实时比对数据,统计误码率。好的高速串行链路应该在10Gbps线速率下单Lane误码率低于10的负15次方级别,如果明显高于这个水平,就要检查眼图、时钟抖动和电源噪声。

长稳老化同样重要。我遇到过在实验室常温下一切正常,但连续跑24小时后开始偶发丢数的情况。原因是部分高速信号路径在温度升高后抖动增大,达到了接受端的时序余量边缘。解决思路是优化接收端均衡参数,或者在PCB上给主要芯片增加散热片。

这块板子在高低温箱里的表现也验证了不少设计余量,比如某些DDR控制器参数必须在低温下重新训练,这类问题只能在温循测试中暴露。因此如果项目周期允许,一定要留出足够的老化测试时间窗口,别把高低温测试压缩到最后一周。

5. 工程化细节:国产器件项目里很容易被低估的工作量

5.1 开发工具链、IP核与文档的匹配

国产RFSOC和FPGA各自的工具链都在快速迭代,但版本之间的兼容性仍然是个大问题。不同版本的IDE里IP核参数接口可能变化,加密IP的授权方式也可能不同。我在这块板子上就遇到过:RFSOC侧用某个版本的编译工具链生成的比特流,在固件镜像打包时才发现启动文件格式不匹配,被迫升级了工具链版本,结果个别IP核又要重新配置。

所以一定要尽早固定工具链版本,同一项目组统一环境。原理图、管脚约束、时钟约束、上电时序这些文件要有严格的版本管理,最好用Git。管脚分配是一件非常繁琐的工作,尤其是双芯片设计,管脚交叉核对稍有疏忽就可能造成PCB报废。建议在原理图设计阶段就写好管脚分配表,并编写脚本自动核对FPGA约束文件和原理图网表是否一致。

5.2 国产器件的参考设计与支持渠道

做国产器件项目,参考设计的价值怎么强调都不为过。拿到评估板或参考设计后,第一件事不是直接抄,而是理解每一颗芯片的电源连接、时钟路径、复位逻辑。很多国产芯片的数据手册在细节上写得不够细致,参考设计反而是最可靠的信息来源。

另外,厂商FAE的支持渠道要提前建立好。JESD204B链路调不通、寄存器配置与数据手册不一致这类问题,在国产器件上出现的概率相对更高。我建议在项目启动时就拉一个和器件原厂、代理商的沟通群,遇到问题第一时间同步log和寄存器截图,很多疑难杂症靠原厂FAE的经验能很快定位。

5.3 监控、保护与可测试性设计:给板子留好后路

最后说一个很多人项目中期才后悔的点:板卡的可测试性和保护机制设计。双芯板卡价值不低,烧一块板子不只是经济损失,还直接影响项目进度。所以一定要在硬件设计里加入以下机制:

  • 每路主要电源轨都有电流和电压监控,至少关键模拟电源要有过流保护;
  • 预留JTAG链,把RFSOC和FPGA的调试接口串联起来,方便现场升级和调试;
  • 预留温度传感器,放在RFSOC和FPGA附近,Linux里读温度并做降频或报警;
  • 高速接口上尽量选择带ESD保护的方案,板卡在实验室被静电打坏的事件并不罕见。

监控信息可以在PS端Linux里通过I2C读取,也可以在外部FPGA里做一个状态寄存器组,方便上位机通过PCIe或网口查询整板健康状态。这些设计在调试阶段能帮你快速判断问题是供电、时钟还是逻辑问题,在现场交付阶段更能大幅降低维护成本。

这块双芯板卡从方案预研到样板调通,前后花了大概一个季度。最大的体会是,RFSOC和FPGA的双芯架构不是简单的“两颗芯片放在一块板上”,而是要在射频指标、处理资源、带宽余量、可维护性之间做全局平衡。如果只把目光聚焦在某一颗芯片上,后面一定会被另一侧的瓶颈拖住。希望这篇总结能对正在做同类板卡的朋友有所帮助。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询