这一篇在干嘛?

设计抽象层级每抬高一级,人能驾驭的复杂度就大一级。本篇讲 RTL 之上的两件事:RTL 综合怎么利用 FPGA 的专用结构(数据通路、硬核),以及行为级综合怎么把 C/SystemC 式的行为描述自动变成 RTL(调度、分配、绑定三大任务)。

为什么要往抽象上层走

现代 SoC FPGA 单芯片里塞了处理器(硬核/软核)、总线、存储器、硬件加速器。要在这种复杂度上保持生产力,必须有一条”从概念到实现”的自动工具链:

  • 系统级综合(ESL):把 SystemC 式系统描述编译成”跑在处理器上的任务 + 定制逻辑里的函数 + 通信协议与接口”;
  • 行为级综合(HLS):把电路的行为描述变成满足面积/延迟/功耗约束的 RTL,三大子任务是调度(scheduling)、分配(allocation)、绑定(binding)
  • RTL 综合:输入是”数据通路部件的数量与绑定关系 + 控制器(状态机)“,输出门级网表。

效率差距直观惊人:从 RTL 上移到行为级,代码密度可提升 10 倍、仿真时间缩短 100 倍。三层各自的分工可以这样记:

  • 系统级回答”哪些部分跑软件、哪些做硬件、模块间怎么通信”;
  • 行为级回答”硬件部分按什么顺序算、用几份资源、数据存在哪”;
  • RTL 级回答”每个周期每个寄存器的值是什么”。

层级越高,搜索空间越大、自由度越高,但离物理现实越远——本篇后面会看到,把”物理现实”拉进高层综合正是该领域的核心矛盾之一。

RTL 综合:别浪费 FPGA 的”专用件”

RTL 综合的文献相对少——它大量复用成熟的 ASIC 技术,但 FPGA 有三个特殊议题。

数据通路综合:保住规则性

大电路里数据通路逻辑通常高度规则(位切片式重复)。传统流程却先把每个数据通路节点展开成门、丢掉规则性信息,再指望布局工具重新发现规整的版图——几乎不可能,结果版图混乱、布线困难,而且一旦摊平成门,进位链这类 CLB 特性就用不上了,问题规模还暴涨(门的数量远多于 DFG 节点数)。

数据通路综合反其道而行:保留数据通路结构,直接映射到 FPGA 的专用模块

SDI 方案:针对拓扑固定的规则数据通路,采用三段式版图——中间大块放规则数据通路(模块横排、位切片竖叠),下方放控制器,上方小块放不规则逻辑(cap cells,如符号加法的溢出/进位处理)。

图5.1 SDI设计流程:SNF网表→参数化模块生成→遗传算法布局规划→压缩→ILP重放置→布线

图5.2 SDI的目标版图拓扑:中间规则数据通路区、下方控制区、上方cap cell区

效果:版图更规整、更不拥塞,关键路径布线延迟比常规工具短 13%,编译还快一倍。代价是版图受约束——适合数据密集、控制简单的电路,控制密集的设计会被布局限制反噬。后续工作用词级优化(多路选择器树折叠、操作重排)把面积膨胀压到 3~8%。

GAMA:针对前述”压缩用不了进位链、只压缩相邻模块”两个局限,流程是——树分裂(在存储单元处断环、DAG 切成树)→ 树覆盖(用类 DAGON 的动态规划在线性时间里找到最优模块组合,能用 CLB 里的复合模块”一个顶俩”)→ 覆盖后优化 → 模块生成(4-LUT 列 + 进位链能实现丰富的运算功能,所有模块等宽等间距)。32 位数据通路映射到 Xilinx 4000 时编译速度快 3.24 倍,质量持平或更好。

异构 FPGA:软硬如何分工

平台 FPGA(Stratix II、Virtex-5 一类)同时提供”硬”专用结构(存储块、乘法器)和”软”可编程逻辑,RTL 综合必须两头来。学术工具 Odin 的流程:

图5.3 Odin的RTL综合流程:解析→细化成扁平网表→简单综合→推断硬核结构→绑定软/硬实现

  1. 解析:Verilog 变成层次化中间表示;
  2. 细化:展开成扁平网表,节点包括逻辑块、存储块、if/case、算术操作、寄存器;
  3. 简单综合:常量检查、多路选择器合并、状态机 one-hot 重编码;
  4. 推断(inferencing):在网表里搜”能映射到硬核的连通子图”——本质是子图同构匹配;
  5. 绑定:每个节点映射到硬电路、软逻辑或混合实现(比如映射到 LPM 库,由下游决定落点)。

质量与 Altera 前端工具相当。其他开放问题还包括:面向低功耗的 RTL 综合(第 6 章讲)、glitch 功耗的重定时、多路选择器优化的资源共享、版图驱动 RTL 综合等。

行为级综合:三大任务

把行为描述变成”数据通路 + 控制器”的 RTL,核心三件事:

  • 调度:每个操作在哪一个控制步(时钟周期)执行;
  • 分配:需要几个功能单元、寄存器、互连资源;
  • 绑定:哪个操作用哪个功能单元、哪个变量存进哪个寄存器。

三者互相纠缠:调度受资源数量约束,资源多则并行度高但面积大——典型的性能/成本权衡。

一个反直觉的现实:多路选择器是 FPGA 里的奢侈品。0.1μm 工艺下,32 选 1 的 MUX 面积/延迟/功耗几乎等于一个 18 位乘法器。传统综合只盯着功能单元和寄存器省资源,结果 MUX 又宽又多,性能面积功耗全输。这要求搜索引擎在资源分配、MUX 生成、互连生成等因子联合约束下探索足够大的解空间。

更深的坑是物理脱节:没有版图信息就无法准确估计互连延迟,而互连恰是亚微米设计的性能主宰。这催生了”版图驱动”的行为综合(见下)。另外,数据相关性分析(挖掘并行度)、存储器划分/位宽优化/访问模式优化(存储常是性能瓶颈)都是行为级综合的独特挑战。

多 FPGA 系统的行为综合

设计超过单芯片容量时要做多 FPGA 划分。传统两段式(先综合成 CLB 网表、再按芯片切分)受制于 FPGA 引脚数。改进思路是利用设计层次

图5.4 层次化综合与划分流程:HDL→结构树→层次连通图,再按层次做集合覆盖划分

先把 HDL 的层次(模块→进程→语句)表示成结构树,再映射成三层层次连通图,然后从顶层节点开始做层次化集合覆盖:顶层盖不住再下探到低层节点。利用层次结构让划分出的 FPGA 数量更少、CLB 利用率更高、引脚压力更小。

COBRA-ABS 走得更远:面向算术密集算法,用模拟退火做全局优化,同时决定多 FPGA 划分、调度、功能单元选择与绑定、寄存器分配、跨 FPGA 通信的调度与绑定,最后综合出定制的 VLIW 架构。

版图驱动行为综合:把物理信息提前

核心思想:综合时同时产出 RTL 网表和近似的芯片级物理布局,让”综合完即达标”取代”综合→实现→失望→重来”的迭代循环。直觉上这和第 4 章的物理综合一脉相承,只不过方向相反——物理综合是”布局后回头改逻辑”,这里是”综合时就往前看布局”。

方案一(ChipEst-FPGA 反馈式):先估资源、用物理估算工具得到近似布局拓扑,提取单元间距离指标反馈给调度与绑定;逐控制步构建搜索树(编码不同调度/绑定方案)并剪枝,失败就调整布局或放宽延迟约束重试。效果:传统方法违例的时序约束,该方法能找到满足约束的解;基准测试里互连延迟对性能的贡献高达 55%——不提前管它是不行的。

图5.7 版图驱动高层次综合流程:资源估计→ChipEst布局→距离反馈→逐周期调度绑定→版图调整循环

方案二(MCAS,多周期通信):架构模型是规则分布式寄存器(RDR)——芯片划成岛阵,岛内计算与通信单周期完成,跨岛信号按距离需要 1~k 个周期。流程:CDFG → 力导向调度做资源分配 → 绑定最小化全局数据传输 → 生成互连部件图 ICG → 调度驱动布局(退火把部件放进岛格)→ 布局驱动的调度+重绑定 → 寄存器/端口绑定 → 生成数据通路 VHDL + 分布式控制器 + 布局与多周期路径约束(喂给下游布局布线)。

图5.8 MCAS整体流程:CDFG→资源分配→绑定→ICG→调度驱动布局→调度重绑定→控制器生成

实战数据(Stratix 器件,流水线乘法器用 DSP 块实现):数据流为主的设计时钟周期平均缩短 44%、总延迟缩短 37%;含控制流的设计也有 28%/23% 的改善。

两个方案合起来看,版图驱动综合的收益来源是同一件事:把”互连延迟”从事后惊喜/惊吓变成事前输入。方案一用估算布局反馈既有流程,侵入性小;方案二直接改架构模型(RDR 的岛阵 + 多周期通信),让”跨岛通信要几个周期”成为调度器的显式约束——这是系统级思维对物理现实的正面回应。

其他专项技术

  • 循环变换:建立分析式的性能/面积模型,快速评估循环变换对整个 FPGA 设计的影响(含 I/O 存储带宽这一常见瓶颈),可当编译器用来自动探索大设计空间。
  • 分支优化:按分支执行概率分配资源——高频分支多给硬件。同性能下省 24~27.5% 面积,同面积下最多快 3 倍。
  • 存储分配:自动把程序数据分配到多块存储器以最小化循环总执行时间,用隐式枚举压住指数级搜索空间。
  • 模块选择与资源共享:每个操作从模块库里挑实现 + 操作绑定到资源,联合决策比分开做显著省面积(递归分支定界或带回溯的迭代模调度求解)。
  • 通信综合(SCOOP):对顺序通信介质,读写顺序必须一致,传输顺序对性能影响巨大。求解”最优传输顺序”被证明等价于资源受限调度(NP-complete),用 list-scheduling 启发式 + 循环迭代重排解决,总延迟平均改善 20%。

这些专项技术放在一起看,共同点是:行为级综合的瓶颈往往不在算术,而在”访存”和”通信”。循环变换受 I/O 存储带宽掣肘,存储分配直接决定循环执行时间,通信顺序能造成天差地别的延迟——做高层次设计时优先审视数据怎么流动,比盯着运算资源更有效。

常见坑/误区

行为级综合里”省资源”不等于”省成本”。少分配几个功能单元/寄存器,会让更多操作时分复用同一硬件,制造出更宽、更多的多路选择器和互连——在 FPGA 上一个 32 选 1 MUX 抵得上一个 18 位乘法器,最终面积功耗可能不降反升。同理,忽略互连延迟的高层估计在亚微米工艺下会系统性高估可达频率。

通关标准:

学完本篇你应该理解:数据通路综合为什么要”保结构、直接映射专用模块”;异构 FPGA 综合的推断-绑定两步;行为级综合的调度/分配/绑定三大任务及其相互制约;MUX 在 FPGA 中的高昂成本;版图驱动综合”综合即产布局”的思想与 RDR 多周期通信模型。