RTL 级时序和面积优化(1)

  这几天在做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;

out3 <= sum0+d+sum2;

out4 <= sum0+c+sum2;

out5 <= sum0+sum1+f;

sum0,sum1,sum2倍复用,减少了一定的面积,同时需要4级加法,相比优化版本1.时序上也得到了改善,该优化方法算是面积和时序的较好权衡。

 最终要选则怎样的优化方式,还是取决于你设计的要求,到底是偏重时序还是偏重面积。硬件设计跟软件设计最大的区别,就在于硬件设计你可以决定采用多少硬件资源,面积是不固定的,时钟也是可以调整的。这就决定了硬件设计的巨大灵活性。



你可能感兴趣的:(verilog)