这几天在做64*64的乘法器,综合的结果很不理想。所以就开始查关于时序与面积优化的资料,今天逛知乎的时候看到一篇文章,消化之后,特来分享。
首先看下面的表达式(=代表阻塞赋值,<=代表非阻塞赋值)a,b,c,d,e,f均为位宽相同的数:
out1=b+c+d+e+f;
out2=a+c+d+e+f;
out3=a+b+d+e+f;
out4=a+b+c+e+f;
out5=a+b+c+d+f;
如果这样编码的话,综合的时候这5个式子是并行执行,且有4级数加法,这样面积和时序都没有优化。下面请看优化版本1:
sum=a+b+c+d+e+f;
out1<=sum-a;
out2<=sum-b;
out3<=sum-c;
out4<=sum-d;
out5<=sum-e其中sum被复用了5次 ,这样可以节省面积,但是路径变长了,需要6级加法,这样的优化方法着重体现在面积优化上。下面请看优化版本2:
sum0 = a+b;
sum1 = c+d;
sum2 = e+f;
out1 <= b+sum1+sum2;
out2 <= a+sum1+sum2;