2. 协同计算体系结构
星载协同计算的核心问题,不是“把FPGA和CPU放在同一块板上”,而是让两者在有限功耗、有限质量和有限散热条件下,以可预测的时延和带宽完成数据交换与任务分工。理解这一章,需要同时看清三件事:处理器侧采用什么形态(独立CPU、SoC还是MPSoC)、FPGA与处理器之间以什么耦合方式连接、以及这种连接在星载资源约束下会退化成什么样子。
一、三种处理器形态与FPGA的配合关系
最基础的是FPGA+独立CPU架构。CPU通常选用宇航级或经过筛选的处理器,如SPARC V8、ARM Cortex-M/R系列或PowerPC系列,FPGA作为协处理器挂在外部总线上。这种结构灵活、器件可分别选型,但CPU与FPGA之间往往隔着片外总线和PCB走线,访问延迟大,适合控制流与数据流分界清晰的场景,例如CPU负责遥控指令解析和遥测组帧,FPGA负责高速AD采样与预处理。
SoC把CPU核、存储控制器和部分外设集成到单芯片内,FPGA以硬核或软核形式与CPU共享片上总线。典型如Xilinx Zynq-7000系列的PS(Processing System)+PL(Programmable Logic)结构,或Microchip PolarFire SoC。相比独立CPU方案,SoC把互连距离从厘米级缩短到微米级,显著降低访问延迟和功耗,是当前星载协同计算的主流选择。
MPSoC进一步集成多核CPU(如ARM Cortex-A53应用核+Cortex-R5实时核)、GPU、FPGA逻辑和专用加速器。它允许把实时控制、数据处理和健康管理分配到不同核上,FPGA则承担确定性最强的数据通路。MPSoC的代价是资源竞争更复杂:多个主设备共享DDR控制器和片上互连,必须通过QoS、优先级和带宽分配来保证关键任务的时延。
二、紧耦合与松耦合:两种连接哲学
松耦合指FPGA与CPU通过标准总线(如AXI、PCIe、SpaceWire)或外部存储器接口交换数据,双方有各自独立的存储空间和时钟域。CPU通过寄存器读写或DMA搬运与FPGA交互。它的优点是模块边界清晰、易于独立开发和验证;缺点是每次交互都要经过总线协议开销,延迟通常在百纳秒到微秒级,且CPU需要参与数据搬运或至少参与描述符管理。
紧耦合则让FPGA逻辑直接接入CPU的存储子系统或流水线附近,例如通过AXI Coherency Extensions(ACE)实现缓存一致性,或把FPGA加速器映射到CPU的地址空间并支持原子操作。紧耦合下,CPU可以用普通load/store指令访问FPGA内部寄存器或共享缓存行,延迟可降到几十纳秒,适合迭代计算、频繁小数据量交互的场景。但紧耦合对时序收敛、缓存一致性和验证复杂度要求更高,在星载环境中还需考虑单粒子翻转对共享缓存和一致性协议状态机的影响。
三、共享内存与总线互连
共享内存是协同计算最常用的数据交换媒介。典型结构是DDR存储器同时挂在CPU和FPGA的互连网络上,双方通过各自的端口访问同一片物理内存。为避免冲突,通常划分区域:CPU使用一段作为程序和数据区,FPGA使用另一段作为帧缓存或系数表,中间用乒乓缓冲区或环形队列传递结果。
总线互连决定了谁能访问谁、以多快速度访问。SoC内部常见多层AXI互连,主设备包括CPU核、DMA控制器、FPGA加速器和外设,从设备包括DDR控制器、片上RAM和外设寄存器。每个主设备有独立的读写通道,互连矩阵根据地址译码路由请求。星载设计中,必须为FPGA数据通路预留足够的带宽余量,否则当CPU突发访问DDR时,FPGA的实时数据流会出现溢出。
四、星载环境下的资源受限特征
星载平台与地面嵌入式系统最大的区别在于:所有资源都被“卡死”。功耗通常限制在几瓦到十几瓦,散热只能靠传导和辐射,器件必须承受总剂量和单粒子效应,质量每增加一克都要付出发射成本。这些约束直接改变协同计算的设计决策。
第一,不能简单堆核或堆逻辑。地面SoC可以靠多核并行和更高主频提升性能,星载则更依赖“用FPGA做确定性加速、用CPU做灵活控制”的分工。例如,将FFT、滤波、图像压缩等规则计算放入FPGA流水线,CPU只负责参数配置、任务调度和异常处理,这样可以在较低主频下获得可观的吞吐率。
第二,共享内存带宽是稀缺资源。DDR控制器通常只有一个,CPU和FPGA都要访问。若FPGA数据通路每帧需要搬运大量数据,必须用DMA和乒乓缓冲减少CPU干预,同时给FPGA端口分配足够的QoS优先级。一个实用的估算方法是:先算出FPGA每秒钟必须写入DDR的字节数,再乘以2(读写各一次),与DDR理论带宽比较,留出至少30%余量给CPU和刷新操作。
第三,紧耦合路径需要抗辐照加固。共享缓存和一致性协议状态机一旦发生单粒子翻转,可能导致数据不一致且难以检测。工程上常采用TMR寄存器、缓存行ECC、周期性擦洗和协议超时复位来缓解。如果可靠性要求极高而性能要求相对宽松,松耦合+DMA反而是更稳妥的选择,因为双方存储空间独立,故障不会通过缓存一致性协议扩散。
第四,资源受限下的任务划分原则。一个可操作的方法是:把任务按“数据率×确定性要求”排序。高数据率且要求确定时延的,放FPGA;低数据率但逻辑复杂、分支多的,放CPU;介于两者之间的,评估DMA搬运开销后再决定。例如,星上图像处理中,辐射校正和坏像元替换适合FPGA,目标检测和模式识别适合CPU或MPSoC中的应用核,两者之间用共享内存中的帧缓冲和描述符队列衔接。
实际设计中,建议先用一张资源预算表把CPU主频、FPGA逻辑资源、DDR带宽、功耗和抗辐照等级列清楚,再根据任务的数据率和时延要求选择耦合方式。如果FPGA每帧数据量超过几十KB且交互频率低于毫秒级,松耦合+DMA通常足够;如果CPU需要频繁读写FPGA内部的小型状态表或系数,紧耦合的AXI-Lite映射或共享缓存更合适。无论哪种方式,都要在原型阶段用实际数据流压力测试验证带宽余量和最坏时延,而不是仅依赖理论计算。