关键词不能为空

当前您在: 主页 > 英语 >

Design Compiler使用简要说明

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-22 17:31
tags:

-

2021年2月22日发(作者:melo)





Design Compiler


使用简要说明



综合过程



Design

< p>
Compiler


可以针对层次化的组合电路或者时序电路的速度、面积和 可布


性进行优化。


按照所定义的电路的测量特征所要达到的目标 ,


Design


Compiler


综 合


一个电路并将其放入目标库中,


这样可以生成适用于你的计算 机辅助设计工程



CAE


< p>
工具的原理图或网表。




综合的过程如下图:



?



读入设计及其子设计。



?



设置顶层的设计特性参数



?



设置实际时序和面积目标参数



?



执行


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



Synopsys


的根目录;

< p>


2


.用户目录



3


.启动


Design_Compiler< /p>


的当前目录



Tutorial


——闹钟的设计






TOP


TOP


是闹钟设计的最上层的模块,


包 括了对所有子模块的调用,


而这些子模块都执行着闹钟


设计的一 个单独的功能。




ALARM_BLOCK


ALARM_BLOCK


是分级模块的第二级,它控制闹钟的设定。它有


ALARM_BLOCK


有四个输入信


号:



? ALARM 用来和


HRS



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

< p>
个状态,如


Figure 6-4.




MUX


MUX

< br>决定显示时间设置,使时间和闹铃的显示有效,它有


5


个 输入信号:



? ALARM 与


HRS



MINS


设置闹铃时间



? ALARM_HRS 是从


ALARM_BLOCK


输入的闹铃 小时



? ALARM_MIN 是从


ALARM_BLOCK


输入的闹铃分钟



? TIME_HRS 是从


TIME_BLOCK

< p>
输入的闹铃小时



? TIME_MIN 是从< /p>


TIME_BLOCK


输入的闹铃分钟



MUX


处理这些输入信号,


并将结果 输出到


CONVERTOR_CKT,


使


CONVERTOR_CKT


显示 适当的时


间和闹铃。缺省的显示是时间。当


ALARM = 1,


显示闹铃。




COMPARATOR


COMPARATOR


比较时间和闹铃,它有四个主要的输入信号:



? ALARM_HRS 是从


ALARM_BLOCK.


来得小时闹铃信号



? ALARM_MIN 是从


ALARM_BLOCK


来得分钟闹 铃信号



? TIME_HRS



是从


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


设计中有两个实例。一个


CONVERTOR


实例转化将二进制表示


的小时,


另一个则转化分钟。


CONVERTOR_CKT


为一个


7


段发光二极管显示准备转化好的信息。



?


HOURS_FILTER 使十位上的


0

的显示在


10



00


之前和


12



59


后失效。


例如:


九点的显示为

< br>9



00


而不是


09



00





使用


Design Analyzer


设置设计环境



启动


Design Analyzer


%design_analyzer &



读入一个分级的设计



读入

< p>
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


目录下。




读入

< p>
VHDL


文件并且建立


vhdl

< br>中间设计文件。



分析


VHD L


设计



1.


选择


File > Analyze.


2.
















ALARM_< /p>







UNIX




Design


Analyzer


来分析< /p>


ALARM_COUNTER




3.


用鼠标中键选择其余的设计模块:



ALARM_STATE_


HOURS_


TIME_


TIME_STATE_


4.


点击


OK.


出现分析窗口显示分析的命令,如


Figure 7-3


,设计中间文件存在


work


库文件中。




5.


点击< /p>


Cancel


关闭分析窗口。




Elaborate VHDL


模块



分别

< br>Elaborate


这五个


VHDL

模块。


Elaborate


命令将把设计文件的中间文件解 析成


.db


格式。



Elaborate


每个


VHDL

模块:



1.


选择


File > Elaborate.

出现


Elaborate


设计窗口,如

Figure 7-4





2.


选择


Library

< p>
中的


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



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)


时,


他们的的驱动能力,或者输出端口的负载能力。

< p>


本节就是描述如何来设置闹钟设计的这些参数。





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


< p>
Z


引脚的驱动能力相同。



1.



Symbol view


下,选择


CLK




2.


点击


Rise Strength


区域,按下


Ctrl-u

< br>来删掉值


0.00




3.



Rise Strength


区域中,输入


:


drive_of (class/B4I/Z)



Design Analyzer


将该命


令复制到


Fall Strength


区域。



4.


点击


Apply




Rise



fall

< br>的值


(0.0335)


出现在相应的框中,如

< p>
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


命令

< p>
来决定和设置一个负载值。假设端口


SPEAKER_OUT

< p>
驱动


5


个反向器


,


而反向器同库单元


IVA


(目标库中的一个反 向器)相同。




1.


选择


SPEAKER_OUT


端口

< br>


2.


选择


Attributes > Operating Environment > Load


来打开


Load


窗口,如


Figure 7-20






3.



Capacitive load


中填上


load_of (class/IVA/A) * 5


,在星号


(*)


前留个空。注意引



A



IVA


的输入端口。



4.

点击


Apply



capacit ive load


的值自动计算出来为


7.50



SPEAKER_OUT


驱动能力为

< p>
5


个反向器,每个反向器的负载值为


1.5


,所以


SPEAKER_OUT


的负载值为< /p>


1.5*5 = 7.5




5.


点击


Cancel


退出


Load


窗口。




设置总线的驱动能力



假设端口


DISP1



DI SP2


每个的驱动能力都为


3


(标准负 载),


AM_PM_DISPLAY


的驱动能力为


2


(标准负载)。




设置


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.


点击


Load


窗口中的


Cancel

< p>




为最上层模块设置其他的特性



有些特 性是要为一个最上层模块设置的,但是并不是真对某个输入或输出端口。这些参数


会对设 计的优化产生一个全局的影响。这里我们要为


TOP


模块设置如 下参数:



? Wire Load



? Operating Conditions




设置


Wire Load


Design


Compiler


优化以线网的扇出为基础来从连线负载(


wire

< p>
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

< p>
对应于的


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)


,在这里,我们假设运行条件为最差的情况


(WCCOM)


,按目标库中定


义的,温度为


70.0 F


,过程为


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>



使用


dc_shell


读入层次化设计



在执行这些操作的过程中,


dc_shell


模式会反馈回一个数字“


1


”,表示命令成功完成。

< p>



读入一个层次化设计



简化一个大而复杂的设计的方法就是将它分为小的部分,每个部分都完成一个功能,这些


小的部分就为子模块。一个设计韩又一个或多个子模块就是一个层次化的设计。层次化设


计可以含有多个层,每层含有一个或多个子模块。最上层模块则调用或引用这些子模块。



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

< p>
命令将分析


analyze


产生的中间文件转变为


.db



式。


在分析



analyze


< p>
VHDL


的设计时,


我们将结构设定为

< p>
BEHAVIOR



在默认得情况下,

< p>
VHDL


的结构


(architecture)< /p>



architecture


。你使用< /p>


analyzer



-lib

< p>
参数来指明映射的目录,


缺省的状态下,


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


的负载能力

< p>


?


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_


,它是在前面产生的设计文件。



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


此命令不能删除设计环境参数。




关于设置设计限制条件



限制条件是一 个设计的性能目标参数,一般定义了最大面积和时序目标参数,如最大或最


小延迟以及时 钟规范。然后线是条件也定义其他的一些要求,如最大允许功耗、设计的可


布性等。



把你的限制条件设置的跟你的设计目标很接近,就可以从


Design Compiler


的到最好的结


果。如果时序目标设置的比实际的低


(


例如,

< br>0)


,优化时就会将


buffer


加入到关键路经重或


者在多负载的线网上重复逻辑。所以,一个不切实际的时序目标会 导致答的面积增加。使


用切合实际的时序目标可以使优化产生最小的复合限制条件的电路 。如果你不设置一个时


序目标,缺省状态下,


Design < /p>


Compiler


在优化规则中只应用设计规则作为限制条件。设 计


规则是受你要映射的工艺影响。




决定实际的目标参数



一般来说,时钟周期、定时数


(timing numbers )


以及电路的面积都会由设计规范来提供。


这样,目标在开始阶 段就看明确。然而,目标参数也可能没有在设计规范中或者说只有一


个子模块需要优化。 当优化一个子模块时,你可能知道整个设计的目标参数,却不知道子


模块的。如果实际的 目标参数都不知道,就把整个设计或子模块直接映射到门,而不用设


置限制条件。这样映 射可以帮助决定当前设计的速度。使用这个速度来决定限制条件的一


个起始点。随着你在 编译设计,你就可以更新你的限制条件。如果一个设计当前是网表的


形式(已经映射到门 了),你可以使用


derive_timing_constraints


命令来得到确切的限


制条件。




我们假设练习中限制条件都是符合实际的。




关于设置


TOP

模块的目标参数



模块


TOP


的时钟周期为


1


秒。如果你定义时钟周期为


1


秒位设计目标


, Design C ompiler


可以


轻易的达到,应为库单元的延时为钠秒级的 (


nanoseconds


)。设置一个更严格的时序限制


条件,


假设闹钟要在以


25ns

< p>


40MHz



为周期运 行。


另外信号必须要在下一个时钟周期


(25ns)

< p>
前到达输出端口。为达到这个目标,限制输出端口要求信号的到达时间早于


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


)的冲突,然


后在遍以后,你检查保持时间。如果编译后存在保持时 间的冲突,你把“Fix Hold”选定


后再重新编译。



4.


点击


Apply




5.


点击


Cancel


关闭


Specify Clock


窗口。



时钟的限制条件就被设置了。注意在


Specify Cloc k


窗口中的值没有变化。


CLK


的时钟 对象


被建立了。注意有个小波形贴在


CLK

端口旁边。如


Figure 8-2.




设置延迟限制条件



输入延迟是对到达输入端口的外部延迟的建模。输入延迟被定义为一个实数或虚拟时钟。



输出延迟是对离开输出端口得延迟的建模。输出延迟必须被定义为实数或虚拟 时钟来作为


路径的限制条件。输出延迟与下一个上升延的时序相关。时钟的周期设为


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>




警告信息呈高亮状态,并且按钮


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


没有显示在原理图中。


原理图由透明的层组成,


每个层都包含了不同的信息。


一个层的信息可见只有当其被打开


(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

< p>
Compiler


将每个实例都优化


映射到他们各 自的环境中。



对于闹钟设计,


un iquify


这个选择是最有效的,因为所有的


CONVERT OR


的实例都需要针对


他们各自的环境来优化,而且他们的层次 化需要保留。




1.



CONVERTOR_CKT



Schematic view


中点击两次向上的箭头。



2.


选择


Designs view


并选择


TOP


模块。

< br>


3.


选择


Edit > Uniquify > Hierarchy


,针对


TOP



uniquify


命令开始运行,命令的 结果显


示在命令窗口中


,


< p>
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]}



例子输出:



在每个命令执行后,


dc_shell


会显示类似于下面的确认信息。

< br>:


Performing set_output_delay on port ‘SPEAKER_OUT’.




检查设计



注意:



使用


Design Analyzer


而不是


dc_shell


在观察综合前后的原理图。

< p>



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


完成时,


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

< p>
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


选择


TOP




2.


选择


Tools > Design Optimization



Design Optimization


窗口如


Figure 9-1




检查和设置选项



-


-


-


-


-


-


-


-



本文更新与2021-02-22 17:31,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/669537.html

Design Compiler使用简要说明的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文