DC杂谈

作者: 飞奔的大虎 | 来源:发表于2022-03-28 16:25 被阅读0次

对于软件DC(Design Compiler)而言,综合=翻译+优化+映射

翻译:是将RTL级描述转换成DC常用的布尔表达,优化是根据设计目标优化电路结构,映射则是选择合适的工艺库元件实现电路。

具体过程:

Step1 :将RTL级设计转成通用电路(与具体工艺无关)

Step2:优化这个通用电路。

步骤1:高级优化(有三个类型):在DesignWare(synopsys的元件库)元件这一级别上进行

(1)资源共享

首先判断代码中哪些不同行的操作符可能共享,再判断是否会导致时延特性改变,只要不恶化时延特性,则进行共享。至少能减少面积。

必须满足如下条件:

1)操作符必须位于条件语句的分支表达式里,同时这些条件分支必须互斥, 且必须位于同一个过程当中。

2)不同条件语句则无法共享,如不同的case中的语句。

3)必须存在时序约束。

一个资源共享的例子

在这幅图中,原先是四个加法器的结果进入到选择器中,输出结果。资源共享后,先经过两个选择器,把加法的两个加数挑出来,再相加,这样付出了多一个选择器 的代价,却省下了三个加法器。

注意:条件赋值语句?:中的资源无法共享。

(2)公共子表达式共享

首先分析共享可能性,然后也需要判断对时延特性的影响。需要满足下述条件:

1)公共的子表达式必须有相同的顺序,如y=a+b+c,y=a+b+d中的a+b可能共享;而如y=a+b+c,y=b+a+d却不行。

2)括号可以帮助DC工具识别公共子表达式。

3)需要时间约束。

显然,RTL代码编写会影响到资源共享和子表达式共享的过程。

(3)实现选择

决定使用什么样的结构来实现一个操作符,比如实现加法,可以是Carry-Look-Ahead结构或者Ripple-Carry结构。所以需要建立不同的电路,比较时延及面积,选择最优。所以必须要有时间约束。

步骤2:逻辑级优化(布尔级优化)

仍然使用通用元件,与具体工艺无关。

第一种过程:扁平化(Flattening)

利用布尔运算法则,将设计中的中间变量和结构转换掉。

第二种过程:结构化(Structuring)

给设计添加中间变量和逻辑结构。结构化中,综合工具会寻找可分解出来的子块,分析这些子块能否减少逻辑,并将其转换成中间变量。

用t0=b+c来进行结构化优化

注意:对于本身就有很强结构性的设计,如加法器、乘法器等,使用结构化效果较好;对于一些随机性的设计,如指令译码,扁平化优化可以改善设计性能。

左图结构化,右图扁平化

逻辑级优化主要是针对表达式的结构,这主要是综合工具的工作,RTL代码编写影响不大

步骤3:门级优化(映射)

用目标工艺库的单元替换前面的通用电路,迭代替换,获取最佳效果。

原文链接:https://zhuanlan.zhihu.com/p/147742928

相关文章

网友评论

    本文标题:DC杂谈

    本文链接:https://www.haomeiwen.com/subject/kdvpjrtx.html