目录
1、问题背景
在某次电路设计时我需要实现这样的功能:
assign out = (sel ==0) ? c +d : a+ b +d;
因为上述的操作数a/b/c/d都是64bit位宽数据,电路设计时存在串行的两个64bit加法器,最终导致时序无法满足需求(1GHz时钟),经过分析后利用CSA解决了这个问题。
CSA(carry save adder)的原理是在多个数据相加时可以将进位保留下来,只做一次进位传递(具体的CSA细节不在此赘述)。
2、存在问题的电路
存在问题的RTL代码如下:
上述代码对应的电路对应下面的图,关键路径用红线画了出来:
可以看到红线穿过了2个64bit加法器,导致延迟过大(无法在