Multiplier Optimization(乘法器优化)—— DC_SHELL 如何极致提升乘法器性能?

目录

1. 为什么乘法器优化至关重要?

2. 乘法器底层实现技术体系

3. DC_SHELL 乘法器优化流程

📌 3.1 Expression Recognition(表达式识别)

📌 3.2 Booth Encoding 自动应用

📌 3.3 Partial Product Accumulation(部分积压缩)

📌 3.4 Partial Product Sharing(部分积共享)

📌 3.5 Operator Strength Reduction(运算强度降低)

📌 3.6 Constant Multiplication Optimization(常数乘法器特化)

4. 小冷知识爆料

📢 总结


1. 为什么乘法器优化至关重要?

  • 在 datapath 中,乘法器 (Multiplier) 是最贵、最慢、最烧资源的运算单元。

  • 它决定了综合后的:

    • 时序性能 (Frequency)

    • 面积占用 (Area)

    • 功耗 (Power)

如果乘法器实现不好,整个 datapath 优化就是空谈。

所以 DC_SHELL 的 datapath 引擎里有专门的 "Multiplier Optimization" pipeline。


2. 乘法器底层实现技术体系


技术主要优化目的
Booth Encoding(布斯编码)降低部分积数量,加速乘法
Wallace Tree(华莱士树)减少加法器层级,提高压缩速率
Dadda Tree(达达树)面积更小,速度略慢于 Wallace
Partial Product Sharing(部分积共享)多乘法器共享中间结果,省面积
Operator Strength Reduction(运算强度降低)把乘法降级成移位加法
Constant Multiplication Optimization(常数乘法优化)乘以常数特化成位移+加法

3. DC_SHELL 乘法器优化流程

详细底层步骤:


📌 3.1 Expression Recognition(表达式识别)

  • 找出 RTL中所有的乘法表达式。

  • 判断操作数是否有常数?操作数位宽大小?

  • 判断是否可以和周围其他乘法合并?


📌 3.2 Booth Encoding 自动应用

如果是普通乘法(两边都是 variable):

DC 自动使用 Booth Encoding

比如传统乘法:

X * Y

要生成 n 个部分积 (partial products)。

用 Booth Encoding:

  • 每2位一组,产生更少的部分积。

  • 减少大约 50% 的加法运算。

DC 自动选择:

  • Radix-4 Booth

  • 或更激进的 Radix-8 Booth(更高效但电路更复杂)


📌 3.3 Partial Product Accumulation(部分积压缩)

  • 传统方法:串行累加,慢且多。

  • 优化方法:

    • Wallace Tree:最早把多位加法并行组织成树形结构,大幅降低加法器延迟。

    • Dadda Tree:比 Wallace 少一点加法器,面积更小,但速度稍慢。

DC通常策略是:

  • Timing critical path 上用 Wallace Tree。

  • 非critical path 上用 Dadda Tree节省面积。

内部机制:

  • CSA (Carry Save Adder) 技术——在压缩阶段暂时不算进位,加速加法。


📌 3.4 Partial Product Sharing(部分积共享)

如果同一个操作数参与多个乘法:

always @(posedge clk) begin
  out1 <= A * B;
  out2 <= A * C;
end

DC内部可以识别到:

  • A是公共输入。

  • 生成A的partial product只要做一次。

  • 共享给两个乘法器。

结果:

  • 减少面积

  • 加快时序

  • 降低功耗


📌 3.5 Operator Strength Reduction(运算强度降低)

如果检测到:

  • 某个乘数是2的幂(或接近2的幂)

  • 或者小常数

DC会自动把乘法替换成移位+加法,比如:

y = x * 5;

转化成:

y = (x << 2) + x;

比真正乘法器快几倍,面积少很多!


📌 3.6 Constant Multiplication Optimization(常数乘法器特化)

如果乘以的是常数,特别是大规模定点信号处理中:

  • DC 使用adder graph算法

  • 最少数量的加法器和移位器

  • 无需完整乘法器

应用场景:

  • FIR滤波器

  • 图像处理(DCT,卷积)


4. 小冷知识爆料

  • 乘法器 mapping阶段,DC优先考虑目标工艺库里是否有专门的 Multiplier Hard Macro。

  • 如果 FPGA target,DC会尝试 map到 DSP slice(比如 Xilinx的DSP48 block)。

  • 高位宽乘法(>64x64)时,DC默认拆分成多个小乘法+部分积拼接。

  • Booth Encoding在符号位处理上有很多corner case,DC内部用了超复杂逻辑保证符号位对齐。


📢 总结:

乘法器优化是 datapath 最核心的一环,DC用了一套 Booth压缩+Wallace树/达达树+共享重用的体系,动态在面积、时序、功耗三者之间寻找极致平衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三贝勒文子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值