-
Design
Compiler
使用简要说明
综合过程
Design
Compiler
可以针对层次化的组合电路或者时序电路的速度、面积和
可布
性进行优化。
按照所定义的电路的测量特征所要达到的目标
,
Design
Compiler
综
合
一个电路并将其放入目标库中,
这样可以生成适用于你的计算
机辅助设计工程
(
CAE
)
工具的原理图或网表。
综合的过程如下图:
?
读入设计及其子设计。
?
设置顶层的设计特性参数
?
设置实际时序和面积目标参数
?
执行
ch
eck_design
验证设计,识别并且更正错误
?
进行
Design
Compiler
优化
练习介绍
在
db
、
verilog
、
vhdl
文件夹下设计内容都是一样的,只是形式
不一样。
Db
文件夹:
ALARM_
ALARM_
ALARM_
ALARM_STATE_
HOURS_
TIME_
TIME_
TIME_STATE_
CONVERTOR_
Verilog
文件夹:
ALARM_BLOCK.v
ALARM_COUNTER.v
ALARM_SM.v
ALARM_STATE_MACHINE.v
COMPARATOR.v
HOURS_FILTER.v
MUX.v
TIME_BLOCK.v
TIME_COUNTER.v
TIME_STATE_MACHINE.v
CONVERTOR_CKT.v
TOP.v
Vhdl
文件夹:
ALARM_
ALARM_
ALARM_
ALARM_STATE_
HOURS_
TIME_
TIME_
TIME_STATE_
CONVERTOR_
设置
path
参数
将
Synopsys_installroot/arch/
syn/bin
加到
.cshrc
文件
中。
设置
Setup
文件
.synopsys_
的读取顺序:
在启动时,
Design
Compi
ler
将搜索三个
Setup
文件,<
/p>
这三个文件都为
.synopsys_.
从这个文件中,软件工具读取初始化的信息,如使用那些库和如何定制你的图形环境等。
尽管他们的名字相同,但是他们在不同的目录下。
1
p>
.
Synopsys
的根目录;
2
.用户目录
3
.启动
Design_Compiler<
/p>
的当前目录
Tutorial
——闹钟的设计
TOP
TOP
是闹钟设计的最上层的模块,
包
括了对所有子模块的调用,
而这些子模块都执行着闹钟
设计的一
个单独的功能。
ALARM_BLOCK
ALARM_BLOCK
是分级模块的第二级,它控制闹钟的设定。它有
ALARM_BLOCK
有四个输入信
号:
? ALARM 用来和
HRS
或
p>
MINS
来设定闹铃时间
? CLK 是系统时钟
?
HRS用来和
ALARM
来设定闹铃时间
?
MINS用来和
ALARM
来设定闹铃时间
ALARM_BLOCK
有两个输出信号为:闹铃的小时和分
钟。输出信号输出到
MUX
和
COMP
ARATOR
模块。
ALARM_BLOCK
实例化了两个子设计:
?
ALARM_COUNTER 增加闹钟小时和分钟,并反映
AM
和
PM
设定。
?
ALARM_STATE_MACHINE
设置闹钟时间。它有三个状态,如
Figure 6-3.
TIME_BLOCK
TIME_BLOCK
类似于
ALARM_BLOCK
,只不过它是控制时
间。它是分级模块中的第二级模块,
有四个输入:
? SET_TIME 与
HRS or MINS
设置时间
? CLK
式系统时间
? HRS
与
SET_TIME
设置小时
? MINS 与
SET_TIME
设置分钟
小时和分钟是
TIME_BLOCK
两个输出信号,他们输出到
MUX
和
C
OMPARATOR
模块。
TIME_BLOCK
实例化两个子模块。
? TIME_
COUNTER增加时间和分钟,并且反映
Am
和
PM
设置
?
TIME_STATE_MACHINE 用来设置和保存时间,状态机有
3
个状态,如
Figure 6-4.
MUX
MUX
< br>决定显示时间设置,使时间和闹铃的显示有效,它有
5
个
输入信号:
? ALARM
与
HRS
或
MINS
设置闹铃时间
?
ALARM_HRS 是从
ALARM_BLOCK
输入的闹铃
小时
? ALARM_MIN 是从
ALARM_BLOCK
输入的闹铃分钟
? TIME_HRS 是从
TIME_BLOCK
输入的闹铃小时
? TIME_MIN 是从<
/p>
TIME_BLOCK
输入的闹铃分钟
MUX
处理这些输入信号,
并将结果
输出到
CONVERTOR_CKT,
使
CONVERTOR_CKT
显示
适当的时
间和闹铃。缺省的显示是时间。当
ALARM =
1,
显示闹铃。
COMPARATOR
COMPARATOR
比较时间和闹铃,它有四个主要的输入信号:
? ALARM_HRS 是从
ALARM_BLOCK.
p>
来得小时闹铃信号
?
ALARM_MIN 是从
ALARM_BLOCK
来得分钟闹
铃信号
? TIME_HRS
p>
是从
TIME_BLOCK
来得小时信号<
/p>
? TIME_MIN 是从
TIME
_BLOCK
来得分钟信号
当闹铃和
时间以及
AM
和
PM
< br>都相等时,
COMPARATOR
发出一个信号到
ALARM_SM_2
模块。
ALARM_SM_2
ALARM_SM_2
是有两个状态的状态机:
IDLE
和
ACTIVATE,
如
Figure 6-5.
CONVERTOR_CKT
CONVERTOR_CKT
分级的模块执行一个
binary-coded-
decimal (BCD)
到
7
段
解码的功能。它
将闹铃和时间的二进制表示转化为闹铃始终数字可以显示的信号。
CONVERTOR_CKT
实例化
两个子模块:
? CONVERTOR 在
CONVERTOR_CKT
p>
设计中有两个实例。一个
CONVERTOR
实例转化将二进制表示
的小时,
另一个则转化分钟。
CONVERTOR_CKT
为一个
7
段发光二极管显示准备转化好的信息。
?
HOURS_FILTER 使十位上的
0
的显示在
10
:
00
之前和
12
:
59
后失效。
例如:
九点的显示为
< br>9
:
00
而不是
09
:
00
。
使用
Design
Analyzer
设置设计环境
启动
Design Analyzer
%design_analyzer &
读入一个分级的设计
读入
VHDL
包
1.
选择
File > Read.
出现读文件的窗口。
2.
双击
vhdl
来进到
v
hdl
目录。
3.
选择
.
4.
点击
OK.
出现
VHDL
的窗口
window
并且显示行为。
5.
当
Design Analyz
er
提示符(
design_analyzer>
)
出现
,
在
VHDL
窗口中单击
Cancel
。
读入最底层的设计模块
为了保证对所有模块的调用可以被正确的解析,我们要从设计的最底层模块开始读入,最
后读入最上层的模块。
tutorial
中最底层模块包括:
ALARM_COUNTER
ALARM_STATE_MACHINE
CONVERTOR (2)
HOURS_FILTER
TIME_COUNTER
TIME_STATE_MACHINE
使用
read
命令读入
CONVERTOR
因为它是
PLA
格式。
.
分析
VHDL
设计
使用
analyze
和
elaborate
命令来读入五个
VHDL
文件。你可以一次性分析这些文件因为他们
的格式相同,
但是你必须分别
elaborate
他们。
当你分析这些设计模块是,
Design
Compiler
将结果文件存在
WORK
目录下。
读入
VHDL
文件并且建立
vhdl
< br>中间设计文件。
分析
VHD
L
设计
1.
选择
File > Analyze.
2.
用
鼠
标
左
键
选
择
p>
设
计
模
块
。
选
择
ALARM_<
/p>
。
当
你
运
行
UNIX
下
的
p>
Design
Analyzer
来分析<
/p>
ALARM_COUNTER
。
3.
用鼠标中键选择其余的设计模块:
ALARM_STATE_
HOURS_
TIME_
TIME_STATE_
4.
点击
OK.
出现分析窗口显示分析的命令,如
Figure 7-3
,设计中间文件存在
work
库文件中。
p>
5.
点击<
/p>
Cancel
关闭分析窗口。
Elaborate
VHDL
模块
分别
< br>Elaborate
这五个
VHDL
模块。
Elaborate
命令将把设计文件的中间文件解
析成
.db
格式。
Elaborate
每个
VHDL
模块:
1.
选择
File > Elaborate.
出现
Elaborate
设计窗口,如
Figure 7-4
。
2.
选择
Library
中的
WORK.
3.
选择
Re-Analyze Out-Of-Date
Libraries
4.
选择
Design list
中
ALARM_COUNTER(BEHAVIOR).
5.
点击
OK.
在
Design Analyzer
窗口中,出现
ALARM_COUNTER
的
elaborated
后的图标。
6.
重复上述
elaborat
ion
过程(从第
1
步开始)
ALARM_STATE_MACHINE (BEHAVIOR)
HOURS_FILTER (BEHAVIOR)
TIME_COUNTER (BEHAVIOR)
TIME_STATE_MACHINE (BEHAVIOR)
7.
点击
Cancel
关闭
Elaborate
窗口。
Designs
view
可以显示这些设计的图标
读入
PLA
设计
使用
R
ead
命令来读入不是
VHDL
和
p>
Verilog
格式的文件。
设计是
PLA
格式的
读
入
CONVERTOR
模块
1.
选择
File > Read.
2.
选择
.db
目录
db
目录有
Synopsys
.db
格式的文件
3.
点击
OK.
读文件的窗口出现并先是
db
目录中的设计文件。如
Figur
e 7-7
。
4.
点击滚动条,可以看到其他的文件。
读文件窗口列出了所有目录下的文件,但是只有
.snopsys_
中
view_read_file_suffix
设定的后
缀的文件可以显示出来。
5.
选择
.
如
Figure 7-9
6.
选择
Setup >
Command Window.
7.
点击
读入文件窗口中的
OK
。
Design
Analyzer
读入文件并关闭读入文件窗口。
Design Analyzer
显示用其它的图标来表示第
三层的设计——
CONVERTOR
如
Figure 7-11
。
8.
最小化命令窗口
读入第二级设计
第二级包括:
ALARM_BLOCK
ALARM_SM_2
COMPARATOR
CONVERTOR_CKT
TIME_BLOCK
MUX
象读
入最底层设计一样
analyze
和
e
laborate
上面的第二层设计
读入最上层设计
Analyze
和
当你读入了
TOP
< br>模块后,全部的闹钟的设计的分级的层次结构都已经读入,并且显示在
Desig
ns View
中有
13
个图标,如<
/p>
Figure 7-16.
用
Design
Analyzer
设置特征参数:
在
读入设计后,要说明设计的环境变量,这些环境变量包括了当信号到达端口
(port)
时,
他们的的驱动能力,或者输出端口的负载能力。
本节就是描述如何来设置闹钟设计的这些参数。
为
TOP
模
块设置参数
设置参数时可以使用
Symbol
view
。
1.
选择
TOP.
2.
单击向下的箭头。
3.
点击
Symbol View
按钮。
设置输入端口的驱动能力
假设除了<
/p>
CLK
的所有输入端口的驱动能力为
0.
08(
单位由目标库决定
)
。
你可以同时选定并设
定所有的要设定的输入端口。
1
.使用鼠标左键来选择输入端口
ALARM
;
2
.使用中间选择其他的除了
CLK
之外的所有的输入端口,
见
Figure 7-17
。
设置驱动能力
1.
选择
Attributes > Operating
Environment >
Drive Strength
显示
Drive
Strength
窗
口,如
Figure
7-18
。
当你选择了一个端口时,在
Port
Name
区域里会显示这个端口的名字,如果你选择了不知一<
/p>
个端口时,这个区域就会是空白的,而你在这个窗口输入的值将应用为所有选定的端口。<
/p>
2.
在
Rise
Strength
处键入
0.08
,而
Fall
Strength
将自动会被设为
< br>0.08
,因为“Same
Rise
and Fall”这个选项缺省的情况下是选定的。
3.
单击
Apply
。
你可以将端口的驱动的
值设为与库中单元的输出引脚的驱动能力的值相同。当你不知道在
库中你所需要地引脚的
驱动值时,
你可以使用
drive_of
命令来找出并且设置这个值。
假设
CLK
的驱动值要设为与
buffer
单元
< br>B4I
的
Z
引脚的驱动能力相同
。
注意:
:
在例子中,
我们用
set_drive
来设定驱动能力,
然而
set_driving_cell
比<
/p>
set_drive
有更高
的优先级。<
/p>
set_driving_cell
命令将一个输入引脚和一个驱
动单元相关联,而不是与一个
具体的驱动的值相关联。
设置
CLK
的驱动能力
在这里,我们要将
CLK
的驱动能力设为与
B4I
的
Z
引脚的驱动能力相同。
1.
在
Symbol view
p>
下,选择
CLK
。
2.
点击
Rise
Strength
区域,按下
Ctrl-u
< br>来删掉值
0.00
。
3.
在
Rise Strength
区域中,输入
:
drive_of
(class/B4I/Z)
。
Design
Analyzer
将该命
令复制到
Fall
Strength
区域。
4.
p>
点击
Apply
。
Rise
和
fall
< br>的值
(0.0335)
出现在相应的框中,如
Figure 7-19
所示。
更改驱动能力
在设置过输入端口的驱动能力后,还可以对其进行修改。假设在本例子中,我们之前设置
的输入端口
SET_TIME
的驱动能力不对,可以按下面
的不走对其进行修改:
1.
选择<
/p>
SET_TIME
端口。
2.
把
Rise Strength
的值改写为
0.06
,
Fall Strength
的值同时被更新为
0.0
6
。
3.
点击
Apply
。
4.
点击
Cancel
来关掉
Drive
Strength
窗口。
设置输出端口的负载能力
设置
SPEAKER_OUT
的负载能力
负载能力用来对某个限定的模块的输出端口的负载的容量建模。你可以将端口的负载能力
设置位于库单元的负载值相同。
当你不清楚所需要的库单元的负载值时
,
使用
load_of
命令
来决定和设置一个负载值。假设端口
SPEAKER_OUT
驱动
5
个反向器
,
而反向器同库单元
IVA
(目标库中的一个反
向器)相同。
1.
选择
SPEAKER_OUT
端口
< br>
2.
选择
Attributes > Operating
Environment > Load
来打开
Load
窗口,如
Figure
7-20
。
3.
在
Capacitive load
中填上
load_of (class/IVA/A) * 5
,在星号
(*)
前留个空。注意引
p>
脚
A
是
IVA
p>
的输入端口。
4.
点击
Apply
,
capacit
ive load
的值自动计算出来为
7.50
。
SPEAKER_OUT
驱动能力为
5
个反向器,每个反向器的负载值为
1.5
,所以
SPEAKER_OUT
的负载值为<
/p>
1.5*5 = 7.5
。
5.
点击
Cancel
退出
Load
窗口。
设置总线的驱动能力
假设端口
DISP1
和
DI
SP2
每个的驱动能力都为
3
(标准负
载),
AM_PM_DISPLAY
的驱动能力为
2
(标准负载)。
p>
设置
DISP1
的驱动:
< br>
1.
选择
DISP1
。
2.
选择
Attributes > Operating
Environment > Load
。
< br>出现两个
Load
和
Bus
Selector
窗口,如
Figure
7-21
。
使用
Bus Selector
窗口选
择要设置参数的总线的位。在这个窗口中,所有的位都被选中。
如果只想设置一个位的负
载的话,只用选择某个位,然后在
Load
窗口中键入值即可。
在这
里,我们将整个总线设置相同的参数
3.
点击
Cancel
关闭
Bus
Selector
窗口。
4.
在
Capacitive load
域
中,键入
3
。
5.
点击
Apply
,负载值就被赋给了
DISP1
。
运用同样的过程将
3
赋给
DISP2
。
设置
AM_PM_DISPLAY<
/p>
的负载能力
1.
选择
AM_PM_DISPLAY
。
2.
在
Capacitive
load
域填入
2
。
< br>
3.
点击
Apply
。
4.
点击
p>
Load
窗口中的
Cancel
。
为最上层模块设置其他的特性
有些特
性是要为一个最上层模块设置的,但是并不是真对某个输入或输出端口。这些参数
会对设
计的优化产生一个全局的影响。这里我们要为
TOP
模块设置如
下参数:
? Wire Load
? Operating Conditions
设置
Wire Load
Design
Compiler
优化以线网的扇出为基础来从连线负载(
wire
load
)模型来估计连现长
度。
Design Compiler
使用这个信息来计算连线长度和传输延迟。
连线负载(
wire load
)模型
由估计的
die
的大小来决定。在目标库中连线负载都有定义<
/p>
如果
ASIC
的库支持的话,
Design Compiler
以面积为基础自动选择连线负载表
1.
选择
TOP
。
2.
选择
Attributes
>
Operating
Environment
>
Wire
Load
,出现
Wire
Load
窗口,如
Figure
7-22
,
3.
选择
10x10
(class)
,在库文件的定义中,
10x10
对应于的
die
的大小为
1 mm x 1 mm
。
4.
点击
OK
。
设置运行条件(
Operating
Conditions
)
运行条件就
是温度、过程、运行电压等。目标库定义了这些运行条件。库的生产厂商定一
个一个与其
他昌上不同的默认的运行条件。通用的默认的运行条件为:
?
温度
–
25
?
C
?
过程
–
1
? 电压
–
5
Design Compiler
的静态时序分析是对设
计的驱动能力,到达时间以及负载能力的变化对
电路时序特征所带来的影响建模。同样,
你能个分析一个设计的最好、中等、最坏特性或
运行条件。
设置运行条件:
1.
选择
Attributes >
Operating Environment > OperatingConditions.
Operating
Conditions
窗口如
Figure 7-23
所示
,
其间列出了目标库中的运行条件。每一个
运行条件的后面都有括号包括着目标库的名字。
2.
选择
WCCOM
(class)
p>
,在这里,我们假设运行条件为最差的情况
(WCCOM)
,按目标库中定
义的,温度为
70.0 F
p>
,过程为
1.5
,电压为
< br>4.75
。
3.
点击
OK.
保存设计
在设置完设计的特性后,保存文件
将
TOP
模块保存为
.db
格式,
1.
选择
File > Save As
打开
Save Design
窗口,文
件名显示为
。
2.
改变目录到
tutorial/db/ directory.
3.
输入
TOP_
作为文件名,并保存这个文件。
4.
检查“
Verify that the Save All
Designs in Hierarchy option
”设置为
on
。
5.
点击
OK
。
Design
Analyzer
保存了设计和所设置的特性参数。
使用
dc_shell
来设置设计环境
Starting dc_shell in UNIX
dc_shell
提供了两种命令行模式。
< br>dcsh
模式使用的是
Synopsys
开发的命令行语言。
Tcl
模
式是基于
Tool Command
Language (Tcl)
的。启动
Design
Compiler,
键入
dc_shell
< br>命令,
dcsh
模式是默认的模式,使用
-tcl_
模式开关来运行
Tcl
模式。
%
dc_shell
---
启动
dc_shell
的
dcsh
模式。
dc_shell>
或者
%
dc_shell -tcl_mode ---
启动
dc_shell
的
Tcl
模式
dc_shell-t>
使用
p>
dc_shell
读入层次化设计
在执行这些操作的过程中,
dc_shell
模式会反馈回一个数字“
1
”,表示命令成功完成。
读入一个层次化设计
简化一个大而复杂的设计的方法就是将它分为小的部分,每个部分都完成一个功能,这些
小的部分就为子模块。一个设计韩又一个或多个子模块就是一个层次化的设计。层次化设
计可以含有多个层,每层含有一个或多个子模块。最上层模块则调用或引用这些子模块。
Alarm Clock
设计是个层
次化设计,
TOP
是最上层模块。
在任何时候使用
dc_shell<
/p>
保存设计
保存设计设置,将使用
dc_shell
的
write
命令。这个命令将整个设计写入磁盘。其语法:
write [-format format] [-hierarchy]
[-no_implicit][-modified] [-output file]
[-library library_name][design_list]
[-names_file
mapping_name_files][-donot_expand_dw]
读入
VHDL
包
如果你要使用
VHDL
格式,那么必须要在读入设计文件前先读入
VHDL
包。包的文件名为
,它在
vhdl
目录下。
?键入下面的命令:
dc_shell>
read
-
format vhdl {“./vhdl/”
}
或者
dc_shell-t>
read_file -format vhdl [list {./vhdl/}]
例子输出
在成功之行
Read
命令后,
dc_s
hell
输出如下内容:
Loading db file
‘/usr/synopsys/myarch/libraries/syn/’
Loading db file
‘/usr/synopsys/myarch/libraries/syn/’
Loading vhdl file
‘/usr/synopsys/tutorial/vhdl/’
Reading in the Synopsys vhdl
primitives.
/bohm/tutorial/vhdl/:
Information: Saving the package
‘synopsys’. (HDL
-202)
No
designs were read
{}
读入最低层的设计
Analyzing the VHDL Designs
使
用
analyze
和
elaborat
e
命令来读入五个
VHDL
文件
dc_shell>
analyze
-format vhdl -lib WORK {./vhdl/ALARM_,
./vhdl/ALARM_STATE_,
./vhdl/HOURS_,
./vhdl/TIME_,
./vhdl/TIME_STATE_}
或
dc_shell-t>
analyze -format vhdl -lib WORK [list
./vhdl/ALARM_
./vhdl/ALARM_STATE_
./vhdl/HOURS_
./vhdl/TIME_
./vhdl/TIME_STATE_]
例子输出
/bohm/tutorial/vhdl/ALARM_:
/bohm/tutorial/vhdl/ALARM_STATE_:
/bohm/tutorial/vhdl/HOURS_:
/bohm/tutorial/vhdl/TIME_:
/bohm/tutorial/vhdl/TIME_STATE_:
1
注意:
在这个输出的例子甚至全文中,这个作为结尾的输出的“
1
”表
示命令成功执行。
Elaborate VHDL
设计
分别
Elaborate
五个
VHDL
设计。
Elaborate
命令将分析
analyze
产生的中间文件转变为
.db
格
式。
在分析
(
analyze
)
VHDL
的设计时,
我们将结构设定为
BEHAVIOR
。
在默认得情况下,
VHDL
的结构
(architecture)<
/p>
为
architecture
。你使用<
/p>
analyzer
加
-lib
参数来指明映射的目录,
缺省的状态下,
Desi
gn Compiler
检查
WORK
目录。
Elaborate
?
dc_shell>
elaborate ALARM_COUNTER
-
arch “BEHAVIOR”
-lib WORK
-update
dc_shell>
elaborate
ALARM_STATE_MACHINE -
arch “BEHAVIOR”
-lib WORK update
dc_shell>
elaborate HOURS_FILTER -
arch
“BEHAVIOR”
-lib WORK -update
dc_shell>
elaborate
TIME_COUNTER -
arch “BEHAVIOR”
-lib WORK -update
dc_shell>
elaborate TIME_STATE_MACHINE
-
arch “BEHAVIOR”
-lib WORK
-update
或者
dc_shell-t>
elaborate
ALARM_COUNTER -arch {BEHAVIOR} -lib WORK -update
dc_shell-t>
elaborate
ALARM_STATE_MACHINE -arch {BEHAVIOR} -lib WORK
update
dc_shell-t>
elaborate
HOURS_FILTER -arch {BEHAVIOR} -lib WORK -update
dc_shell-t>
elaborate
TIME_COUNTER -arch {BEHAVIOR} -lib WORK -update
dc_shell-t>
elaborate
TIME_STATE_MACHINE -arch {BEHAVIOR} -lib WORK
-update
例子输出
dc_shell>
elaborate
ALARM_COUNTER -
arch “BEHAVIOR”
-lib WORK -update
Inferred
memory devices in process
in routine
ALARM_COUNTER line 11 in file
’/bohm/tu
torial/vhdl/ALARM_’.
=======
==================================================
============
Register Name | Type |
Width | Bus | MB | AR | AS | SR | SS | ST
< br>=============================================== ======================
AM_PM_OUT_reg |
Flip-flop | 1 | - | - | N | N | N | N | N
HOURS_OUT_reg | Flip-flop | 4 | Y | N |
N | N | N | N | N
MINUTES_OUT_reg |
Flip-flop | 6 | Y | N | N | N | N | N | N
< br>=============================================== ======================
Current design
is now ’ALARM_COUNTER’
1
Reading In the PLA Design <
/p>
使用
read
命令来读入非
VHDL
和
Verilog
的设计文件。
是
PLA
格式。所以读入
该文件用如下命令:
?
dc_shell>
read
-
format pla {“./vhdl/”}
或者
dc_shell-t>
read_file -format pla [list {./vhdl/}]
Example Output
dc_shell>
read
-
format pla {“./vhdl/”}
Loa
ding pla file
‘/bohm/tutorial/vhdl/
Current design is now
‘/bohm/tutorial/vhdl/
:CONVERTOR’ {“CONVERTOR”}
读入第二层模块
< br>分析
VHDL
设计文件
?
dc_shell>
analyze -format vhdl -lib WORK
{./vhdl/ALARM_,
./vhdl/ALARM_SM_,
./vhdl/,
./vhdl/CONVERTOR_,
./vhdl/,
./vhdl/TIME_}
或者
dc_shell-t>
analyze -format vhdl -lib WORK [list
./vhdl/ALARM_
./vhdl/ALARM_SM_
./vhdl/
./vhdl/CONVERTOR_
./vhdl/
./vhdl/TIME_]
Elaborate
VHDL
设计文件
ALARM_BLOCK
ALARM_SM_2
COMPARATOR
CONVERTOR_CKT
TIME_BLOCK
MUX
?
dc_shell>
elaborate ALARM_BLOCK -
arch
“BEHAVIOR”
-lib WORK -update
dc_shell>
elaborate
COMPARATOR -
arch “BEHAVIOR”
-lib WORK -update
dc_shell>
elaborate CONVERTOR_CKT
-
arch “BEHAVIOR”
-lib WORK
-update
dc_shell>
elaborate
MUX -
arch “BEHAVIOR”
-lib
WORK -update
dc_shell>
elaborate TIME_BLOCK -
arch
“BEHAVIOR”
-lib WORK -update
dc_shell>
elaborate
ALARM_SM_2 -
arch “BEHAVIOR”
-lib WORK -update
或者
dc_shell-t>
elaborate ALARM_BLOCK -arch {BEHAVIOR}
-lib WORK -update
dc_shell-t>
elaborate COMPARATOR -arch {BEHAVIOR}
-lib WORK -update
dc_shell-t>
elaborate CONVERTOR_CKT -arch
{BEHAVIOR} -lib WORK -update
dc_shell-t>
elaborate MUX
-arch {BEHAVIOR} -lib WORK -update
dc_shell-t>
elaborate
TIME_BLOCK -arch {BEHAVIOR} -lib WORK -update
dc_shell-t>
elaborate
ALARM_SM_2 -arch {BEHAVIOR} -lib WORK -update
粒子输出
dc_shell>
elaborate
ALARM_SM_2 -
arch “BEHAVIOR”
-lib WORK -update
Inferred
memory devices in process ‘SYNCH’
in routine ALARM_SM_2 line 32 in
file
‘/bohm/tutorial/vhdl/ALARM_SM_’.
=============================================
=======================
Register Name |
Type | Width | Bus | MB | AR | AS | SR | SS | ST <
/p>
========================================
=============================
Current
State | Flip-flop | 1 | - | - | N | N | N | N | N
=======================================
==============================
Current
design is now ‘ALARM_SM_2’
1
读入最上层设计模块
分析最上层设计模块
?
dc_shell>
analyze -format vhdl -
lib
WORK {“./vhdl/”}
或
dc_shell-t>
analyze -format vhdl -lib WORK [list
{./vhdl/}]
例子输出
/bohm/tutorial/vhdl/:
1
Elaborate
?
dc_shell>
elaborate TOP -
arch
“BEHAVIOR”
-lib WORK -update
或
dc_shell-t>
elaborate TOP -arch {BEHAVIOR} -lib
WORK -update
例子输出
Current
design is now ‘TOP’
1
使用
dc_shell
接口设置参数
设置输入端口的驱动能力
假设所有的
输入端口(除了
CLK
)的驱动能力都是
0.08
。假设
CLK
的驱动能力与
单元
B4I
的
Z
引脚相同,你可以设定端口驱动能力的值与库单元的输出引脚的驱动能力相同。当你不清
楚具体的值时,你可以使用
drive_of
命令来找到并且
设置这个驱动的值。
dc_shell>
set_drive -
rise .08
“ALARM”
dc_shell>
set_drive -
fall .08
“ALARM”
dc_shell>
set_drive -
rise .08
“HRS”
dc_shell>
set_drive -
fall .08
“HRS”
dc_shell>
set_drive -
rise .08
“MINS”
dc_shell>
set_drive -
fall .08
“MINS”
dc_shell>
set_drive -
rise .08
“SET_TIME”
dc_shell>
set_drive -
fall .08
“SET_TIME”
dc_shell>
set_drive -
rise .08
“TOGGLE_SWITCH”
dc_shell>
set_drive -
fall .08
“TOGGLE_SWITCH”
或
dc_shell-t>
set_drive -rise
.08 {ALARM}
dc_shell-t>
set_drive -fall .08 {ALARM}
dc_shell-t>
set_drive -rise
.08 {HRS}
dc_shell-t>
set_drive -fall .08 {HRS}
dc_shell-t>
set_drive -rise
.08 {MINS}
dc_shell-t>
set_drive -fall .08 {MINS}
dc_shell-t>
set_drive -rise
.08 {SET_TIME}
dc_shell-t>
set_drive -fall .08 {SET_TIME}
dc_shell-t>
set_drive -rise
.08 {TOGGLE_SWITCH}
dc_shell-t>
set_drive -fall .08 {TOGGLE_SWITCH}
注意:
如果你没有声明
-rise
或者
–
fa
ll
选项,两个同时都被设定。
例子输出
下面的输出是当你设定端口
ALARM
的上升
(rise)
驱动能力时:
Performing
set_d
rive on port ‘ALARM’.
1
下面的输出是当你设定端口
ALA
RM
的下降(
fall
)驱动能力时:
Performing set_drive on
port ‘ALARM’.
1
设置
CLK
的驱动能力
?
dc_shell>
set_drive -
rise drive_of
(class/B4I/Z) “CLK”
dc_shell>
set_drive
-
fall drive_of (class/B4I/Z)
“CLK”
或者
dc_shell-t>
set_drive -rise
[drive_of {class/B4I/Z}]{CLK}
dc_shell-t>
set_drive -fall
[drive_of {class/B4I/Z}]{CLK}
例子输出
当你设置上升
rise
或下降(
fall
)驱动能力与
B4I
的
Z
引脚相同时,
dc_shell
输出如下:
Performing drive_of on port
‘Z’.
Performing set_drive on
port ‘CLK’
1
设置输出端口的负载能力
设置
SPEAKER_OUT
的负载
?
dc_shell>
set_loa
d load_of
(class/IVA/A) * 5 “SPEAKER_OUT”
或
dc_shell-t>
set_load [expr [load_of {class/IVA/A}]
* 5] {SPEAKER_OUT}
例子输出
Performing
load_of on port ‘A’
Performing set_load on port
‘SPEAKER_OUT’
1
设置总线为的负载输出
假设端口
DISP1
和
DISP2
每个都可以驱动
3 (
< br>标准驱动
)
,而
AM_PM_D
ISPLAY
可以驱动
2
(
标
准驱动
).
设置
DISP1
的负载能力
?
dc_shell>
set_load 3.0
“DISP1[13]”
dc_shell>
set_load 3.0 “DISP1[12]”
dc_shell>
set_load 3.0
“DISP1[11]”
dc_shell>
set_load 3.0 “DISP1[10]”
dc_shell>
set_load 3.0
“DISP1[9]”
dc_shell>
set_load 3.0 “DISP1[8]”
dc_shell>
set_load
3.
0 “DISP1[7]”
dc_shell>
set_load 3.0
“DISP1[6]”
dc_shell>
set_load 3.0 “DISP1[5]”
dc_shell>
set_load 3.0
“DISP1[4]”
dc_shell>
set_load 3.0 “DISP1[3]”
dc_shell>
set_load 3.0
“DISP1[2]”
dc_shell>
set_load 3.0 “DISP1[1]”
dc_shell>
set_load 3.0
“DISP1[0]”
或
dc_shell-t>
set_load 3.0
{DISP1[13]}
dc_shell-t>
set_load 3.0 {DISP1[12]}
dc_shell-t>
set_load 3.0
{DISP1[11]}
dc_shell-t>
set_load 3.0 {DISP1[10]}
dc_shell-t>
set_load 3.0
{DISP1[9]}
dc_shell-t>
set_load 3.0 {DISP1[8]}
dc_shell-t>
set_load 3.0
{DISP1[7]}
dc_shell-t>
set_load 3.0 {DISP1[6]}
dc_shell-t>
set_load 3.0
{DISP1[5]}
dc_shell-t>
set_load 3.0 {DISP1[4]}
dc_shell-t>
set_load 3.0
{DISP1[3]}
dc_shell-t>
set_load 3.0 {DISP1[2]}
dc_shell-t>
set_load 3.0
{DISP1[1]}
dc_shell-t>
set_load 3.0 {DISP1[0]}
Shortcut:
可以set_load 3.0
“DISP1[*]”来取代上面的命令,达到一样的结果。
设置
DISP2
的负载能力
?
dc_shell>
set_load 3.0 “DISP2[13]”
dc_shell>
set_load 3.0
“DISP2[12]”
dc_shell>
set_load 3.0 “DISP2[11]”
dc_shell>
set_load 3.0
“DISP2[10]”
dc_shell>
set_load 3.0 “DISP2[9]”
dc_shell>
set_load
3
.0 “DISP2[8]”
dc_shell>
set_load 3.0
“DISP2[7]”
dc_shell>
set_load 3.0 “DISP2[6]”
dc_shell>
set_load 3.0
“DISP2[5]”
dc_shell>
set_load 3.0 “DISP2[4]”
dc_shell>
set_load 3.0
“DISP2[3]”
dc_shell>
set_load 3.0 “DISP2[2]”
dc_shell>
set_load 3.0
“DISP2[1]”
dc_shell>
set_load 3.0 “DISP2[0]”
或
dc_shell-t>
set_load 3.0 {DISP2[13]}
dc_shell-t>
set_load 3.0
{DISP2[12]}
dc_shell-t>
set_load 3.0 {DISP2[11]}
dc_shell-t>
set_load 3.0
{DISP2[10]}
dc_shell-t>
set_load 3.0 {DISP2[9]}
dc_shell-t>
set_load 3.0
{DISP2[8]}
dc_shell-t>
set_load 3.0 {DISP2[7]}
dc_shell-t>
set_load 3.0
{DISP2[6]}
dc_shell-t>
set_load 3.0 {DISP2[5]}
dc_shell-t>
set_load 3.0
{DISP2[4]}
dc_shell-t>
set_load 3.0 {DISP2[3]}
dc_shell-t>
set_load 3.0
{DISP2[2]}
dc_shell-t>
set_load 3.0 {DISP2[1]}
dc_shell-t>
set_load 3.0
{DISP2[0]}
例子输出
Performing set_load on port
‘DISP1[13]’.
1
<
/p>
设置
AM_PM_DISPLAY
的负载
?
dc_shell>
set_load 2.0 “AM_PM_DISPLAY”
或
dc_shell-t>
set_load 2.0 {AM_PM_DISPLAY}
例子输出
Performing set_load on port
‘AM_PM_DISPLAY’.
1
设置最上层模块的其他参数
设置
Wire Load
dc_shell>
set_wire_load
“10x10”
-
library
“class”
或
dc_shell-t>
set_wire_load
{10x10} -library {class}
例子输出
Using
wire_load model ‘10x10’ found in library
‘class’.
设置操作条件
?
dc_shell>
set_operating_conditions
-
library “class” “WCCOM”
或
dc_shell-t>
set_operating_conditions -library
{class} {WCCOM}
例子输出
Using
operating conditions ‘WCCOM’ found in library
‘class’.
保存设计
?
dc_shell>
write
-format db -hierarchy -
output
“./db/TOP_”
{“:TOP“}
或
dc_shell-t>
write -format db -hierarchy -output
{./db/TOP_} [list
{:TOP }]
对
应的,
dc_shell
会显示如下信息:
Writing to file
/bohm/tutorial/db/TOP_
Then quit
dc_shell, or go on to the next chapter.
退出
?
dc_sehll>quit
确定优化目标和设置限制条件
在优化一个设计的过程中,
Design Compiler<
/p>
的算法将评估如何可以最好的执行一个设计。
你可以通过在优化前
设置优化目标来引导
Design
Compiler
的决定。这些优化目标称为限制
条件。限制条件是可测量的电路的特征参
数,如时序、面积、功耗等。
在优化的过程中,
Design
Co
mpiler
检查你这些限制目标参数,并试图在把设计综合到工艺库的时候满足这些<
/p>
条件。工艺库中含有重要的时序、面积和功耗的规范。在优化时,
Design
Compiler
根据工
艺库中的规范和你设计的限制条件来创建复杂的模型并进行详细的计算。为了得到精确的
结果,要定义越符合实际情况的限制条件越好。你也可以设置限制条件来规范内部的设计
时序、端口的逻辑和电气连接和子模块的接口。
准备工作
在进行本部分前,是否完成下面的操作:
Design
Analyzer
部分:
1.
如果
Design Analyzer
还没有运行,在
tutorial
目录下启动它。
2.
读入
TOP_
p>
,它是在前面产生的设计文件。
3. <
/p>
产生
TOP
的
S
ymbol view.
dc_shell
Command-Line
部分:
1.
如果
dc_shell
没有运行,在
tutorial
目录下启动它。
2.
读入
TOP_
。
dc_shell>
read -
format db
{“./db/TOP_”}
或
dc_shell-t>
read_file
-format db [list {./db/TOP_}]
删除已经设置的限制条件
?
remove_constraint -all
此命令不能删除设计环境参数。
关于设置设计限制条件
限制条件是一
个设计的性能目标参数,一般定义了最大面积和时序目标参数,如最大或最
小延迟以及时
钟规范。然后线是条件也定义其他的一些要求,如最大允许功耗、设计的可
布性等。
p>
把你的限制条件设置的跟你的设计目标很接近,就可以从
Design Compiler
的到最好的结
果。如果时序目标设置的比实际的低
(
例如,
< br>0)
,优化时就会将
buffer
加入到关键路经重或
者在多负载的线网上重复逻辑。所以,一个不切实际的时序目标会
导致答的面积增加。使
用切合实际的时序目标可以使优化产生最小的复合限制条件的电路
。如果你不设置一个时
序目标,缺省状态下,
Design <
/p>
Compiler
在优化规则中只应用设计规则作为限制条件。设
计
规则是受你要映射的工艺影响。
决定实际的目标参数
一般来说,时钟周期、定时数
(timing numbers
)
以及电路的面积都会由设计规范来提供。
这样,目标在开始阶
段就看明确。然而,目标参数也可能没有在设计规范中或者说只有一
个子模块需要优化。
当优化一个子模块时,你可能知道整个设计的目标参数,却不知道子
模块的。如果实际的
目标参数都不知道,就把整个设计或子模块直接映射到门,而不用设
置限制条件。这样映
射可以帮助决定当前设计的速度。使用这个速度来决定限制条件的一
个起始点。随着你在
编译设计,你就可以更新你的限制条件。如果一个设计当前是网表的
形式(已经映射到门
了),你可以使用
derive_timing_constraints
命令来得到确切的限
制条件。
我们假设练习中限制条件都是符合实际的。
关于设置
TOP
模块的目标参数
模块
TOP
p>
的时钟周期为
1
秒。如果你定义时钟周期为
1
秒位设计目标
, Design C
ompiler
可以
轻易的达到,应为库单元的延时为钠秒级的
(
nanoseconds
)。设置一个更严格的时序限制
p>
条件,
假设闹钟要在以
25ns
(
40MHz
)
为周期运
行。
另外信号必须要在下一个时钟周期
(25ns)
前到达输出端口。为达到这个目标,限制输出端口要求信号的到达时间早于
20ns
。假设设
计面积不能超过
11
00
门。你不需要设置面积的限制条件。优化产生最小电路可以满足时序
限制。
使用
Design
Analyzer
来设置设计限制条件
设置时钟限制条件
时序电路一般都有
时钟。
通过对时序电路的输入和输出端口设置时钟延迟来设置限制条件。
组合逻辑不用时钟。
所以你在设置输入和输出延时时必须创建一个虚拟的时钟。
在练习中,
在定义输入与输出延时前,创建一个虚拟的时钟。一
个时钟又一个源,这个源可以为一个
设计的输入端口,也可以一个器件的输出端口。一个
时钟对象可以附着于一个时钟源。以
闹钟设计为例,
时钟源为端
口
CLK
。
时钟对象在
Schematic
view
里表现为一个小的波形
符号,
在它的边上是所要附着的时钟源。
设置
CLK
的时钟对象
1.
在
Symbol view
选择
CLK
。
2.
选择
Attributes > Clocks >
Specify
,
Specify Clock
window
见
Figure
8-1
。
3.
在
Period
中键入
25
。
当该值被应用后,一个建立时间的限制就被设置到每个触发器由
CLK
驱动的
D
引脚。“
F
ix
Hold
”
选项如果被选的话,
将会使
Design
Compile
r
解决
(
fix
)
保持时间冲突
(
violated
hold
times
)。一般来说,
你要求
Design
Compiler
先解决建立时间(
setup time
p>
)的冲突,然
后在遍以后,你检查保持时间。如果编译后存在保持时
间的冲突,你把“Fix Hold”选定
后再重新编译。
4.
点击
Apply
。
5.
点击
Cancel
关闭
Specify
Clock
窗口。
时钟的限制条件就被设置了。注意在
Specify Cloc
k
窗口中的值没有变化。
CLK
的时钟
对象
被建立了。注意有个小波形贴在
CLK
端口旁边。如
Figure 8-2.
设置延迟限制条件
输入延迟是对到达输入端口的外部延迟的建模。输入延迟被定义为一个实数或虚拟时钟。
输出延迟是对离开输出端口得延迟的建模。输出延迟必须被定义为实数或虚拟
时钟来作为
路径的限制条件。输出延迟与下一个上升延的时序相关。时钟的周期设为
p>
25ns
,而输出信
号的达到时间为
20ns
。这个时间关系定义了所有输出端口的输出的延时为
5 ns
。
设定输出端口的限制条件:
1. <
/p>
选择
4
个
TOP
的输出端口。
2.
选择
Attributes > Operating
Environment > Output
Delay
。
Output Delay
window
如
Figure
8-3
。
3.
选择
CLK
。
CLK
变成高亮,并且在
Relati
ve To Clock
处显示出
CLK
的值。
4.
在
Max
Rise
和
Max Fall
处输入<
/p>
5
。
5. <
/p>
点击
Apply
。
6.
点击
Cancel
来关掉
Output Delay
窗口。
Design Analyz
er
设置输出端口的限制条件,并且显示如下信息:
Output delay attributes set on selected
paths
检查设计,发现和修改错误:
当你在
编译一个设计前,而在你设置完限制条件后,检查设计,确定和修改问题。这个过
程检查
设计的内部表达是否正确,并且会产生相应的警告或者错误。
检查设计
1.
选择
Analysis >
Check Design
。
Check
Design
窗口如
Figure
8-4
。
缺省时,
Detailed
Warnings
和
Check All Levels
时被选定的。这些选项提供了鲜明的警
告和错误信息,并且检查分级设
计中的所有的子模块。
2.
点击并选择
Check
Timing
。
Check
Timing
将检查设计的时序特性。
3.
点击
OK
。出现
Design
Errors
窗口如
Figure
8-5
。
CONVERTOR_CK
T
和
CONVERTOR
有警告信息。
显示出显
Warning
的区域
1.
移动
Design
Errors
的窗口到
Design
Analyzer
窗口旁边,使得两个窗口都可以全部看见。<
/p>
警告信息呈高亮状态,并且按钮
p>
Show
和
Next
有效。
3.
点击
Show
,
Design Analyzer
显示一个包含警告信息的设计区域的特写视图。
在
Schematic view
中选定
CONVERTOR
,
CONVERTOR
的名字就出现在
messa
ge area
。
CONVERTO
R
的实例名为
U7
,它是
CONVERTOR_CKT
的子模块。
检查额外的信息
1.
在
Design Errors
窗口中点击
Next
,令第二条信息高
亮
:
Pin ‘T0’ is connected to
logic 0.
Pin T0 is selected
in the schematic. Design Analyzer updates the
schematic in the
Design Analyzer
window.
2.
点击
Next
令下一条消息高亮。
:
Pin
‘T1’ is connected to logic
0.
Pin ‘T1’ is selected in the
schematic.
3.
放大包
含有引脚
T0
和
T1
< br>区域。
因为缺省情况下,
引脚名称是被关闭
(turn
off)
的,
所以,
引脚名
T0
和
< br>T1
没有显示在原理图中。
原理图由透明的层组成,
p>
每个层都包含了不同的信息。
一个层的信息可见只有当其被打开
p>
(turn on)
的时候。
显示引脚名称层
1.
选择
View >
Style
。出现
View
Style
窗口,如
Figure
8-8
。
浏览这些层的列表,每个层的名称描述它要显示的文字和图表。
使用
View Style
窗口来
看层的设定和设置额外的层。
2.
选择
pin_name_lay
er
,
3.
点击并选择
Visible
的
On,
然后点击
Apply
。
The schematic displays pin names.
4.
点击
Cancel
关掉
View Style
window
。
检查其它的错误
1.
点击
Design Errors
窗口
中的
Next
。
这个消息与前面看到的
3
个信息相关:
Warning: In design ‘CONVERTOR_CKT’,
the same net is connected
to more than
one
pin on submodule ‘U7’.
(LINT
-33)
Net ‘data_in1[5]’
is connected to pins ‘T0’, ‘T1’.
这个信息和前面的信息之所以报出是因为当输出端口没有连接时,会被
Des
ign Compiler
自动与逻辑
0
相连。所以这些警告并没有反映设计中的问题,你可以忽略他们。
2.
点击
Next
。
Warning:
Design ‘CONVERTOR’ is instantiated 2 times.
(LINT
-45)
Cell ‘U7’ in
design ‘CONVERTOR_CKT’
Cell
‘U8’ in design ‘CONVERTOR_CKT’
< br>这个错误之所以出现是因为在
CONVERTOR_CKT
中
CONVERTOR
被引用了不只一次。在优化前分
解这个多重
CONVERTOR
实例(在后面
我们会讲到)。
3.
点击
Cancel
关闭
Design
Errors
窗口。
分解多重实例
分级设计会多次引用以
个子模块。当同一个子模块在一个设计中被引用不只一次时,多个
实例会存在于设计中。
要在编译前分解多重设计实例。有三个方法可以分解:
设置优化目标和设置限制条件
?
用
compile-once-
don’t
-touch
方法
(set_dont_touchcommand)
。
这个方法通过设置
dont_touch
参数于单元或
references
,
在优化设计的过程中保存子模块
?
去掉层次。
(ungroup command).
这个方
法去掉层次并产生以一个设计,其中所有的单元和
references
都只有唯一的名。
?
通过复制每个实例,是的每个实例都是唯一的,
(uniquify
command)
。
这个方法在当前
的分层的设计中产生一个设计,其中所有的单元和
references
都有唯一的
名字。
我们在这里使用第三种方法。
uniquify
multiple
命令使得子模块在每次引用使都都创造出
< br>一个复制,并被赋予一个唯一的名称。在编译过程中,
Design
Compiler
将每个实例都优化
映射到他们各
自的环境中。
对于闹钟设计,
un
iquify
这个选择是最有效的,因为所有的
CONVERT
OR
的实例都需要针对
他们各自的环境来优化,而且他们的层次
化需要保留。
1.
在
CONVERTOR_CKT
的
Schematic
view
中点击两次向上的箭头。
2.
选择
Designs view
并选择
TOP
模块。
< br>
3.
选择
Edit >
Uniquify > Hierarchy
,针对
TOP
p>
的
uniquify
命令开始运行,命令的
结果显
示在命令窗口中
,
如
Figure 8-10
。
在
Designs
view
中
,
信息“Design
TOP uniquified”
和两个新的
PLA
图标出现—
CONVERTOR_0
和
CONV
ERTOR_1
—它们对应于
TOP
中
的两个
CONVERTOR
实例。如
F
igure 8-11.
During optimization,
CONVERTOR_0 and CONVERTOR_1 are
optimized in the context of their
different environments.
保存设计
1.
选定
TOP
模块。
2.
选择
File > Save
As
。
3.
改换到
db
目录下。
4.
将设计报存为<
/p>
TOP_before_
。
5.
点击并选择“Save All Designs in
Hierarchy”。
6.
点击
OK
。
然后退出
Design
Analyzer
。
选择
File > Quit.
<
/p>
使用
dc_shell
设置设计限制条件
设置时钟限制条件
dc_shell>
create_clock -name
CLK -period 25 -waveform { 0 12.5 } { CLK }
或
dc_shell-t>
create_clock
-name
CLK
-period
25
-waveform
[list
0
12.5
]
[list
CLK
]
选项
–
na
me
规定了时钟的名称,
-period
规定了以库中时间单位的时钟波形的周期,
-wavefo
rm
给出了以库中单位时间为基础的时钟的上升沿和下降沿时间。
dc_shell
会有如下
相应的输出:
Performing create_clock on port,
’CLK’.
设置延迟限制条件
在设计中,你可以
使用
或者
script
文件。
这两个文件包含了设置延时限
制条件的这些命令。通过使用这两个文件,就不用一个一个
地输入命令来进行设置,而可
以由文件控制一次性的将这些限制条件设置到输出端口。
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“SPEAKER_OUT”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “SPEAKER_OUT”
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“AM_PM_DISPLAY”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “AM_PM_DISPLAY”
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP2[13]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP2[13]”
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP2[12]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP2[12]”
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP2[11]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP2[11]”
.
.
.
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP2[0]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP2[0]”
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP1[13]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP1[13]”
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP1[12]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP1[12]”
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP1[11]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP1[11]”
.
.
.
dc_shell>
set_output_delay
-clock CLK -max -
rise 5
“DISP1[0]”
dc_shell>
set_output_delay -clock CLK -max
-
fall 5 “DISP1[0]”
或,
dc_shell-t>
set_output_delay -clock CLK -max -rise
5 {SPEAKER_OUT}
dc_shell-t>
set_output_delay -clock CLK -max -fall
5 {SPEAKER_OUT}
dc_shell-t>
set_output_delay -clock CLK -max -rise
5 {AM_PM_DISPLAY}
dc_shell-t>
set_output_delay -clock CLK -max -fall
5 {AM_PM_DISPLAY}
.
.
.
dc_shell-t>
set_output_delay -clock CLK -max -rise
5 {DISP1[0]}
dc_shell-t>
set_output_delay -clock CLK -max -fall
5 {DISP1[0]}
例子输出:
在每个命令执行后,
p>
dc_shell
会显示类似于下面的确认信息。
< br>:
Performing set_output_delay on
port ‘SPEAKER_OUT’.
检查设计
注意:
使用
Design Analyzer
而不是
dc_shell
在观察综合前后的原理图。
dc_shell>
check_design
dc_shell>
check_timing
或
dc_shell-t>
check_design
dc_shell-t>
check_timing
这个命令产生相应的警告和错误信息。
例子输出
当
check_design
命令完成时,
dc_shell
会显示如下的信息:
Warning: In design ‘CONVERTOR_CKT’, a
pin on submodule ‘U7’ is connected to
logic 1 or logic 0. (LINT-32)
Net ‘data _in1[5]’ is connected to pins
‘T0’, ‘T1’.
Warning: Design
‘CONVERTOR’ is instantiated 2 times.
(LINT-45)
Cell ‘U7’ in
design ‘CONVERTOR_CKT’
Cell
‘U8’ in design ‘CONVERTOR_CKT’
1
当
check_timing
p>
完成时,
dc_shell
会显示一段信息
、表示警告和错误的消息:
Information:
Updating design information...(UID-85)
Allocating blocks in ‘U1/U1’
Reading in the Synopsys synthetic
primitives.
.
.
.
Warning: Design ‘TOP’ contains unmapped
cells.
Use report_cell to
list unmapped cells in the design. (OPT-309)
Warning: The following end-points are
not constrained for maximum delay.
End
point
---------------
AM_PM_DISPLAY
DISP1[0]
DISP1[1]
DISP1[2]
DISP1[3]
DISP1[4]
DISP1[5]
DISP1[6]
DISP1[7]
DISP1[8]
DISP1[9]
DISP1[10]
DISP1[11]
DISP1[12]
DISP1[13]
DISP2[0]
DISP2[1]
DISP2[2]
DISP2[3]
.
.
.
在输出端口的警告信息表明不是所有的在报表中的点已经被
设置了限制条件,当它被设置
了限制条件后,这个警告信息自然会消除。
显示引脚名称的层
The following commands set the visual
characteristics of the pin
dc_shell>
set_layer pin_name_layer visible TRUE
dc_shell>
set_layer
pin_name_layer line_width 1
dc_shell>
set_layer pin_name_layer
plot_line_width 0
dc_shell>
set_layer pin_name_layer red 65535
dc_shell>
set_layer
pin_name_layer green 65535
dc_shell>
set_layer pin_name_layer blue 65535
这些命令与
Tcl
命令相同
< br>
dc_shell-t>
set_layer
pin_name_layer visible TRUE
Resolving Multiple Design Instances
Using dc_shell
dc_shell>
uniquify
或者
dc_shell-t>
uniquify
例子输出
当你执行
uniquify
命令,
dc
_shell
显示如下输出信息:
Uniquifying cell ‘U8’ in design
‘CONVERTOR_CKT’. New design is
‘CONVERTOR_0’.
Uniquifying cell ‘U7’ in design
‘CONVERTOR_CKT’. New design is
‘CONVERTOR_1’.
保存设计
dc_shell>
write -format db -hierarchy
-
output “./db/TOP_before_”
{“TOP_:TOP”}
或
dc_shell-t>
write -format db -hierarchy -output
{./db/TOP_before_}
[list {TOP_:TOP}]
编译一个层次化设计
优化是综合中把
库单元中符合设计功能、面积和速度要求的单元组合起来的过程。
Design
Compiler
编译命名调用优化。为的到一个符合约束规范的设计
,在编译的过程中进行对设
计进行修改和优化。
编译和分析设计
Design Analyzer
Design
Compiler
自动的编译所有层级的设计,它支持分级结构的设计。在
编译过程中,门
级优化共分为
5
个阶段
:
1.
初始时序优化
2.
组合优化
3. I/O
pad
优化
4.
最后时序优化
5.
局部调整
在编译完每个模块后,
Design Compiler
继续优化电路,直到满足所有的限制条件。有时,
这个过程要求重新编
译某个关键路径上的子模块。当性能指标都满足,而且结果没有更好
的改进的时候,编译
过程就会停止。缺省的情况下,在分级的设计中,每个子模块是单独
给编译的。在编译子
模块时,
Design Compiler
在优化使会考虑每个
模块各自的边界条件。
在编译前,使用
uniquify
set_dont_touch
或者
ungroup
来分解一些相同的木块的实例。
编译优化设计
Design Analyzer
当你对闹钟的设计设置完限
制条件和参数并且运行
check_design
后,设计就可
以使用
compile
命令来优化了。
这部分,我们要进行如下操作:
1.
打开
Design
Optimization
窗口
2.
检查和设置选项信息
3.
优化初始化
4.
读入已经修改过的设计
5.
检查设计在优化是产生的信息。
打开
Design
Optimization
窗口
1.
在
Designs view
选择
p>
TOP
。
2.
选择
Tools > Design
Optimization
。
Design
Optimization
窗口如
Figure
9-1
。
检查和设置选项
-
-
-
-
-
-
-
-
-
上一篇:怎样让标题变得新颖
下一篇:【变得糟糕的英语短语】糟糕的英语