边缘控制器的架构选型里,FPGA 与纯 CPU 之争出现频率最高,结论却最容易被立场带偏。本篇按工程手册的口径组织:先立判据,再逐条给出可核验的判断方法,然后落到资源预算、TCO 与验收留痕。全篇不给可直接照抄的型号与数值,凡涉及周期、抖动、通道数、资源占用与功耗的具体取值,一律须以整机实测为准,并按整机规格与现场复测记录确定。
一、判据先行:三个数先写进技术协议
选型讨论之所以反复,多半是因为缺少共同的输入。开始比较方案之前,先把三个数写进技术协议:周期(一个控制循环允许的最长时间)、抖动(同一动作多次执行的时间离散度上限)、最坏响应时间(从事件到动作完成的长尾值)。
这三个数必须由工艺与电气共同确认,不能由单一角色拍板。写进协议之后,它们同时承担两个作用:一是给方案比较提供共同基准,二是给后期验收提供判据。没有这三个数,讨论只能停留在"别人家都这么用",而这句话既不能复核,也不能追责。
判据的颗粒度也要定清楚。是整机一个数,还是每个工位、每根轴、每路通道各一个数?颗粒度太粗,方案没法落;太细,验证工作量成倍上升。工程上比较稳妥的做法是三层:整机给一个总口径,工位给一个分口径,关键轴与关键通道单独列。三层对齐,后面所有测试都有归属,出现偏差时也能定位到具体层级。
判据成形后,再按三条硬件事实判断架构归属。三条之间是"或"的关系:任一条越界,纯 CPU 方案就要在系统划分上付出额外代价;三条都不越界,上可编程逻辑就是把成本与验证周期一起抬高。
| 判据 | 越界信号 | 纯 CPU 侧代价 | 逻辑侧代价 |
|---|---|---|---|
| 时序确定性 | 周期 100 µs 级、抖动要 µs 量级 | 缓存与总线争用带来不可承诺的长尾 | 固定节拍,延迟由布线决定 |
| 并行通道 | 十几路以上需同一时钟域同刻采样 | 分时调度把并行摊成串行,拼接误差累积 | 独立通路共用时钟,采样沿对齐 |
| 接口形态 | 非标并行总线、严格建立保持时间 | 需外部桥接转一道,多一层延迟与不确定 | 按对方时序图直接生成接口 |
二、时序确定性:纯 CPU 的不确定性从哪来
纯 CPU 执行一段动作的时间不是常数,它由几个硬件层面的机制决定,而这些机制都不对外承诺上界。
第一是缓存。指令与数据是否命中缓存,决定了同一条指令在不同时刻的耗时差异。命中与未命中之间的差距,在多级缓存结构下可以相差一个数量级,而这个差距对上层是不可见的。
第二是总线争用。多核共享内存控制器与片内互连,多个核同时访问时,仲裁结果取决于当时的负载分布。负载轻的时候看不出来,负载一重,某一路的访问就会被延后。
第三是内存控制器的调度。刷新、预取、行缓冲命中等行为都会改变访问延迟,这些行为由控制器内部策略决定,外部无法精确预测。
还有一个常被忽略的环节:中断与直接内存访问的路径。外部事件进入系统,要经过中断控制器、经过总线、再由处理器取指执行;数据搬运如果走直接内存访问,又要与处理器争用同一段总线。路径上的每一级都有排队,路径越长,长尾越明显。方案评审时可以要求画出这条路径,标出每一级的缓冲深度与仲裁方式,画不出来通常意味着没人核算过最坏情况。
把这三条合起来,就得到"平均周期容易达标、最坏周期难以承诺"的典型形态。方案在实验室里跑得好,上产线偶发超时,多数是这个原因。要收敛它,只能做系统划分:把实时动作压到更少的核、更少的共享资源上,并且把实时域与非实时域在物理上隔开。
需要强调的是,“确定性"不等于"绝对准时”。它在设计边界内成立:温度在允许区间、电压在容差范围、布线满足时序约束、逻辑资源占用留有余量。边界一旦被突破,延迟同样会变差,甚至出现建立时间违例。所以宣称确定性的方案,必须同时给出边界条件与边界内的实测数据,只讲"逻辑是硬件并行所以一定准"的,属于把条件省掉了。
可编程逻辑走的是另一条路。综合完成后,同一段逻辑的延迟由布线与时序约束决定,只要温度、电压在设计边界内,节拍就是确定的。它不是"更快",而是"可以被承诺"。
三、并行通道:路数决定资源,资源决定形态
第二条判据是并行通道数。多路编码器解码、多路高速同步采集、多路相机触发输出,共同点不是快,而是必须同时。
纯 CPU 实现并行的方式是分时:多核、多线程、多队列,本质是把并行摊成串行再拼回时间轴。摊的过程里每一路都要过中断、过调度、过缓存,路数越多,拼接误差越大。通道数在个位数、彼此时间关系不严格时,这套办法完全够用。
通道数上到十几路、几十路,并且要求同一时钟域内同刻采样,分时就很难把误差压住。此时可编程逻辑的优势不是算力,而是结构:每一路一条独立通路,全部挂在同一个时钟上,采样沿的对齐由布线保证,不经过任何排队。
同刻并行还有一个前提:采样沿必须真的对齐。多路信号如果各自经过不同的线缆长度、不同的收发器件,到达时间就会分散;线缆长度差乘以信号传播速度,就是分散量。工程上要么用等长线缆与统一收发器件把分散压住,要么用硬件触发链让所有通道由同一个沿启动。前者靠物料与工艺保证,后者靠逻辑保证,两条路都要在方案里写明。
资源预算要按峰值来算,而不是按当前需求算满:
- 逻辑单元按峰值通道数留出余量,布线与时序收敛的难度随占用率上升而非线性增长;
- 乘法器与块存储按滤波、缓存、FIFO 深度逐项列出,不要只算逻辑单元;
- IO bank 的数量与电平标准要逐 bank 核对,不同 bank 的电平组合会互相约束;
- 时钟资源按需要的时钟域数量核算,跨域路径越多,时序收敛越难。
通道数翻倍时,资源占用通常不是线性增长。所以在方案阶段就要问清"未来两年会不会加通道",把扩展余量一次规划到位;按当前路数刚好配满的方案,扩产时往往要换板。
四、接口形态:非标并行总线与严格握手
第三条判据是接口。标准串行总线有成熟的收发器、变压器、连接器与线缆体系,纯 CPU 配上对应接口即可接入,链路长度、拓扑与电气参数都有公开口径可循。
非标并行总线与自定义握手接口则不同。这类接口的特征很好认:数据线与地址线并排走,读写靠几根控制线的电平组合,时序图上明确写着建立时间与保持时间。要接这种接口,纯 CPU 只能靠外部桥接器件转一道;转一道就多一层延迟,也多一层时序不确定性。
可编程逻辑可以按对方的时序图直接生成接口,把建立与保持关系用逻辑门保证,必要时还能在同一器件内完成电平转换、串并转换与采样对齐。
电气层面还有三件事要在图纸阶段定下来:一是隔离,现场侧与控制器侧是否做电气隔离,隔离器件的通道数、速率与供电要一起核算;二是电平,不同 bank、不同外设的电平标准要逐项核对,混接会带来电平不匹配与上电时序问题;三是连接器,插拔次数、锁扣形式、线缆固定方式决定了长期运行的可靠性,便宜一档的连接器往往在震动环境里先出问题。
接口这条判据经常被低估。项目在时序与通道上都过得去,最后卡在一个非标接口上,被迫在方案末期加一块器件,此时机箱、供电、散热都已定型,改动代价远高于一开始就规划好。
反过来也要克制:接口是标准的,就不要为了"看起来高级"去上逻辑。能用标准控制器直连的,多一层转换只是多一层故障点。
五、三笔账:功耗、成本与验证周期
决定上可编程逻辑之后,账要算清楚,否则中期容易发现预算与工期双超。
功耗与散热。静态功耗与动态功耗都随资源用量和翻转率上升。无风扇机箱的热预算有限,散热方案要按最坏工况核算,而不是按常温空载核算。功耗上去了,机箱形态、供电轨与温升余量都要跟着重算。
成本与验证周期。器件、配置存储、供电轨、时钟网络都要增加;验证要从功能验证做到时序验证、板级联调与长时间运行,周期通常以周计。这部分工时不会出现在报价单上,却实实在在占用交付节点。
资源与供货。逻辑资源、乘法器、块存储、IO bank 要按峰值需求留余量;器件的长期供货与封装变更风险,要在选型阶段向供方确认,而不是等到量产前。配置存储这一项尤其容易被漏掉。逻辑器件的配置数据通常存放在外部存储器里,上电加载需要时间,加载失败会导致整机无法启动;存储器本身的擦写寿命、温度等级、供应商变更,都要在物料清单里单列。有些项目在样机阶段用通用存储,量产时换成便宜替代料,结果在现场出现偶发的加载异常,排查成本远高于当初省下的那一点。
BOM 里只有一个料号、没有第二来源,是长期运行阶段最常见的隐患。
把三笔账折算到三年周期,比较口径会更清楚:
| 成本项 | 纯 CPU 方案 | 上可编程逻辑 |
|---|---|---|
| 器件与板卡 | 低,通用料多 | 高,含配置存储与多路供电轨 |
| 散热与机箱 | 常规风冷或无风扇即可 | 需按最坏工况重算热预算 |
| 设计与验证工时 | 集中在系统划分与调优 | 含逻辑设计、时序收敛、板级联调 |
| 备件与维护 | 通用件,替换快 | 专用件,版本与供货需跟踪 |
| 扩展方式 | 加卡、加通道、换整机 | 改逻辑、重综合、重新验证 |
这张表不给出具体金额,因为金额随工位规模差异极大。它的用处是提醒评审者:把三笔账分别列出来,再判断越界带来的收益是否覆盖这三笔支出。
反之,纯 CPU 方案的账要简单得多:器件成本低、验证周期短、备件通用。它省下的不只是器件钱,还有围绕可编程逻辑的整套工程成本。所以判断的正确方向是"默认纯 CPU,越界才上逻辑",而不是反过来。
六、验收与复测留痕清单
选型落定不等于结束,验收口径要一起定。以下清单可直接进技术协议:
- 周期实测:满载与轻载各测一次,记录平均值与最大值,注明测试条件;
- 抖动实测:同一动作连续执行足够多次,给出分布而非单点值;
- 并行通道一致性:多路同刻采样,比较各路之间的时间偏差;
- 接口时序验证:按对方时序图逐项核对建立与保持关系,留波形记录;
- 温升与功耗:按最坏工况长时运行,记录关键点温度与输入功率;
- 资源占用:逻辑、存储、IO bank 的实际占用率与余量;
- 变更留痕:任何一次改动升一版,图纸、BOM、复测记录版本对齐。
复测记录本身也有格式要求:每条记录写清测试日期、样机编号、固件与逻辑版本、仪器型号与量程、环境条件。缺任何一项,这条记录在后期争议里都用不上。建议随交付一并归档三样东西——点位与时序表、复测原始数据、变更记录,三者版本必须对齐。改动一次升一版,图纸、物料清单与复测记录同步更新,避免出现"记录证明的是上个月那台机器"的情况。
测试条件要写清楚:通道数、总线负载、环境温度、运行时长。换一次条件就得重测,没写条件的数字事后当不了依据。
回到开头:FPGA 还是纯 CPU,不是档次问题,是约束问题。先把三个数写进协议,再按三条判据逐条对照,越界才上逻辑,不越界就用纯 CPU 并把系统划分做扎实。架构选型的价值不在于选了哪个,而在于这个选择能否被复测记录证明。