5使用主存中的设计
Design Compiler从设计文件中将设计读入到主存中。多个设计可以同时驻存于主存中。在设计读入后,你可以以多种方式来改变它,譬如对其自设计进行分组和解除分组或者改变子设计的引用。
本章包含了一下部分:
设计的术语
读取设计
列出主存中的设计
设置当前设计
连接设计
列出设计对象
指定设计对象
创建设计
复制设计
重命名设计
改变设计层次
编辑设计
不同工艺库间设计的转换
从主存中移除设计
保存设计
使用属性
设计术语
不同的公司会对他们自己的设计和组件有不同的术语。本节描述了Synopsys综合工具使用的术语。
关于设计
设计是执行逻辑功能的电路描述。设计可以使用多种设计格式,譬如VHDL或者verilog HDL。
逻辑级设计表现为布尔方程组。门级设计,譬如网表,表现为互相连接的单元。
设计可以单独的存在和单独的编译,或者它们可以被用作更大的设计的子设计。设计可以是打平的或者是层次化的。
打平的设计
打平的设计时指没有子设计只有一个结构层次。它们子包含库单元。
层次化设计
层次化设计会包含一个或多个设计作为子设计。每个子设计可以进一步包含自身的子设计,来创建多层的设计层次。包含子设计的设计被称为父设计。
设计对象
图5-1 显示了名为TOP的设计的设计对象。Synopsys命令,属性和约束都指向特定的设计对象。
图5-1 设计对象
设计
一个设计由实例,线,端口和引脚组成。它可以包含子设计和库单元。在图5-1中,TOP,ENCODER和REGFILE都是设计。激活的设计(处于工作状态的设计)被称为当前设计。大部分命令都是作用于当前设计的,也就是说,它们是在当前设计的上下文中国运行。
引用
一个引用是指一个库部件或者可以用于构建一个更大的电路的设计。一个引用的结构可以是简单的逻辑门或是一个更复杂的设计(一个RAM核或者CPU)。一个设计可以对一个引用进行多次使用;每次使用都是一个实例。
引用可以使你在不影响其他设计中的单元的前提下,对单个设计的每个单元(譬如NAND门)进行优化。一个设计中的引用和其他设计中的相同的引用是独立的。在图5-1中,INV,ENCODER和REGFILE都是引用。
实例和单元
一个实例是载入到主存的引用电路的一次使用;每一个实例都有一个单独的名字。一个设计可以包含多个实例;每个指向同一个引用的实例都有不同的名字以便互相区分。一个实例也可以被称为单元。
一个设计在另一个设计中的实例称为层次化实例。一个设计中库单元的实例称为leaf cell。一些命令工作在当前设计的层次化实例上下文中。当前实例为特定实例命令定义了激活的实例。在图5-1中,U1,U2,U3和U4都是实例。
Ports(端口)
端口是设计的输入和输出。端口方向只能被指定为输入,输出或者inout。
Pins(引脚)
引脚是设计中单元的输入和输出。子设计的端口便是父设计的pins。
Nets
Nets是连接端口和引脚和引脚互联的线。
设计,实例和引用之间的关系
图5-2 显示了设计,实例和引用之间的关系。
图5-2 实例和引用
EXREF设计办了两个引用:NAND2和MULTIPLIER。NAND2被例化了三次,MULTIPLIER被例化了一次。
NAND2的三个实例的名字为U1,U2,和U3。在EXREF设计中NAND2和MULTIPLIER的引用和其他设计中的相同的引用是相互独立的。
关于解析引用的信息,请参考“连接设计”。
报告引用
你可以用report_reference命令来报告关于当前实例或当前设计中所有引用的信息。使用-hierarchy选项来显示在当前实例或当前设计的夸层次信息。
使用引用对象
当你使用get_references名时,Design Compiler返回有特定引用的实例的集合,并对这些实例进行操作。
举个例子,下面的命令返回当前设计的有引用AN2实例的集合:
使用以下命令来查看引用名:
读取设计
Design Compiler可以以表5-1中列出的格式读取设计。
表5-1 支持的输入格式
读取设计文件的命令
Design Compiler提供下面的方式来读取设计文件:
analyze和elaborate命令
read_file命令
使用analyze和elaborate命令
analyze命令会进行以下操作:
读取HDL源文件
检查错误(单不会为设计建立generic 逻辑)
以HDL无关的中间格式创建HDL库对象
在你指定的位置存储中间文件
如果analyze报告了错误,需要在HDL源文件中修改这些错误并且再一次运行analyze。
按照如下的方式使用analyze命令的选项:
表5-2 使用analyze命令选项
elaborate命令会进行以下操作:
将设计从analysis过程中产生中间文件翻译成工艺无关的设计(GTECH)
允许源代码定义的参数值的改变
允许VHDL结构的选择
将代码中HDL算数操作符替换为DesignWare部件
自动执行link命令,用于解析设计引用
按以下的方式使用elaborate命令的选项:
表5-3 使用elaborate命令选项
更多关于analyze和elaborate命令的信息,请参考man pages和HDL Compiler for Verilog User Guide 或者HDL Compiler for VHDL User Guide。
使用read_file命令
read_file命令会进行以下操作:
读取几种不同的格式
执行与analyze和elaborate命令相同的操作
为VHDL创建.mr和.st中间文件
不会自动执行link命令(参考“连接设计”)
不会为Verilog创建任何中间文件(但是,你可以通过将hdlin_auto_save_templates变量设置true来让read_fil命令创建中间文件)
对于主存中的设计,Design Compiler使用path_name/design.ddc的命名规则。其中path_name是读取初始文件的目录,design是设计的名字。如果你稍后要读取有相同文件名的设计,Design Compiler会覆盖之前的设计。为了防止这种情况发生使用read_file命令的-single_file选项。
如果你不指定设计的格式,read_file命令会基于文件的拓展名来推断格式。如果使用了未知的拓展名,工具会假设是.ddc格式。支持自动推断的拓展名是不去人大小写的。read_file命令允许读取除.ddc格式外的压缩文件,ddc格式在内部写入时就被压缩了。为了能让工具为压缩文件自动推断文件格式,使用下面的命名结构:..gz。
支持下面的格式:
ddc格式:使用.ddc拓展名
db格式:使用.db,.sldc,.sdc,.db.gz,sldb.gz和.sdb.gz拓展名
Verilog格式:使用.v,.verilog,.v.gz和.verilog.gz拓展名
SystemVerilog:使用.sv,.sverilog,.svn.gz和.sverilog.gz拓展名
VHDL:使用.vhdl,.vhdl,vhd.gz和.vhdl.gz拓展名
表5-4 使用read_file命令选项
表5-5 总结了使用read_file命令和使用analyze加elaborate命令来读取设计文件的不同之处
图5-5 read_file对比analyze和elaborate命令
读取HDL设计
使用下面任一种方式来读取HDL设计文件:
analyze和elaborate命令
为了使用这种方法,一由下而上的顺序analyze顶层设计和所有子设计,然后以自顶向下的方式elaborate顶层设计和那些需要为参数赋值或重写的子设计。
例如,输入
read_file命令
例如,输入
read_verilog或者read_vhdl命令
例如,输入
你也可以使用read_file –format VHDL和read_file –format verilog命令。
读取.ddc文件
使用read_ddc命令或者read_file -format ddc命令来读取.ddc 文件的设计数据。例如,
注意:
.ddc文件时向后兼容(你可以打开更早版本软件生成的ddc文件)的而非向前兼容的(你无法打开更新版本软件生成的ddc文件)。
读取.db文件
虽然你可以使用.db格式,但是还是建议使用.ddc格式。为了读取.db文件。使用read_db命令或者read_file –format db命令。
例如,
.db文件的版本就是创建该文件的Design Compiler的版本。对于一个将要被读入到Design Compiler的.db文件。器版本必须不晚于你所使用的Design Compiler的版本。如果你试图读取一个有晚于你使用Design Compiler版本的Design Compiler生成.db文件,会出现error信息。Error信息提供了版本不匹配的细节。
列出主存中的设计
使用list_designs命令可以列出载入到内存中的设计的名字。
设计A后的星号(*)表示A是当前设计。
使用-show_file选项可以列出与每个设计名相对应的主存文件名。
设计A后的星号(*)表示A是当前设计。文件B.ddc包含了设计B和设计C
设置当前设计
你可以通过下面的方式来设置当前设