原创 DC是怎样综合RTL级设计的?

2020-6-12 10:24 4074 16 3 分类: FPGA/CPLD 文集: 技术学习
学习书籍《数字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条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
16
关闭 站长推荐上一条 /5 下一条