学习书籍《数字IC设计-方法、技巧与实践》笔记
对于软件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)
给设计添加中间变量和逻辑结构。结构化中,综合工具会寻找可分解出来的子块,分析这些子块能否减少逻辑,并将其转换成中间变量。
注意:对于本身就有很强结构性的设计,如加法器、乘法器等,使用结构化效果较好;对于一些随机性的设计,如指令译码,扁平化优化可以改善设计性能。
逻辑级优化主要是针对表达式的结构,这主要是综合工具的工作,RTL代码编写影响不大
步骤3:门级优化(映射)
用目标工艺库的单元替换前面的通用电路,迭代替换,获取最佳效果。
文章评论(0条评论)
登录后参与讨论