Design+Compiler.docx
《Design+Compiler.docx》由会员分享,可在线阅读,更多相关《Design+Compiler.docx(122页珍藏版)》请在冰豆网上搜索。
Design+Compiler
DesignCompiler
使用简要说明
综合过程
DesignCompiler可以针对层次化的组合电路或者时序电路的速度、面积和可布性进行优化。
按照所定义的电路的测量特征所要达到的目标,DesignCompiler综合一个电路并将其放入目标库中,这样可以生成适用于你的计算机辅助设计工程(CAE)工具的原理图或网表。
综合的过程如下图:
•读入设计及其子设计。
•设置顶层的设计特性参数
•设置实际时序和面积目标参数
•执行check_design验证设计,识别并且更正错误
•进行DesignCompiler优化
练习介绍
在db、verilog、vhdl文件夹下设计内容都是一样的,只是形式不一样。
Db文件夹:
ALARM_BLOCK.db
ALARM_COUNTER.db
ALARM_SM.db
ALARM_STATE_MACHINE.db
COMPARATOR.db
HOURS_FILTER.db
MUX.db
TIME_BLOCK.db
TIME_COUNTER.db
TIME_STATE_MACHINE.db
CONVERTOR.pla
CONVERTOR_CKT.db
TOP.db
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.pla
CONVERTOR_CKT.v
TOP.v
Vhdl文件夹:
ALARM_BLOCK.vhd
ALARM_BLOCK.vhd
ALARM_SM.vhd
ALARM_STATE_MACHINE.vhd
COMPARATOR.vhd
HOURS_FILTER.vhd
MUX.vhd
TIME_BLOCK.vhd
TIME_COUNTER.vhd
TIME_STATE_MACHINE.vhd
CONVERTOR.pla
CONVERTOR_CKT.vhd
TOP.vhd
设置path参数
将Synopsys_installroot/arch/syn/bin加到.cshrc文件中。
设置Setup文件
.synopsys_dc.setup的读取顺序:
在启动时,DesignCompiler将搜索三个Setup文件,这三个文件都为.synopsys_dc.setup.从这个文件中,软件工具读取初始化的信息,如使用那些库和如何定制你的图形环境等。
尽管他们的名字相同,但是他们在不同的目录下。
1.Synopsys的根目录;
2.用户目录
3.启动Design_Compiler的当前目录
Tutorial——闹钟的设计
TOP
TOP是闹钟设计的最上层的模块,包括了对所有子模块的调用,而这些子模块都执行着闹钟设计的一个单独的功能。
ALARM_BLOCK
ALARM_BLOCK是分级模块的第二级,它控制闹钟的设定。
它有ALARM_BLOCK有四个输入信号:
•ALARM用来和HRS或MINS来设定闹铃时间
•CLK是系统时钟
•HRS用来和ALARM来设定闹铃时间
•MINS用来和ALARM来设定闹铃时间
ALARM_BLOCK有两个输出信号为:
闹铃的小时和分钟。
输出信号输出到MUX和COMPARATOR模块。
ALARM_BLOCK实例化了两个子设计:
•ALARM_COUNTER增加闹钟小时和分钟,并反映AM和PM设定。
•ALARM_STATE_MACHINE设置闹钟时间。
它有三个状态,如Figure6-3.
TIME_BLOCK
TIME_BLOCK类似于ALARM_BLOCK,只不过它是控制时间。
它是分级模块中的第二级模块,有四个输入:
•SET_TIME与HRSorMINS设置时间
•CLK式系统时间
•HRS与SET_TIME设置小时
•MINS与SET_TIME设置分钟
小时和分钟是TIME_BLOCK两个输出信号,他们输出到MUX和COMPARATOR模块。
TIME_BLOCK实例化两个子模块。
•TIME_COUNTER增加时间和分钟,并且反映Am和PM设置
•TIME_STATE_MACHINE用来设置和保存时间,状态机有3个状态,如Figure6-4.
MUX
MUX决定显示时间设置,使时间和闹铃的显示有效,它有5个输入信号:
•ALARM与HRS或MINS设置闹铃时间
•ALARM_HRS是从ALARM_BLOCK输入的闹铃小时
•ALARM_MIN是从ALARM_BLOCK输入的闹铃分钟
•TIME_HRS是从TIME_BLOCK输入的闹铃小时
•TIME_MIN是从TIME_BLOCK输入的闹铃分钟
MUX处理这些输入信号,并将结果输出到CONVERTOR_CKT,使CONVERTOR_CKT显示适当的时间和闹铃。
缺省的显示是时间。
当ALARM=1,显示闹铃。
COMPARATOR
COMPARATOR比较时间和闹铃,它有四个主要的输入信号:
•ALARM_HRS是从ALARM_BLOCK.来得小时闹铃信号
•ALARM_MIN是从ALARM_BLOCK来得分钟闹铃信号
•TIME_HRS是从TIME_BLOCK来得小时信号
•TIME_MIN是从TIME_BLOCK来得分钟信号
当闹铃和时间以及AM和PM都相等时,COMPARATOR发出一个信号到ALARM_SM_2模块。
ALARM_SM_2
ALARM_SM_2是有两个状态的状态机:
IDLE和ACTIVATE,如Figure6-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后失效。
例如:
九点的显示为9:
00而不是09:
00。
使用DesignAnalyzer设置设计环境
启动DesignAnalyzer
%design_analyzer&
读入一个分级的设计
读入VHDL包
1.选择File>Read.
出现读文件的窗口。
2.双击vhdl来进到vhdl目录。
3.选择synopsys.vhd.
4.点击OK.
出现VHDL的窗口window并且显示行为。
5.当DesignAnalyzer提示符(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他们。
当你分析这些设计模块是,DesignCompiler将结果文件存在WORK目录下。
读入VHDL文件并且建立vhdl中间设计文件。
分析VHDL设计
1.选择File>Analyze.
2.用鼠标左键选择设计模块。
选择ALARM_COUNTER.vhd。
当你运行UNIX下的DesignAnalyzer来分析ALARM_COUNTER。
3.用鼠标中键选择其余的设计模块:
ALARM_STATE_MACHINE.vhd
HOURS_FILTER.vhd
TIME_COUNTER.vhd
TIME_STATE_MACHINE.vhd
4.点击OK.
出现分析窗口显示分析的命令,如Figure7-3,设计中间文件存在work库文件中。
5.点击Cancel关闭分析窗口。
ElaborateVHDL模块
分别Elaborate这五个VHDL模块。
Elaborate命令将把设计文件的中间文件解析成.db格式。
Elaborate每个VHDL模块:
1.选择File>Elaborate.出现Elaborate设计窗口,如Figure7-4。
2.选择Library中的WORK.
3.选择Re-AnalyzeOut-Of-DateLibraries
4.选择Designlist中ALARM_COUNTER(BEHAVIOR).
5.点击OK.
在DesignAnalyzer窗口中,出现ALARM_COUNTER的elaborated后的图标。
6.重复上述elaboration过程(从第1步开始)
ALARM_STATE_MACHINE(BEHAVIOR)
HOURS_FILTER(BEHAVIOR)
TIME_COUNTER(BEHAVIOR)
TIME_STATE_MACHINE(BEHAVIOR)
7.点击Cancel关闭Elaborate窗口。
Designsview可以显示这些设计的图标
读入PLA设计
使用Read命令来读入不是VHDL和Verilog格式的文件。
CONVERTOR.pla设计是PLA格式的
读入CONVERTOR模块
1.选择File>Read.
2.选择.db目录
db目录有Synopsys.db格式的文件
3.点击OK.
读文件的窗口出现并先是db目录中的设计文件。
如Figure7-7。
4.点击滚动条,可以看到其他的文件。
读文件窗口列出了所有目录下的文件,但是只有.snopsys_dc.setup中view_read_file_suffix设定的后缀的文件可以显示出来。
5.选择CONVERTOR.pla.如Figure7-9
6.选择Setup>CommandWindow.
7.点击读入文件窗口中的OK。
DesignAnalyzer读入文件并关闭读入文件窗口。
DesignAnalyzer显示用其它的图标来表示第三层的设计——CONVERTOR如Figure7-11。
8.最小化命令窗口
读入第二级设计
第二级包括:
ALARM_BLOCK
ALARM_SM_2
COMPARATOR
CONVERTOR_CKT
TIME_BLOCK
MUX
象读入最底层设计一样analyze和elaborate上面的第二层设计
读入最上层设计
Analyze和elaborateTOP.vhd
当你读入了TOP模块后,全部的闹钟的设计的分级的层次结构都已经读入,并且显示在DesignsView中有13个图标,如Figure7-16.
用DesignAnalyzer设置特征参数:
在读入设计后,要说明设计的环境变量,这些环境变量包括了当信号到达端口(port)时,他们的的驱动能力,或者输出端口的负载能力。
本节就是描述如何来设置闹钟设计的这些参数。
为TOP模块设置参数
设置参数时可以使用Symbolview。
1.选择TOP.
2.单击向下的箭头。
3.点击SymbolView按钮。
设置输入端口的驱动能力
假设除了CLK的所有输入端口的驱动能力为0.08(单位由目标库决定)。
你可以同时选定并设定所有的要设定的输入端口。
1.使用鼠标左键来选择输入端口ALARM;
2.使用中间选择其他的除了CLK之外的所有的输入端口,见Figure7-17。
设置驱动能力
1.选择Attributes>OperatingEnvironment>DriveStrength显示DriveStrength窗口,如Figure7-18。
当你选择了一个端口时,在PortName区域里会显示这个端口的名字,如果你选择了不知一个端口时,这个区域就会是空白的,而你在这个窗口输入的值将应用为所有选定的端口。
2.在RiseStrength处键入0.08,而FallStrength将自动会被设为0.08,因为“SameRiseandFall”这个选项缺省的情况下是选定的。
3.单击Apply。
你可以将端口的驱动的值设为与库中单元的输出引脚的驱动能力的值相同。
当你不知道在库中你所需要地引脚的驱动值时,你可以使用drive_of命令来找出并且设置这个值。
假设CLK的驱动值要设为与buffer单元B4I的Z引脚的驱动能力相同。
注意:
:
在例子中,我们用set_drive来设定驱动能力,然而set_driving_cell比set_drive有更高的优先级。
set_driving_cell命令将一个输入引脚和一个驱动单元相关联,而不是与一个具体的驱动的值相关联。
设置CLK的驱动能力
在这里,我们要将CLK的驱动能力设为与B4I的Z引脚的驱动能力相同。
1.在Symbolview下,选择CLK。
2.点击RiseStrength区域,按下Ctrl-u来删掉值0.00。
3.在RiseStrength区域中,输入:
drive_of(class/B4I/Z)。
DesignAnalyzer将该命令复制到FallStrength区域。
4.点击Apply。
Rise和fall的值(0.0335)出现在相应的框中,如Figure7-19所示。
更改驱动能力
在设置过输入端口的驱动能力后,还可以对其进行修改。
假设在本例子中,我们之前设置的输入端口SET_TIME的驱动能力不对,可以按下面的不走对其进行修改:
1.选择SET_TIME端口。
2.把RiseStrength的值改写为0.06,FallStrength的值同时被更新为0.06。
3.点击Apply。
4.点击Cancel来关掉DriveStrength窗口。
设置输出端口的负载能力
设置SPEAKER_OUT的负载能力
负载能力用来对某个限定的模块的输出端口的负载的容量建模。
你可以将端口的负载能力设置位于库单元的负载值相同。
当你不清楚所需要的库单元的负载值时,使用load_of命令来决定和设置一个负载值。
假设端口SPEAKER_OUT驱动5个反向器,而反向器同库单元IVA(目标库中的一个反向器)相同。
1.选择SPEAKER_OUT端口
2.选择Attributes>OperatingEnvironment>Load来打开Load窗口,如Figure7-20。
3.在Capacitiveload中填上load_of(class/IVA/A)*5,在星号(*)前留个空。
注意引脚A是IVA的输入端口。
4.点击Apply,capacitiveload的值自动计算出来为7.50。
SPEAKER_OUT驱动能力为5个反向器,每个反向器的负载值为1.5,所以SPEAKER_OUT的负载值为1.5*5=7.5。
5.点击Cancel退出Load窗口。
设置总线的驱动能力
假设端口DISP1和DISP2每个的驱动能力都为3(标准负载),AM_PM_DISPLAY的驱动能力为2(标准负载)。
设置DISP1的驱动:
1.选择DISP1。
2.选择Attributes>OperatingEnvironment>Load。
出现两个Load和BusSelector窗口,如Figure7-21。
使用BusSelector窗口选择要设置参数的总线的位。
在这个窗口中,所有的位都被选中。
如果只想设置一个位的负载的话,只用选择某个位,然后在Load窗口中键入值即可。
在这里,我们将整个总线设置相同的参数
3.点击Cancel关闭BusSelector窗口。
4.在Capacitiveload域中,键入3。
5.点击Apply,负载值就被赋给了DISP1。
运用同样的过程将3赋给DISP2。
设置AM_PM_DISPLAY的负载能力
1.选择AM_PM_DISPLAY。
2.在Capacitiveload域填入2。
3.点击Apply。
4.点击Load窗口中的Cancel。
为最上层模块设置其他的特性
有些特性是要为一个最上层模块设置的,但是并不是真对某个输入或输出端口。
这些参数会对设计的优化产生一个全局的影响。
这里我们要为TOP模块设置如下参数:
•WireLoad
•OperatingConditions
设置WireLoad
DesignCompiler优化以线网的扇出为基础来从连线负载(wireload)模型来估计连现长度。
DesignCompiler使用这个信息来计算连线长度和传输延迟。
连线负载(wireload)模型由估计的die的大小来决定。
在目标库中连线负载都有定义
如果ASIC的库支持的话,DesignCompiler以面积为基础自动选择连线负载表
1.选择TOP。
2.选择Attributes>OperatingEnvironment>WireLoad,出现WireLoad窗口,如Figure7-22,
3.选择10x10(class),在库文件的定义中,10x10对应于的die的大小为1mmx1mm。
4.点击OK。
设置运行条件(OperatingConditions)
运行条件就是温度、过程、运行电压等。
目标库定义了这些运行条件。
库的生产厂商定一个一个与其他昌上不同的默认的运行条件。
通用的默认的运行条件为:
•温度–25C
•过程–1
•电压–5
DesignCompiler的静态时序分析是对设计的驱动能力,到达时间以及负载能力的变化对电路时序特征所带来的影响建模。
同样,你能个分析一个设计的最好、中等、最坏特性或运行条件。
设置运行条件:
1.选择Attributes>OperatingEnvironment>OperatingConditions.
OperatingConditions窗口如Figure7-23所示,其间列出了目标库中的运行条件。
每一个运行条件的后面都有括号包括着目标库的名字。
2.选择WCCOM(class),在这里,我们假设运行条件为最差的情况(WCCOM),按目标库中定义的,温度为70.0F,过程为1.5,电压为4.75。
3.点击OK.
保存设计
在设置完设计的特性后,保存文件
将TOP模块保存为.db格式,
1.选择File>SaveAs打开SaveDesign窗口,文件名显示为TOP.db。
2.改变目录到tutorial/db/directory.
3.输入TOP_attributes.db作为文件名,并保存这个文件。
4.检查“VerifythattheSaveAllDesignsinHierarchyoption”设置为on。
5.点击OK。
DesignAnalyzer保存了设计和所设置的特性参数。
使用dc_shell来设置设计环境
Startingdc_shellinUNIX
dc_shell提供了两种命令行模式。
dcsh模式使用的是Synopsys开发的命令行语言。
Tcl模式是基于ToolCommandLanguage(Tcl)的。
启动DesignCompiler,键入dc_shell命令,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”,表示命令成功完成。
读入一个层次化设计
简化一个大而复杂的设计的方法就是将它分为小的部分,每个部分都完成一个功能,这些小的部分就为子模块。
一个设计韩又一个或多个子模块就是一个层次化的设计。
层次化设计可以含有多个层,每层含有一个或多个子模块。
最上层模块则调用或引用这些子模块。
AlarmClock设计是个层次化设计,TOP是最上层模块。
在任何时候使用dc_shell保存设计
保存设计设置,将使用dc_shell的write命令。
这个命令将整个设计写入磁盘。
其语法:
write[-formatformat][-hierarchy][-no_implicit][-modified][-outputfile][-librarylibrary_name][design_list][-names_filemapping_name_files][-donot_expand_dw]
读入VHDL包
如果你要使用VHDL格式,那么必须要在读入设计文件前先读入VHDL包。
包的文件名为synopsys.vhd,它在vhdl目录下。
•键入下面的命令:
dc_shell>read-formatvhdl{“./vhdl/synopsys.vhd”}或者
dc_shell-t>read_file-formatvhdl[list{./vhdl/synopsys.vhd}]
例子输出
在成功之行Read命令后,dc_shell输出如下内容:
Loadingdbfile‘/usr/synopsys/myarch/libraries/syn/standard.sldb’
Loadingdbfile‘/usr/synopsys/myarch/libraries/syn/gtech.db’
Loadingvhdlfile‘/usr/synopsys/tutorial/vhdl/synopsys.vhd’
ReadingintheSynopsysvhdlprimitives.
/bohm/tutorial/vhdl/synopsys.vhd:
Information:
Savingthepackage‘synopsys’.(HDL-202)
Nodesignswereread
{}
读入最低层的设计
AnalyzingtheVHDLDesigns
使用analyze和elaborate命令来读入五个VHD