微电子学实验室实验教程ASIC综合器软件——DesignCompiler实验2006-7DesignCompiler实验前言DesignCompiler(简称DC)是synopsys公司的ASIC综合器产品,它可以完成将硬件描述语言所做的RTL级描述自动转换成优化的门级网表。
DC得到全球60多个半导体厂商、380多个工艺库的支持。
Synopsys的逻辑综合工具DC占据91%的市场份额。
DC是工业界标准的逻辑综合工具,也是Synopsys最核心的产品。
它根据设计描述和约束条件并针对特定的工艺库将输入的VHDL或者Verilog的RTL描述自动综合出一个优化的门级电路。
本实验对DC软件的使用进行简单的介绍,熟悉和掌握综合器软件使用中的基本概念和术语,了解如何对数字电路施加约束,掌握同步数字电路设计、约束和优化的方法,了解时钟的概念,理解同步电路静态时序分析(STA)的方法和时序报告。
西安交通大学微电子学实验室实验1setup和synthesis流程实验准备有两种界面可以运行DesignCompiler:1)命令行界面,dc_shell-xg-t;2)图形用户界面(GUI),DesignVision。
本次实验主要运用GUI模式。
图1.1给出了RTL逻辑综合的直观概念和简要流程。
图1.1RTL逻辑综合的直观概念和简要流程。
在DC中,总共有8种设计对象:z设计(Design):一种能完成一定逻辑功能的电路。
设计中可以包含下一层的子设计。
z单元(Cell):设计中包含的子设计的实例。
z参考(Reference):单元的参考对象,即单元是参考的实例。
z端口(Port):设计的基本输入输出口。
z管脚(Pin):单元的输入输出口。
z连线(Net):端口间及管脚间的互连线。
z时钟(Clock):作为时钟信号源的管脚或端口。
DesignCompiler实验检查.synopsys_dc.setup文件DC使用名为“.synopsys_dc.setup”的启动文件,用来指定综合工具所需要的一些初始化信息。
启动时,DC会以下述顺序搜索并装载相应目录下的启动文件:1)、DC的安装目录;2)、用户的home目录;3)、当前启动目录。
1.将实验文件拷至自己的工作目录:unix%cd~unix%cp–r/cad/Labs/synopsys/dc/DC_1_2004.12./2.进入risc_design文件夹。
用文本编辑器或者文本编辑命令vi打开.synopsys_dc.setup文件。
unix%cdDC_1_2004.12/risc_designunix%ls–a3.检查以下语句是否在.synopsys_dc.setup文件中。
settarget_library"core_slow.db"setlink_library"*core_slow.db"setsymbol_library"core.sdb"setsh_enable_line_editingtrueztarget_library用于设置综合时所要映射的库,target_library中包含有单元电路的延迟信息,DC综合时就是根据target_library中给出的单元电路的延迟信息来计算路径的延迟。
zlink_library是链接库,它是DC在解释综合后网表时用来参考的库。
一般情况下,它和目标库相同;当使用综合库时,需要将该综合库加入链接库列表中。
注意:在link_library的设置中必须包含’*’,表示DC在引用实例化模块或者单元电路时首先搜索已经调进DCmemory的模块和单元电路,如果在linklibrary中不包含’*’,DC就不会使用DCmemory中已有的模块,因此,会出现无法匹配的模块或单元电路的警告信息(unresolveddesignreference)。
zsymbol_library为指定的符号库。
symbol_library是定义了单元电路显示的Schematic的库。
用户如果想启动design_analyzer或design_vision来查看、分析电路时需要设置symbol_library。
zsynthetic_library是DesignWare综合库,在初始化DC的时候,不需要设置标准的DesignWare库standard.sldb用于实现HDL描述的运算符,对于扩展的DesignWare,需要在synthetic_library中设置,同时需要在link_library中设置相应的库以使得在链接的时候DC可以搜索到相应运算符的实现。
zsearch_path指定了综合工具的搜索路径。
图1.2给出了实验将要用到的文件夹risc_design的结构。
实验的HDL源代码(sourcecode)已经被转换为ddc格式,保存在子文件夹unmapped下。
注意:在所有实验中,都必须在文件夹下risc_design启动DesignCompiler。
西安交通大学微电子学实验室启动designvision1.在risc_design目录下启动designvision。
留意LOG区域的信息”StartingshellinXGmode…”risc_design>synopsys.setuprisc_design>design_vision-xg2.选择菜单File—>Setup,检查库是否设置正确。
点击Cancel关闭窗口。
图1.2文件夹risc_design的结构图1.3designvision图形用户界面(GUI)DesignCompiler实验3.在启动designvision的Terminal窗口,输入以下命令进一步确认库设置变量(librarysetupvariable)。
design_vision-xg-t>printvartarget_librarydesign_vision-xg-t>printvarlink_librarydesign_vision-xg-t>printvarsymbol_librarydesign_vision-xg-t>printvarsearch_path读入文件1.选择菜单File—>Read或者直接点击,双击文件夹unmapped/,选中PRGRM_CNT_TOP.ddc并打开。
在Hier.1窗口你将看到PRGRM_CNT_TOP,I_PRGRM_FSM,I_PRGRM_DECODE,I_PRGRM_CNT的图标。
2.选择菜单File—>LinkDesign—>OK,查看LOG区域有无warning或error信息。
3.在designvision图形用户界面下方或在启动designvision的Terminal窗口,输入以下命令,观察LOG区域。
图1.5Hier.1窗口图1.4库设置对话框西安交通大学微电子学实验室design_vision-xg-t>list_designsdesign_vision-xg-t>list_libs熟悉Designs-,Symbol-,Schematic-视图1.Designs视图:左键单击选中PRGRM_CNT_TOP,在窗口右下方将观察到:。
2.Symbol视图:单击工具栏黄色图标,进入Symbol视图。
3.Schematic视图:单击工具栏黄色图标,进入Schematic视图。
4.现在图形用户界面有三个窗口,最大化其中的一个,点击中不同的按钮,可以显示不同的窗口。
5.显示Hier.1窗口,在LogicHierarchy窗口分别选中I_PRGRM_FSM,图1.6Symbol视图图1.7Schematic视图DesignCompiler实验I_PRGRM_DECODE,I_PRGRM_CNT,单击工具栏黄色图标和,显示它们的Symbol和Schematic视图。
6.除PRGRM_CNT_TOPSchematic视图外,关闭其它视图窗口。
双击标有PRGRM_CNT的块(BLOCK),点击工具栏图标回到PRGRM_CNT_TOPSchematic视图。
用Script文件加约束1.打开PGRRM_CNT_TOPSymbol视图。
2.选择菜单File—>ExecuteScript...,弹出对话框。
选中/scripts文件夹下的example.tcl文件,选中Echocommands选项,然后点击Open。
电路的面积单位有可能是2输入与非门、晶体管或um2。
目标库到底用哪种面积单位,需要咨询库的供应商。
ssc_core_slow中单元and2a1的面积是12.54。
图1.8用Script文件加约束对话框西安交通大学微电子学实验室编译(compile)1.在designvision窗口下方输入:design_vision-xg-t>compile2.观察I_PRGRM_FSM,I_PRGRM_DECODE,I_PRGRM_CNT的Schematic视图。
时序(Timing)和面积(Area)报告1.返回到PRGRM_CNT_TOPSymbol视图。
2.将鼠标停留在工具栏柱状图图标上,将会出现关于图标作用的提示,点击PathSlackHistogram图标,弹出对话框,直接点OK。
3.在启动designvision的Terminal窗口输入:design_vision-xg-t>report_constraint–all_violators记录以下信息:最大延迟(MaxDelay):LargestViolation(Slack)__________________________最大面积(MaxArea):ActualArea______________________________________注意:你也可以分别用report_timing和report_area命令来报告最大延迟和最大面积。
4.显示PRGRM_CNT_TOPSchematic视图。
5.选择菜单View—>Hihglight—>CriticalPath,显示最关键路径。
6.取消highlight选择:View—>Hihglight—>ClearAll(Ctrl+M)。
保存设计1.返回到PRGRM_CNT_TOPSymbol视图。
2.选择菜单File—>SaveAs,弹出对话框。
双击文件夹/mapped,确认SaveAllDesignsInHierarchy按钮被选中。
输入my_first_design.ddc,点击save。
DesignCompiler实验图1.9保存设计对话框3.选择history按钮,点击按钮SaveContentsAs,将命令历史保存在risc_design文件夹下,命名为run_dvxg.txt。
退出designvision1.选择菜单File—>RemoveAllDesigns,清除designvision内存中的所有设计(design)文件。
2.在designvision图形用户界面下方或在启动designvision的Terminal窗口,输入以下命令,观察LOG区域,发现designvision内存中的设计文件已被清除。
如果要清除designvision内存中的designs和libraries,可以用命令remove_design–all。
design_vision-xg-t>list_designs3.选择菜单File—>Exit,退出designvision。
思考为什么要创建一个.synopsys_dc.setup文件?实验2设置Constraints和Attributes实验准备我们设计电路总是有一个设计目标,DesignCompiler用设计约束来描述这个目标。
这里所说的目标主要包括时序目标和面积目标,所以设计约束也由时序约束(TimingConstraints)和面积约束(AreaConstraints)组成。
时序约束主要包括时钟周期(组合电路不需要时钟的设置)、输入延时、输出延时等内容。
面积约束用来设置电路的最大面积。
图2.1TimingandAreaConstraints设置另外电路的性能还受实际工作环境的影响,所以我们用DesignCompiler综合电路时还必须设置环境属性(EnvironmentalAttributes)。
环境属性主要包括电路工作时的温度、电源电压,以及输入驱动、输出负载、互连线负载模型等。
图2.2EnvironmentalAttributes设置本次实验我们将在dc_shell-xg-t模式下设置电路的时序面积约束和环境属性。
图2.3给出了做电路综合所需要的一些设置、命令以及综合的全过程。
图2.3综合的全过程以及各个步骤所使用的命令本次实验的电路示意图如图2.4所示,时序面积约束和环境属性如表2.1所示。
表2.1PRGRM_CNT_TOP的时序面积约束和环境属性时钟频率(ClockFrequency)250Mhz(4ns)50%占空比时钟歪斜(ClockSkew)0.25ns输入端口(最坏情况输入延迟)Tclk-q=1.7ns输出端口(最坏情况输出延迟)所有输出端口寄存器输出面积目标(AreaGoal)无电源和温度变化(VoltageandTemperatureVariation)1.8V+/-0.18V,0。
Cto125。
unix%cdrisc_designunix%dc_shell-xg-t2.检查库设置变量(librarysetupvariable)。
确认target_library是”core_slow.db”,link_library是”*core_slow.db”。
如果libraryvariables没有设置正确,退出DC,在正确的文件夹下重新启动。
记住:库变量是在risc_design文件夹下的.synopsys_dc.setup文件中设置的。
dc_shell-xg-t>printvartarget_librarydc_shell-xg-t>printvarlink_library3.读入文件unmapped/PRGRM_CNT_TOP.ddc。
用helpread*来帮助决定用那条命令。
实验过程中如果对那条命令用法不清楚,可以用help–verbosecommand_name,图2.4实验2电路示意图command_name-help或mancommand_name寻求帮助。
dc_shell-xg-t>helpread*dc_shell-xg-t>read_ddcunmapped/PRGRM_CNT_TOP.ddc4.链接。
在进一步工作之前,需要将设计中调用的子模块与链接库中定义的模块建立对应关系,这一过程叫做链接。
这一过程可以利用link命令显式地完成,也可以将来综合时利用compile命令隐式地进行。
推荐每次设计读入以后都用link命令执行一次链接。
注意:由于该命令以及以后提到的大部分命令均对当前设计(current_design)进行操作,所以在执行该命令前应正确设置current_design变量。
dc_shell-xg-t>current_designPRGRM_CNT_TOPdc_shell-xg-t>link查看core_slow库1.工艺库(technologylibrary)的名字有可能和文件名不同。
用以下命令列举出DC内存中的库名以及对应的文件名。
dc_shell-xg-t>list_libszDC内存中有哪些库?ssc_core_slow,gtech和standard.sldb。
z目标库(targetlibray)对应的工艺库名又是什么?ssc_core_slow,和文件名core_slow.db不同。
2.用以下任一命令生成ssc_core_slow库的报告。
dc_shell-xg-t>report_libssc_core_slow或者dc_shell-xg-t>viewreport_libssc_core_slow在报告的上端,我们可以得到库的单位。
约束PRGRM_CNT_TOP1.reset设计。
命令reset_design将清除设计原有的约束。
dc_shell-xg-t>reset_design2.用命令all_inputs和all_outputs查看所有的输入端口和输出端口。
dc_shell-xg-t>all_inputsdc_shell-xg-t>all_outputs3.生成一个频率为250Mhz的时钟my_clk,连接到时钟端口Clk。
dc_shell-xg-t>get_ports–helpdc_shell-xg-t>create_clock–period4\-namemy_clk[get_portsClk]命令在一行写不下,可以换行,行与行间用“\”连接。
4.设置时钟歪斜为0.25ns。
dc_shell-xg-t>get_clocks–helpdc_shell-xg-t>set_clock_uncertainty0.25\[get_clocksmy_clk]5.约束输入端口的时序。
因为本实验中所有输出都由寄存器输出,由图2.5可知,最大输入延迟则为最坏情况下的Tclk-q,最小输入延迟则为最好情况下的Tclk-q。
图2.5输入路径的约束dc_shell-xg-t>set_input_delay-max1.7-clockmy_clk\[remove_from_collection[all_inputs][get_portsClk]]dc_shell-xg-t>set_input_delay-min0.2-clockmy_clk\[remove_from_collection[all_inputs][get_portsClk]]命令remove_from_collection将它的第二个参数(argument)从第一个参数中滤去。
dc_shell-xg-t>set_max_transition0.25\[remove_from_collection[all_inputs][get_portsClk]]7.约束输出端口的时序。
既然所有输出都由寄存器输出,那么由图2.6可知,最大输出延迟应该为(Tperiod-Tclk-q,max),最小输出延迟为(TT,min-Thold)。
dc_shell-xg-t>set_output_delay–max2.3\–clockmy_clk[all_outputs]dc_shell-xg-t>set_output_delay–min-0.3\–clockmy_clk[all_outputs]8.生成一份时钟报告。
确认时钟周期是4,时钟歪斜是0.25,时钟源是Clk。
dc_shell-xg-t>report_clock–skew–attributes9.生成一份所有端口的报告。
因为报告较长,我们可以用view功能。
dc_shell-xg-t>viewreport_port–verbose另外,我们还可以查看单独一个端口上的约束,如Clk端口。
dc_shell-xg-t>report_port–verboseClk图2.6输出路径的约束设置PRGRM_CNT_TOP的环境属性1.工作条件(OperationConditions):本实验将用库文件core_slow.db中默认的工作条件。
所以不需要执行任何命令。
如果你想更改工作条件,可以用命令set_operation_conditions来指向库中其它的工作条件模型。
另外,用以下命令可以知道库中默认的工作条件。
dc_shell-xg-t>get_attributessc_core_slow\default_operating_conditions2.互连线负载模型(WireLoadModel):DC将基于你的电路面积自动选择互连线负载模型。
如果你想指定互连线负载模型,可以用命令set_wire_load_model。
查看ssc_core_slow库,回答以下问题。
dc_shell-xg-t>viewreport_libssc_core_slowz文件core_slow.db中定义了几个互连线负载模型?7个,分别是5KGATES,10KGATES,20KGATES,40KGATES,80KGATES,160KGATES,320KGATES。
z如果电路面积是200000的话,DC将会选择哪种互连线负载模型?40KGATES。
z互连线负载模型中电阻的单位是什么?1千欧姆。
3.设置端口环境:用set_driving_cell命令来指定驱动非时钟输入端口的单元输出pin。
dc_shell-xg-t>set_driving_cell–libraryssc_core_slow\–lib_cellfdef1a1–pinQ\[remove_from_collection[all_inputs][get_portsClk]]或者dc_shell-xg-t>set_driving_cell–libraryssc_core_slow\-lib_cellfdef1a1–pinQ[all_inputs]dc_shell-xg-t>remove_driving_cell[get_portsClk]确认Clk端口没有驱动单元dc_shell-xg-t>report_port–verboseClk4.报告驱动单元的属性:用以下命令显示驱动单元管脚(Pin)的所有属性。
dc_shell-xg-t>report_attribute\[get_lib_pinsssc_core_slow/fdef1a1/*]zdfef1a1有哪些管脚?D,E,CLK和Q。
5.限制输入端口的电容值。
dc_shell-xg-t>set_max_capacitance\[expr[load_ofssc_core_slow/and2a1/A]*5]\[remove_from_collection[all_inputs][get_portsClk]]6.指定最坏情况下的输出电容。
dc_shell-xg-t>set_load\[expr[load_ofssc_core_slow/and2a1/A]*15][all_outputs]7.生成一份设计报告。
确认设计PRGRM_CNT_TOP工作条件模型是slow_125_1.62,互连线负载模型是5KGATES(在不知道电路面积的情况下,5KGATES是默认的互连线负载模型)。
dc_shell-xg-t>viewreport_design8.生成一份详细的端口报告。
确认所有输出端口管脚负载(PinLoad)是0.03,fdef1a1寄存器驱动除Clk端口外的所有输入端口。
dc_shell-xg-t>viewreport__port–verbose编译和保存设计1.保存所有设计约束和环境属性。
dc_shell-xg-t>write_script–outputscripts/pc_w.tcl浏览新生成的文件pc_w.tcl,它应该包含你给设计PRGRM_CNT_TOP设置的所有约束和属性。
unix%morescripts/pc_w.tcl2.编译设计PRGRM_CNT_TOP。
dc_shell-xg-t>compile3.生成一份约束报告。
查看有没有时序违背(TimingViolation)或其它违背。
如果有,我们暂且不管它,留待实验3去调试。
dc_shell-xg-t>report_constraint–all4.层次化保存设计PRGRM_CNT_TOP。
dc_shell-xg-t>write–formatddc–hierarchy–outputmapped/PC.ddc5.退出DesignCompiler。
dc_shell-xg-t>quit实验3时序报告和调试实验准备本次实验的主要任务是:z理解命令report_timing生成的不同时序报告。
本次实验的电路示意图如图3.1所示,时序面积约束和环境属性如表3.1所示。
图3.1实验3电路示意图表3.1PRGRM_CNT_TOP时序面积约束和环境属性时钟频率(ClockFrequency)250Mhz(4ns)50%占空比时钟歪斜(ClockSkew)0.25ns输入端口(最坏情况输入延迟)Tclk-q=1.7ns输出端口(最坏情况输出延迟)所有输出端口寄存器输出面积目标(AreaGoal)无电源和温度变化(VoltageandTemperature1.8V+/-0.18V,0。
instruction_lab3.tcl是脚本运行文件。
unix%cdrisc_designunix%dc_shell-xg-t–fscripts/instruction_lab3.tcl\|tee–iinstruction_lab3.logtee是一个标准的UNIX程序,它将其它程序的结果输出到文件和终端窗口(terminalwindow)。
2.检查instruction_lab3.log,确认文件中没有error。
dc_shell-xg-t>shgrep–ierrorinstruction_lab3.loggrep也是一个标准的UNIX程序,它的作用在整个文本文件中寻找特定字符串,并将所有出现该字符串的行打印。
在dc_shell环境下运行UNIX命令,前面加sh。
3.生成一份详细的端口报告。
确认PRGRM_CNT_TOP的时序约束和环境属性设置与表3.1一致。
dc_shell-xg-t>viewreport_port–verbose4.生成一份设计报告。
确认设计PRGRM_CNT_TOP的属性设置与表3.1一致。
dc_shell-xg-t>viewreport_design理解时序报告DC将电路分解成不同的信号时序路径(TimingPath),每条路径都有一个起点和一个终点。
起点是电路的输入端口或电路中寄存器的时钟管脚,终点是电路的输出端口或时序器件(sequentialdevices)中除时钟管脚外的其它输入管脚。
时序路径又根据控制它们终点的时钟分成不同的路径组(pathgroup),默认的路径组(thedefaultpathgroup)包含所有不受时钟约束的路径。
图3.2是路径分组的示意图。
图3.2路径分组示意图1.检查有没有未约束的时序路径(timingpath)。
dc_shell-xg-t>check_timing2.查看有几个路径组(pathgroup)。
dc_shell-xg-t>report_path_group3.生成一个默认的时序报告,生成的报告如图3.3所示。
时序报告由4个部分组成:路径信息部分(PathInformationSection),路径延时部分(PathDelaySection),路径要求部分(PathRequiredSection),总结部分(SummarySection)。
dc_shell-xg-t>report_timingPathInformationSectionPathDelaySectionIndividualContributiontoPathDelayRunningTotalofthePathDelaySignalTransitionTotalDelayPathRequiredSectionfromlibraryDatamustbevalidbythistimeSummarySection图3.3生成的时序报告回答以下问题。
从报告上部的“PathType”可以看出来。
z报告中路径的起点(Startpoint)和终点(Endpoint)分别是哪个端口或管脚?起点:Crnt_Instrn[21](一个输入端口)。
终点:I_PRGRM_CNT/PCint_reg[0]/D(内部寄存器的一输入端)。
z报告是在哪种工作条件(operationconditions)下生成的?slow_125_1.62。
z报告是符合(meet)还是违背(violate)它的约束条件?违背。
从报告底部的“VIOLATED”可以看出来,并且“slack”是负值。
slack为正值,表示路径符合时序约束,slack为负值,表示路径违背时序约束。
z“inputexternaldelay”是多少?这个数据是从哪里来的?“inputexternaldelay”是1ns,它由约束脚本文件instruction_cons.tcl中的命令set_input_delay设置。
z电路的分块(design’spartitioning)有没有分解一条组合路径(combinationalpath)?有。
路径从一个输入端口开始,经过I_PRGRM_DECODE和I_PRGRM_CNT的组合逻辑,最后终止在I_PRGRM_CNT中的一个寄存器输入管脚。
这条路径包含了I_PRGRM_DECODE和I_PRGRM_CNT的组合逻辑,被这两个电路块(Block)所分解。
从“librarysetuptime”可以看出来。
z“clockuncertainty”是多少?这个数据代表什么?0.25ns。
它表示时钟分支的歪斜,由命令set_clock_uncertainty设置。
4.生成一份带输入管脚的时序报告,有效数字6位。
dc_shell-xg-t>report_timing–input_pins–significant_digits6z这份报告和默认的报告有什么区别?这份报告将路径延时分解成一段段管脚对管脚(pin-to-pin)的延时,它将线网延时(netdelay)和单元延时(celldelay)分开显示。
5.生成一份显示线网名称(netnames)和扇出(fanout)的时序报告。
dc_shell-xg-t>report_timing–netsz每条线网的延时(delay)是多少?为什么?0。
命令report_timing–nets只显示线网的名称和扇出,所以Incr列总是显0。
z“Fanout”列表示什么?线网的扇出数。
终点:Current_State[2](输出端口)。
z报告是符合还是违背它的约束条件?违背。
从“outputexternaldelay”可以看出来。
它由命令set_output_delay–min设定。
我们现在将I_PRGRM_DECODE和I_PRGRM_CNT组合(group)到一个新的层次。
group以后的电路块名字(designname)为NEW_PC,实例名(instancename)为I_NEW_PC。
然后再在I_NEW_PC中取消组(ungroup),关于组(group)和取消组的概念分别如图3.5和图3.6所示。
图3.5group示意图图3.6ungroup示意图1.组合(group)I_PRGRM_DECODE和I_PRGRM_CNT。
组合成的新的设计实体名为NEW_PC,实例名为I_NEW_PC。
dc_shell-xg-t>group–design_nameNEW_PC–cell_nameI_NEW_PC\{I_PRGRM_DECODEI_PRGRM_CNT}2.报告设计的层次。
dc_shell-xg-t>report_hierarchy–noleaf3.在设计NEW_PC中ungroup2级以下的层次。
dc_shell-xg-t>ungroup–start_level2I_NEW_PC4.报告设计的层次,发现I_PRGRM_DECODE和I_PRGRM_CNT不见了。
dc_shell-xg-t>report_hierarchy–noleaf5.编译设计PRGRM_CNT_TOP。
dc_shell-xg-t>report_timing–delaymax7.显示所有的约束违背。
dc_shell-xg-t>report_constraint–all_violators解决holdtimeviolations的问题此节只是给大家介绍解决holdtimeviolations的方法。
1.执行下列命令解决holdtimeviolations的问题。
dc_shell-xg-t>set_fix_hold[all_clocks]dc_shell-xg-t>compile–incremental_mapping2.用命令report_constraint–all_violators报告所有约束违背。
报告显示“Thisdesignhasnoviolatedconstraints.”。
dc_shell-xg-t>report_constraint–all_violators保存1.层次化保存PRGRM_CNT_TOP到文件夹/mapped。
dc_shell-xg-t>write–formatddc–hierarchy\–outputmapped/instruction_lab3.ddc2.保存电路的verilog网表。
dc_shell-xg-t>write–format.ddc–hierarchy\–outputmapped/instruction_lab3.v3.保存用于反标注(back-annotation)的标准延时文件。
dc_shell-xg-t>write_sdfscripts/PRGRM_CNT_TOP.sdf4.退出DC。