design compiler——DC

来源:互联网 发布:花泽香菜 知乎 编辑:程序博客网 时间:2024/06/05 00:49

Library

1、technology lib

由代工厂提供,不同代工厂、不同工艺制程而不同,涵盖设计规则约束、运行环境设置、线载模型等等。

需要以*.db的格式读入dc。(但有时提供的事源代码形式的,可以使用dc将骑转化为db格式)

2、target lib:*.db

dc优化过程中,被映射到的tech lib称为target lib。即这部分包含内容是生成网表过程中用到的cells。该部分信息dc保存在local_link_library 属性中。

应该只包括映射设计的标准库单元,不应该包括DW lib和pad、memory等类似宏库,是link_library的子库。

设置方式:set target_library {“your_library.db”}

3、link lib:*.db

指的是用来实现cell引用的被映射到的tech lib。eg:在RTL源代码中,直接调用库单元,使用的就是link lib。

包含:local_link_library和link_library(即系统link lib);

link_library查找按从左往右的方式查询,一旦查到满足要求的将不在继续

位于link_library设置list最左侧的的tech lib作为主库,维护一些默认值和设置(设计规则约束、运行环境设置、线载模型等);

因此,在RTL源码中的link lib cell可以直接用来及时timing、delay以及power。

设置方式:

(1)set link_library {“*”, “your_library.db”}//“*”:dc根据reference查找memory

(2)local_link_library:是一些设计文件或库,在设置link_library时,它的内容会放在变量link_library的所设置list的最左侧;

(3)search_path:refernce在link_library中没中没有找到时,将按该设置的目录路径进行查找

注:

tech & link lib可以包含RTL形式的源码文件;

target &link lib其实都是tech lib的一部分;

通过指定target&link lib来实现的指定tech lib,即不用单独指定tech lib

4、symbol lib:*.sdb

同样由代工厂提供。该库实现图形化界面时的映射。

set symbol_library {“your_library.sdb”}

5、DesignWare lib:*.sldb

集成在dc工具中的,主要一些通用的、常用的结构的库单元,eg:加、减、乘、除等。

可以使用DesignWare Developer工具自己制作DW lib。

默认情况下,不需要指定,工具会自动加载,但当使用到额外的DW lib时,设置方式如下:

set synthetic_library {}

6、logic lib

7、ALB lib


Design

1、design:

reference:

report_reference:

get_references:后跟ref name,打印出当前设计下,所以使用到ref name的instances或cell

instance/cell:

pin:

port:

net:

2、leaf cell:lib cell在设计中有一个唯一的实例化;

hierarchy instances:小的设计在更大的设计中有唯一的实例化。

3、读入设计,analyze:

(1)读入HDL源代码;

(2)查语法错;

(3)根据源代码创建相互独立的中间格式的lib对象;

(4)自定义生成的lib对象的存储位置

4、elaborate:

(1)根据analyze阶段生成的中间形式的lib对象转化为独立于工艺的设计;

(2)源代码中的参数仍可以修改;

(3)DW lib替代设计中的算术操作等;

(4)自动执行link,解决references的问题。

5、read_file:

该命令是analyze和elaborate的结合体,但无法自动执行link。

link过程:根据link_library、search_library、local_link_library解决reference问题。步骤:(1)首先确定哪个库单元、子模块在当前设计的层次中;(2)在local_link_library中查找库文件、设计文件;(3)link_library定义中如果带“*”,则在内存中进行查找;(4)然后在link_library定义的内容中查找;(5)如果以上都没有发现,在根据search_path定义的目录路径进行查找;(6)将定位到的reference和设计link起来。


6、current_design


7、DC不会优化层次边界,因此可以采用ungroup命令将设计打平(即将子模块设计的cells融入到上层设计中),这在一定程度上可以改善时序。

可以在优化前或优化过程中进行打平。

可以部分打平(cell list或从某一逻辑层次开始)、全部打平、递归打平。(这些是打平操作的设置,下面是打平的动作)

优化前打平容易理解,在compile前使用ungroup命令,默认情况下,被打平层次的pin及其上的时序约束会被保留,可通过设置ungroup_preserve_constraints进行更改

优化过程中打平:有显示和自动两种方法。显示:方法一、在compile命令前使用set_ungroup命令,方法二、在compile命令加上命令选项-ungroup_all。被打平层次pins上的时序约束不保留,通过auto_ungroup_preserve_constraints可进行设置;自动:使用compile_ultra命令(本质上是为了时序优化,同时也追求面积和时序的平衡)或compile命令加上命令选项-auto_ungroup。这种方法下,不会打平层次边界,可以通设置auto_ungroup_preserve_constraints来设置是否打平层次边界和时序约束

注:

部分打平:若想将不同子模块设计merge一起,操作方法:首先将两个子模块设计group为一个新的设计,然后在对新的设计进行ungroup

8、在导出网表时需注意导出网表net、port等的命名同后端工具命名规范一致。相关命令有:define_name_rulesand change_names,变量default_name_rule等。

解决命名不一致问题流程:

(1)读入RTL源代码,运行约束文件;

(2)编译,产生网表文件;

(3)在执行change_names;

(4)导出网表文件

加载wire 模型

1、综合前需确定采用何种wire load model。DC使用wire模型有3种原则:一、用户指定;二、根据设计面积来选择(什么原则?);三、tech lib中默认的;三种优先级依次降低。

2、可以不指定wire 模型,但此时没有线的传播延时,所以时序信息是乐观的。

3、在模块内部和层次化边界(即模块间)可以使用不同的wire模型。其中,层次化边界选择wire模型的3种原则:一、用户指定;二、tech lib中默认的;三、DC中默认的设置方式。层次

4、规模较大、逻辑层次较多的设计,由工具按照默认方式(dc库函数wire_load_selection)自动选择线载模型,运行时间会很长,最后选择手动设置;

5、


0 0