欢迎光临
我们一直在努力

芯片开发学习笔记·十三——面积优化

芯片设计在逻辑设计阶段(通常指从RTL编写到逻辑综合生成门级网表的过程)可以采取的面积优化手段。

这个阶段的优化主要作用于代码风格、微架构以及逻辑结构层面。与后端物理实现相比,逻辑设计阶段的优化往往能带来数量级的面积节省,因为它是从功能实现的根本方式上入手。

以下是逻辑设计阶段主流的面积优化手段详解:

1. RTL代码风格优化

这是成本最低、见效最快的优化手段。不同的代码描述方式,综合出的电路结构可能天差地别。

 资源共享

    – 原理:避免在代码中实例化多个功能相同的运算单元(如加法器、乘法器)。通过多路选择器(MUX)让多个操作数分时共享同一个运算单元。     – 举例:如果两个不同的算术运算在逻辑上永远不会同时发生,可以使用一个ALU(算术逻辑单元)加控制逻辑来代替两个独立的ALU。     – 效果:显著减少算术单元的实例数量,尤其对乘法器、除法器等面积大户效果明显。

 状态机优化

    – 独热码 vs. 二进制编码:在FPGA设计中,由于寄存器资源丰富,独热码(One-Hot)可以减少译码逻辑,但对面积不一定友好。在ASIC中,对于状态数较多的状态机,采用二进制编码或格雷码能显著减少触发器的使用数量。     – 状态化简:去除状态图中的冗余或等价状态,直接减少状态寄存器的位数。

避免不必要的锁存器

    – 原理:在组合逻辑进程中,如果条件分支覆盖不完整,综合工具会推断出锁存器(Latch)。锁存器虽然本身面积可能略小于触发器,但它们会引入复杂的时序问题和额外的毛刺过滤逻辑,通常应尽量避免。     – 操作:确保所有的 `if` 和 `case` 语句都有完整的 `else` 分支或默认赋值。

逻辑结构优化

     – 原理:利用卡诺图或真值表简化逻辑等式,减少信号的重复调用。

2. 微架构选择与优化

在确定了算法之后,如何用硬件电路来实现该算法(即微架构)对面积有决定性影响。

串行化架构

    – 原理:这是面积与吞吐率的经典权衡。将原本并行执行的多个处理单元,改为单个处理单元分时复用。     – 举例:在图像处理中,如果需要计算 8×8 像素块的和,可以做一个加法器连续累加64次,而不是做64个加法器并联。     – 效果:面积可能缩小数倍甚至数十倍,代价是处理延迟增加、吞吐率下降。

资源共享

    – 针对存储器:对于大的SRAM,考虑是否能拆分成多个小的Bank,只在需要时激活特定的Bank,虽然总存储位宽可能增加,但可以避免使用一个极大的高密度单块RAM(有时大RAM的面积效率低于小RAM的组合)。FPGA上有BRAM资源,可以调用RAM资源来替代寄存器搭建的memory。     – 针对数据路径:如果多个模块需要访问不同的数据子集,通过合理的地址解码和数据分发,可以共用同一组数据总线。

3. 数据位宽的精准裁剪

这是逻辑设计中最容易被忽视但又极其有效的手段。

– 原理:很多设计初期为了安全起见,会预留很大的位宽(如32位)。但在实际数据流分析中,某些中间变量的有效位宽可能远小于32位。 – 操作:通过静态代码分析或仿真,确定变量永远不会用到的最高有效位(MSB),将其移除,并相应地优化所有与之相连的运算单元。 – 效果:位宽的缩减会直接减少寄存器数量和运算单元(加法器、乘法器)的晶体管数量。例如,将一个16位乘法器改为8位,面积可以减少约75%(因为乘法器面积与位宽的平方成正比)。

4. 逻辑综合阶段的约束与优化

这一步是将RTL代码交给EDA工具进行逻辑推导和门级映射,工具的配置策略至关重要。

设置合理的面积约束

    – 原理:在综合脚本中,除了时序约束,必须设置 `set_max_area 0` 或类似的强面积约束。这指示工具在满足时序要求的前提下,尽可能地优化面积。     – 操作:通常设为0,意味着“越小越好”,让工具尽力压缩。

逻辑结构优化指令

    – 结构级优化:允许工具改变RTL中隐含的加法器树或乘法器树的拓扑结构。例如,将多个加法器组成的链式结构重新平衡为树形结构,以减少关键路径上的逻辑级数,有时也能通过逻辑共享减少总面积。     – 布尔优化:启用工具的“布尔优化”选项。工具会分析真值表,进行逻辑恒等式化简。例如,将 `(A & B) \\| (A & !B)` 自动优化为 `A`。

消除不必要的层次结构

    – 原理:设计中如果模块划分过细(Flatten不够),可能会阻碍工具跨模块边界进行优化。     – 操作:在综合时,对顶层的子模块执行 `ungroup` 或 `flatten` 操作,让工具能看到跨越原始模块边界的逻辑,从而有机会合并冗余逻辑。

技术映射优化

    – 选择最佳单元:工具在将布尔函数映射到具体工艺库单元时,会从库中选择驱动强度最小、面积最小的单元,只要它能满足扇出和时序要求。     – 多阈值电压利用:虽然主要用于漏电功耗优化,但通常低阈值(Low Vt)单元速度快但漏电大,高阈值(High Vt)单元速度慢但漏电小且面积有时略有不同。综合工具可以在非关键路径上自动使用面积更优的高阈值单元。

        这些手段通常需要结合使用:先通过良好的代码风格和微架构设计(如串行化)奠定面积优化的基础,然后通过精细的综合约束和位宽裁剪来榨干最后一寸面积。

赞(0)
未经允许不得转载:171主机测评 » 芯片开发学习笔记·十三——面积优化
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址