一、逻辑综合的主要步骤

synthesis = translation + logic optimization + gate mapping

DC工作流程主要分为这三步

Translation :主要把描述RTL级的HDL语言,在约束下转换成DC内部的统一用门级描述的电路(Generic Boolean Gates)(DC自己的库表现),以GTECH或者没有映射的ddc形式展现。也就是说此阶段没有用到工艺库。

Logic optimization :就是把统一用门级描述的电路进行优化,就是把路径调整一下,门给改一下等等。

Gate mapping :门级映射,把优化了的统一门级描述,DC用工艺厂商的工艺库把电路给映射出来,得到一个.ddc文件。这个.ddc文件可以包含许多丰富的信息,比如映射的门电路信息网表.v格式的网表延时信息(sdf)工作约束(sdc)等信息。(.ddc不能用文本编辑器打开)。.ddc这个包含的网表文件是实际意义的网表文件,而.v这个形式的网表文件是用来做后仿真的文件。

二、逻辑综合的具体步骤

1、在Linux下,启动DC。打开命令行,输入 dc_shell –gui

2、设置库文件。

点击File - Setup

Design Compiler 链接库下载_库文件

设置

(1)Search path :当在Link Library中无法找到某些模块时,DC会在Search Path下的库中自动找对应的模块。比如Synopsis的DesignWare中的库就缺省包含在了Search Path下,这也就是为什么一般不需要手动设置Synthetic Library的原因。在Verilog源文件中,如果找不到include的文件,也会在Search Path下寻找。

(2)Link library 和 Target library :Link library 和 target library 统称为 technology library(即工艺库,习惯称之为综合库),technology library 由半导体制造商提供,包含相关 cell 的信息及设计约束标准,后缀一般为".db",其中:

 Target library: 在门级优化及映射的时候提供生成网表的 cell,即DC 用于创建实际电路的库。

 Link library: 提供设计网表中的 cell,可以跟target_library使用同一个库,但是 DC 不用 link library中的 cell 来综合设计。

当 DC 读入设计时,它自动读入由 link library 变量指定的库。当连接设计时,DC 先搜寻其内存中已经有的库,然后在搜寻由 link library 指定的库。

注:当读入的文件是门级网表时,需要把 link library 指向生成该门级网表的库文件,否则 DC 因不知道网表中门单元电路的功能而报错。 

(3)Symbol library :Symbol library 提供 Design Vision GUI 中设计实现的图形符号,如果你使用脚本模式而不使用 GUI,此库可不指定 Symbol library

(4)Synthetic library :即为 Designware library ,名字上翻译是综合库,但却常称之为IP库,而不是直译。特殊的 Designware library 是需要授权的(比如使用多级流水线的乘法器),默认的标准 Designware 由 DC 软件商提供,无需指定。

Design Compiler 链接库下载_库文件_02

 

3、读入verilog RTL文件

点击 File - Read 选择自己的verilog文件

Design Compiler 链接库下载_shell命令_03

 

4、Check Design 检查设计

点击 Design - Check Design 

Design Compiler 链接库下载_库文件_04

5、在下方dc shell命令行输入set_max_area 0(按最小的面积综合)

Design Compiler 链接库下载_库文件_05

6、在下方dc shell命令行输入compile –map_effort medium –area_effort medium(为优化面积而做出的努力程度)

Design Compiler 链接库下载_库文件_06

7、在下方dc shell命令行输入report_cell

Design Compiler 链接库下载_逻辑综合_07

8、查看综合后的电路面积

Design Compiler 链接库下载_库文件_08

面积为3468.54719

Design Compiler 链接库下载_逻辑综合_09

,这个面积是电路中的门级器件的面积,不包括内部金属线的面积,根据经验,最终的电路面积 ≈ 此面积/0.7。

 

因为我们实验室不需要自己做后仿真,所以跑DC的唯一目的就是看面积,我暂时也没搞清楚为什么不需要设置时钟约束,环境约束等。