3. Lattice FPGA架构与资源建模

软硬件协同设计的第一步,不是写代码,而是回答一个量化问题:这块 Lattice FPGA 到底能装下多少逻辑、多少乘法、多少存储、多少时钟域和多少 I/O?如果资源估算失真,划分方案会在综合阶段崩塌——本该放进 FPGA 的模块被迫回退到 MCU,或者为了塞进逻辑而牺牲时序余量。本节围绕 Lattice FPGA 的六类核心资源,建立一套可用于软硬件划分的资源估算模型。

一、六类资源的物理本质与建模口径

Lattice FPGA(以 ECP5、iCE40、CrossLink-NX 等系列为代表)的可编程资源可归为六类,每类的“计量单位”不同,建模时必须统一到可比较的口径。

可编程逻辑单元(LUT/FF):Lattice 主流器件采用 4 输入 LUT(LUT4)结构,每个 Slice 通常含 2 个 LUT4 与 2 个触发器(FF)。ECP5 的每个 PFU(Programmable Functional Unit)含 4 个 Slice,即 8 个 LUT4 与 8 个 FF。建模时以“LUT4 数量”和“FF 数量”分别计数,因为组合逻辑与寄存器逻辑的消耗比例差异很大。

DSP(乘法累加单元):ECP5 的 sysDSP 支持 18×18、9×9 等多种乘法模式,每个 DSP Slice 含一个 18×18 乘法器、加法器和流水寄存器。关键建模参数是“乘法位宽”与“是否级联”:一个 36×36 乘法需要 4 个 18×18 DSP 拼接,而 8×8 乘法可在一个 DSP 内以 9×9 模式实现。

EBR(Embedded Block RAM):ECP5 每个 EBR 为 18 Kbit,可配置为 512×36、1024×18、2048×9 等宽度。建模时按“位宽×深度”折算成 EBR 块数,并注意位宽非 9 的倍数时会产生位浪费。

分布式 RAM(Distributed RAM):由 LUT 直接构成,适合小容量、多端口、低延迟的存储。iCE40 系列中分布式 RAM 是主要存储形式。建模时按“LUT 消耗量”折算,一个 16×4 的分布式 RAM 约消耗 16 个 LUT4。

时钟网络:Lattice 器件提供全局时钟(Global Clock)与区域时钟(Regional Clock)。ECP5 有 8 个全局时钟网络,每个时钟域消耗一个全局网络。建模时统计“独立时钟域数量”,超过全局网络数时需改用区域时钟或时钟使能方案。

I/O 资源:按 Bank 组织,每个 Bank 有独立的 VCCO 电压。建模时统计“I/O 标准类型×数量”,并检查同一 Bank 内电压兼容性。高速接口(如 DDR、SerDes)还需占用专用 I/O 和 PLL。

Lattice FPGA 资源估算模型 — 六类资源与划分决策 以 ECP5-45F 为例:LUT4 43,200 / FF 43,200 / DSP 72 / EBR 108×18Kb / 全局时钟 8 / I/O 316 可编程逻辑 LUT4 / FF 43,200 LUT4 数量 Slice = 2 LUT4 + 2 FF DSP 单元 sysDSP 72 18×18 乘法器 36×36 需 4 个拼接 EBR 块存储 Embedded Block RAM 108 块 × 18 Kbit 总计 1,944 Kbit 分布式 RAM Distributed RAM LUT 折算 16×4 ≈ 16 LUT4 适合小容量多端口 时钟网络 Global / Regional 8 全局时钟网络 每域占 1 个全局网络 I/O 资源 按 Bank 组织 316 可用 I/O 引脚 8 个 Bank 资源估算流程:从 RTL 到划分决策 ① 模块资源画像 统计 LUT/FF/DSP/ EBR/时钟域/I/O ② 折算与求和 位宽折算、DSP 拼接 EBR 块数、LUT 折算 ③ 余量校验 目标占用 ≤ 70% 时钟域 ≤ 全局网络数 ④ 划分决策 超限模块 → MCU 软件 余量充足 → 保留 FPGA 划分决策矩阵(示例:ECP5-45F,目标占用 ≤ 70%) 资源类型 可用总量 70% 预算 示例模块占用 判定 LUT4 43,200 30,240 18,500 ✓ 通过 DSP 72 50 56(含 36×36 拼接) ⚠ 接近上限

二、从 RTL 到资源数字:折算方法

资源估算不能等到综合报告出来才做,那样就失去了划分的意义。在 RTL 阶段,可以用“结构计数法”快速估算。

LUT 估算:一个 N 位加法器约消耗 N 个 LUT4;一个 N 位计数器约消耗 N 个 LUT4 加 N 个 FF;一个 N 输入组合逻辑函数若输入数 ≤ 4,消耗 1 个 LUT4,超过 4 则按树形分解。例如一个 16 位比较器约消耗 16 个 LUT4,一个 8 状态有限状态机约消耗 8~12 个 LUT4 加 4 个 FF。

DSP 估算:统计所有乘法运算的位宽。若位宽 ≤ 18,每个乘法占 1 个 DSP;若位宽在 19~36 之间,占 4 个 DSP(两个 18×18 拼接再相加)。注意 Lattice sysDSP 支持 9×9 模式,两个 9×9 乘法可共享一个 DSP Slice,这是小位宽场景的优化点。

EBR 估算:按“位宽向上取整到 9 的倍数,深度向上取整到 2 的幂”折算。例如一个 512×12 的 FIFO,位宽 12 向上取整为 18,深度 512 不变,占用 512×18 = 9216 bit,即 1 个 EBR(18 Kbit)的 51%。若位宽为 20,则取整为 36,占用 512×36 = 18432 bit,刚好 1 个 EBR。位宽取整带来的浪费在窄位宽场景下非常显著。

分布式 RAM 估算:一个深度 D、位宽 W 的分布式 RAM,消耗约 D×W/16 个 LUT4(因为每个 LUT4 可存 16 bit)。例如 32×8 的分布式 RAM 消耗约 16 个 LUT4。分布式 RAM 的优势在于多端口和低延迟,但容量超过 256 bit 后应优先考虑 EBR。

三、时钟域与 I/O 的约束建模

时钟网络和 I/O 是“硬约束”资源,不像 LUT 那样可以灵活复用。ECP5-45F 有 8 个全局时钟网络,如果设计中有 10 个独立时钟域,就必须合并或改用区域时钟。建模时统计每个模块的时钟域数量,并检查跨时钟域接口是否需要额外的同步器(每个同步器约消耗 2 个 FF)。

I/O 建模需要按 Bank 分组。每个 Bank 有独立的 VCCO,同一 Bank 内不能混用不兼容的 I/O 标准。例如 Bank 0 的 VCCO 设为 3.3V 时,不能同时接入 1.8V 的 LVDS 差分对。建模时列出每个 Bank 的 I/O 标准、数量和电压,检查是否存在冲突。高速接口(如 DDR3、SerDes)还需占用专用 I/O 和 PLL,这些资源在数据手册中有独立计数。

四、资源估算表与划分决策

将上述估算结果填入一张资源估算表,是软硬件划分的直接依据。以下是一个可填写的示例模板,以 ECP5-45F 为目标器件,假设设计包含一个图像预处理模块、一个 FFT 模块和一个控制状态机。

模块 LUT4 FF DSP EBR 时钟域 I/O
图像预处理(3×3 卷积) 2,800 1,200 9 4 1 24
FFT-256 点 6,500 4,800 12 8 1 0
控制状态机 320 180 0 0 1 8
跨时钟域同步器 48 96 0 0 — 0
合计 9,668 6,276 21 12 3 32
70% 预算 30,240 30,240 50 75 8 221
余量 20,572 23,964 29 63 5 189

从表中可以看出,LUT、FF、EBR 和 I/O 都有充足余量,但 DSP 占用 21 个,距离 70% 预算的 50 个还有 29 个余量。如果后续要增加一个 36×36 的矩阵乘法模块,需要 4 个 DSP,仍在预算内。但如果要增加三个这样的模块,DSP 将接近上限,此时应考虑将部分乘法运算移到 MCU 软件中实现,或者改用分布式算法(DA)以 LUT 替代 DSP。

估算口径提示:综合工具报告的资源占用通常比 RTL 结构计数法高 10%~20%,因为工具会插入额外的逻辑用于时序优化、复位处理和信号扇出。建议在 RTL 估算值上乘以 1.15 的系数作为保守估计,再与 70% 预算比较。

五、面向软硬件划分的量化判据

资源估算的最终目的是支撑划分决策。以下三条判据可直接用于工程实践:

  1. DSP 瓶颈判据:若 DSP 占用超过 70% 预算,优先将低吞吐率的乘法运算移到 MCU 软件实现。MCU 的乘法指令虽然单次延迟高,但通过流水线调度可以隐藏部分延迟。
  2. EBR 瓶颈判据:若 EBR 占用超过 70% 预算,检查是否存在位宽浪费。将多个窄位宽存储合并为一个宽位宽 EBR,或改用分布式 RAM 承担小容量存储,可以释放 EBR 资源。
  3. 时钟域判据:若独立时钟域数量超过全局时钟网络数的 70%,必须进行时钟域合并。合并方法包括:使用时钟使能代替独立时钟、将同频不同相的时钟统一到同一全局网络、用 PLL 生成同源时钟。

这三条判据不是孤立的。实际划分时,需要同时检查所有资源的余量,找到最紧的约束作为划分边界。例如上表中 DSP 是最紧约束,那么划分决策应以 DSP 为核心:优先保证 DSP 密集型模块留在 FPGA,将 DSP 需求低但 LUT 需求高的模块考虑移到 MCU 或进行逻辑优化。

常见误区:只关注 LUT 数量而忽略 DSP 和 EBR 的硬约束。LUT 可以通过逻辑优化压缩,但 DSP 和 EBR 是物理硬核,数量固定且不可压缩。一个 LUT 占用仅 40% 但 DSP 占用 95% 的设计,同样无法在目标器件上实现。

建立资源估算模型后,下一步是将其与软硬件接口设计结合:确定哪些数据通过 AXI 或 SPI 在 FPGA 与 MCU 之间传输,传输带宽是否与模块吞吐率匹配。资源估算表将作为接口设计的输入,确保划分后的系统在资源和带宽两个维度上都可行。