集成电路EDA 课件5 第5章-RTL语言与工具-DC_第1页
集成电路EDA 课件5 第5章-RTL语言与工具-DC_第2页
集成电路EDA 课件5 第5章-RTL语言与工具-DC_第3页
集成电路EDA 课件5 第5章-RTL语言与工具-DC_第4页
集成电路EDA 课件5 第5章-RTL语言与工具-DC_第5页
已阅读5页,还剩278页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

集成电路EDA逻辑综合5.3本节学习目标掌握综合的概念掌握综合的目的掌握综合的步骤掌握综合的实现方法掌握综合的EDA工具1.架构的设计与验证2.HDL设计输入3.前仿真功能验证前端设计后端设计5.静态时序分析4.逻辑

综合6.形式验证工具12.ECO11.STA静态时序分析和后仿真10.时钟树生成8.布局规划9.自动放置标准单元7.数据准备13.Filler的插入14.布线15.DummyMetal的增加17.Tapeout16.DRC和LVS数字集成电路设计流程0introduction基本概念1.什么是逻辑综合?2.时间路径3.时序4.常见术语什么是逻辑综合?综合就是把HDL代码转换为门级电路的过程,用公式示:

综合=翻译

+优化

+映射(Synthesis=Translation+Optimization+Mapping)RTL源代码通用布尔门(GTECH)目标工艺库中的门什么是逻辑综合什么是逻辑综合?逻辑综合就是将HDL语言描述的行为级与RTL级的电路转换至门级的过程。‌逻辑综合不仅包括将HDL语言描述的电路转换为具有特定性能、‌面积和时序约束的门级网表,‌而且还涉及到标准单元的实例化和连接。‌常见的工具是Synoosys公司的DesignCompiler,将HDL语言描述的电路转换到基于工艺库的门级网表。逻辑综合是使用软件的方法来实现硬件,将门级电路的实现与优化工作留给逻辑综合工具的一种设计方法。它根据一个系统逻辑功能与性能的要求,在一个包含众多限制条件下,将行为级描述转化为指定的技术库中单元电路连接的方法。综合后的门级网表也是.v构成的Verilog代码,但是里面并没有的always或者assign这种语句,而是将标准单元(StandardCell)实例化并进行连接。综合的方法与结果如编写的RTL-level代码为:assignout=(a&b|c);综合产生的Gate-level代码为:ANDu1(.ino(a),.in1(b),.out(o));ORu2((.in0(o),in1(c),.out(out));综合的方法与结果1.决定电路门级结构‌2.寻求时序与面积的平衡‌3.寻求功耗与时序的平衡‌4.增强电路的测试性‌

综合最重要的目的是对电路进行约束,从而在性能、面积和时序之间寻求平衡。要获得良好的时序往往要牺牲面积和性能。综合的目的

逻辑综合的步骤为:转译(Translation)、优化(Optimize)、映射(Mapping)。转换阶段逻辑综合工具将高层语言描述的电路用门级的逻辑来实现,优化与映射是逻辑综合工具对已有的初始电路进行分析,去掉电路中的冗余单元,并对不满足限制条件的路径进行优化,然后将优化之后的电路映射到由制造商提供的工艺库上。综合的步骤逻辑综合是连接电路的高层次描述与物理实现的桥梁。逻辑综合结果的好坏直接取决于HDL的描述。面向VLSI设计现代EDA工程师需要知道“什么样的HDL语句对应什么样的电路”以及“什么样的电路对应什么样的HDL语句”,这样写出来的程序才能对“综合友好”。综合结果好坏的决定性因素一个好项目的设计作品,优秀的架构设计是必须的,同时优秀的代码也是必不可少的关键因素。什么算是好的代码?好代码最基本的特点就是清晰整洁。C++语言发明者BjarneStroustrup说:“代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,避免其他人优化时不知所措从而出现混乱状态。整洁的代码只做好一件事。”综合结果好坏的决定性因素DC常见术语库(Library)参考(Reference)设计(Design)单元(CellorInstance)端口(Port)管脚(Pin)线网(Net)时钟(Clock)DC常见术语moduletop(A,B,C,D,CLK,OUT1);inputA,B,C,D,CLK;outputOUT1;….INVU2(.A(BUS0),.Z(INV0));….endmoduledesignportreferencecellpinclocknet库:一组逻辑单元的集合。库包括库声明、库属性、库应用环境和每个单元的功能描述、

时间延时、面积、功耗等。逻辑综合库包含两种格式:1.自由文件格式.lib(任何文本编辑器都可以打开)2.synopsys应用程序可使用的格式.db(不可查看)DC常见术语—库DC常见术语—库(续)库文件夹一般包含:物理参数库符号库逻辑综合库标准单元Verilog模型标准单元版图可测性矢量压缩文件等DesignCompilerRTL代码DesignCompiler(DC)中包含了多种工具,如HDLCompiler,LibraryCompiler,PowerCompiler,DFTCompiler等,使得DC具有强大的功能,成为业界最流行的综合工具。逻辑综合工具--DesignCompiler(DC)

逻辑综合工具--DesignCompiler(DC)

DC本身的数据库由晶圆厂提供的工艺库脚本文件设计指标时序DRCDC逻辑综合的基本步骤主要包括以下几个阶段:1.启动DC2.参数设置3.读取设计4.链接和实例唯一化5.施加设计与环境约束6.综合优化7.时序收敛逻辑综合工具--DesignCompiler(DC)

Designcompiler有两种工作模式:GUI图形界面,TCL脚本模式。TCL启动前准备工作:设计的HDL源文件、采用的工艺库文件、设计的约束文件、工具的启动文件。通过将指令语句保存在TCL脚本中,使用dc_shell调用执行就能够高效的完成综合。DC综合的TCL脚本的包括:指定工艺库、读入设计、规定设计环境、设计约束、执行综合、输出网表、时序描述等文件。逻辑综合工具--DesignCompiler(DC)

图7.7TCL文件的编写流程及每个步骤主要使用的命令逻辑综合工具--DesignCompiler(DC)

流程图的第一步是准备HDL文件,这份文件是经过上述RTL级仿真证明功能正确的设计。第二步是Specifylibraries。什么是库(libraries)?为什么需要库?这里的库是一组逻辑单元的集合,包括库声明、库属性、库的应用环境和每个单元的功能描述、时间延时、面积、功耗等。DC运行中需要如下几种库文件:

目标库(target_library)、链接库(link_library)、

符号库(symbol_library)、综合库(synthetic_library)。TCL文件的编写流程说明1.逻辑综合目标库(target_library)是Gtech网表要最终映射到的库,库文件包含两种格式:自由文件格式.lib结尾;Synopsys应用程序可使用的格式.db结尾。目标库包含了各个单元Cell的行为、引脚、面积、时序信息等,DC会根据用户给定的约束(例如时钟频率和面积等)去选择合适的单元,去掉冗余的单元,最后将优化之后的电路映射到目标库上。2.链接库(link_library)是设置模块或单元电路的引用,指定购买的付费IP、存储器、IO等,例如购买了某公司的某个IP,则需要在这里指定。TCL文件的编写流程说明3.符号库(symbol_library)定义单元电路Schematic库,在design_vision图形化模式下查看综合图标需要设置,后缀是.sdb。4.IP库(synthetic_library)也称模型库,DC综合时用来将HDL代码转化为相对应的元件时所参考的模型库。进行库(libraries)指定的命令:set_app_vartarget_library../lib/smic18_ss.dbset_app_varlink_library../lib/smic18_ss.dbTCL文件的编写流程说明根据流程图,specifylibraries之后就是read_file。Gtech网表是根据设计转换而来,转换首先需要将设计HDL代码导入DC中,DC会使用软件内部的单元来替换设计文件,也就是使用gtech.db库中的单元来组成一个Getch网表,这一步骤使用的是标准逻辑门(与或非等)。此时读入的HDL代码可以是RTL级、门级或行为级,可以同时包含VHDL,Verilog以及Systemverilog和SystemC。TCL文件的编写流程说明DC将设计转换为Gtech网表的过程相当于翻译的过程,综合代码写好,通过命令读进DC,DC把千差万别的代码统一,把各种语言转换成统一表达格式,软件内部的基本单元,第一步映射转换成Gtech。约束要说明端口驱动能力,电容负载是大还是小等,第一步翻译的可能不太完美,需要做一些调整和优化。TCL文件的编写流程说明用工艺库的基本单元来表达RTL程序,根据映射选择哪种与非门等,也可以进行一些优化,但是DC可能综合失败。如果DC可以综合,综合后将得到网表。同时通过一些命令可以得到.sdf等时序文件,可以把这些延迟返标到代码中,约束生成.sdc文件。.ddc文件包含:门级网表,.v文件,延时信息(.sdf),工作约束(.sdc)等信息很丰富。旧版本软件的文件格式是.db。TCL文件的编写流程说明1.设计起于思想第一步是要有个Idea。2.功能的图形或文本描述给Idea建一些模型,通过框图,语言定义设计的指标,例如:主频多少,几个核,多少管脚等。DC综合设计简单的流程(如图5.8)3.行为级HDL和仿真语言描述通过语言描述把Idea具体实现,写代码是表达思想的过程,把Idea转化成具体实现。4.寄存器传输体系结构HDL行为级到传输级的转变,与行为级相比RTL是比较底层的描述,是真正的描述语言子集。DC综合设计简单的流程(如图5.8)5.逻辑综合这一步骤需要创建启动文件,做基本配置,为DC提供工艺库,提供寄存器、时钟等约束。DC进行编译把代码转换成基本单元,并产生报告文件。6.门级网表7.物理设计8.物理器件(芯片)DC综合设计简单的流程(如图5.8)DC综合设计简单的流程(如图5.8)图5.8DC综合设计全流程简图WLM(WireLoadModels)模式基于扇出计算R和C;拓扑

模式使用拥塞感知布线估计执行粗布局。WLM模式网络延迟可能被高估或低估,网表将包含缓冲过度和缓冲不足的门。DC通过线负载模型WLM综合后会吐出一个网表。延时包括基本单元的延迟和线延时。综合过程中互连RC的两种模式拓扑模式产生的RC与布局后的结果密切相关。需要物理库和技术数据,重新定义平面图以获得最佳效果。拓扑模式建议采用两级综合流程:布局工具用于设计平面图的第一个网表,放置和布线第二个网表(基于平面图)。综合过程中互连RC的两种模式通过工具、物理脚本、物理库告诉DC基本的放置,预布局,粗略的估计布局。DC根据两点距离估计延时,先综合一次,综合后交给后端工具(例如

ICCompiler)“吐”出一个布局,把后端“吐”出来的约束拿过来交给DC,因为这里面包含布局信息,计算延时就会准确一些。综合过程中互连RC的两种模式DC提出来的拓扑模型:综合过程中先简单做布局,拓扑模式使用拥塞感知布线估计执行粗布局,用于代替WLM以更好地预测寄生净RC(Resistor-Capacitor

),需要物理库和技术数据;建议采用两级综合流程,过程是第一个网表是默认或早期的平面图数据综合得到的,由设计规划工具来设计实际的平面图,使用实际的平面图合成第二个网表,发送到布局工具用于放置和布线,第二次综合结果相对准确。综合过程中互连RC的两种模式第一次综合:RTL代码→DC-T进行具有默认或用户定义的物理约束的初始综合→初始ddc网表→ICC/ICCII进行设计规划→平面图-DEF(DesignExchangeFormat)文件。第二次综合:RTL与第一次中综合得到的平面图-DEF文件→DC-T进行第二遍综合与实际(DEF)平面图→第二次ddc网表→ICC(ICCII)进行布局、CTS(ClockTreeSynthesis)与布线。DC二次综合设计流程(图5.9)图5.9DC二次综合设计流程图DC二次综合设计流程(图5.9)综合是约束驱动的,设计师通过约束来设定目标,编译器通过优化来满足目标。综合目标,就是面积更小,延迟更小,最好面积又小速度又快,这样性价比高,但是这两者往往是矛盾的。综合的约束为什么性能好面积就大?例如为了速度快,可以导线加宽,电阻就小,速度就快。很显然线宽增加面积就增加了,所以这是个矛盾,设计者和DC共同解决这个矛盾。综合是在两者之间做权衡,在一定程度上尽量做到“又快又小”,这需要经验,设计前端与后端的配合。如果不能同时满足时序和面积约束,则通常时序具有更高的优先级。综合的约束1.DesignVision(GUI)图形界面进入拓扑结构。Linux%design_vision-topographical_mode2.DCShell(shell)命令行。Linux%dc_shell-topographical_modedc_shell-topp>3.Batchmode批处理。Linux%dc_shell-topo-frun.tcl|tee-irun.log三个界面开启DC查找文件的位置和/或名字,在DC和Linux下通用。dc_shell-topp>pwd;cd;ls显示输入的命令的历史记录。dc_shell-topp>history执行任何Unix/Linux命令,前面要加上sh。dc_shell-topp>sh<Unix/Linux_command>常用的DC-shell命令举例1设计和技术数据DesignandtechnologyData加载设计和逻辑库;将要被综合的设计Verilog/SystemVerilog/VHDLRTL文件;逻辑库(.db文件);加载物理技术和设计数据;物理或布局库(Milkyway目录);技术或布线层定义文件(.tf文件);RC模型文件;平面图数据(TCL物理约束或DEF文件)。1.需要的库与文件这部分介绍设计文档和工艺库,其中由工艺库第三方代工厂提供,程序文档由设计者提供,由于所写的代码需要经过综合工具转变成门级网表,所以写代码的时候应该考虑,怎样写有利于提高一些性能,减小一些面积,怎样写组合逻辑才不会太大,关键处是不是需要做一些处理等,写代码的时候就要一边写一边考虑并且注意这些问题。设计者不知道所写的代码综合出来是什么,是不利的。前端设计者应该对理论有深入了解。1.需要的库与文件加载设计与技术数据应用技术约束综合设计分析设计写出数据结果保存选择适当的编译流创建约束文件创建配置文件编写RTL代码并进行仿真DC综合流程LoaddesignandlibrariesApplydesignconstraintsSynthesizethedesignWriteoutdesigndataWriteRTLcodeandsimulateCreatesetupfileSelectappropriatecompileflowCreateconstraintsfileAnalyzethedesignLinux%cdwork_directoryLinux%dc_shelldc_shell-topo>read_verilog{a.vb.vtop.v}dc_shell-topo>current_designtopdc_shell-topo>linkdc_shell-topo>check_designdc_shell-topo>write-fddc-hier-outxxx/top.ddc2.本单元所包含的命令dc_shell-topo>source-echo-verbosetop.condc_shell-topo>check_timingdc_shell-topo>compile-boundary-scan-maphighdc_shell-topo>report_constraint-all_violatorsdc_shell-topo>change_names-ruleverilog-hierdc_shell-topo>write-fverilog-hier-outmpd/top.vdc_shell-topo>write-fddc--hier-outmpd/top.ddcdc_shell-topo>exit2.本单元所包含的命令1)setup命令与变量.synopsys_dc.setup软件会有一个默认配置文件,前面以“.”开头是隐藏文件,要通过命令把隐藏文件显示出来。(当然并不是所有的“.”都代表隐藏文件。)2)有一些逻辑综合工具内部自定义的变量setsearch_path“$search_pathmappedrtllibscons”settarget_library22nm.dbsetlink_library“$target_library”setsymbol_library22nm.sdb

2.本单元所包含的命令2)有一些逻辑综合工具内部自定义的变量historykeep50aliasrc“report_constraint-all_violators”alias命令用来起别名,例如用rc代替后边一串命令,一般不建议用alias去做。history查看以前的命令,有时候会用到。前期工作准备好之后就要调用DC并且读入RTL文件。调用DC的路径称为CWD(CurrentWorkingDirectory)。一般要建层次化结构,通常有几层目录,用来放置工艺库,设计文档和约束文件。第三方提供的工艺库通常由两种格式.db(机器使用)和.lib(可读),.lib可以转化成.db。2.本单元所包含的命令加载库和平面RTL设计加载分层RTL设计加载物理数据3)使用命令将代码读入DCLinux$cdrisc_designLinux$dc_shell-topodc_shell-topo>…(Physicaldatasetupstep-shownlater)dc_shell-topo>read_verilogrtl/my_design.vread命令:加载默认的Gtech库和用户指定的链接库;读取RTL文件并转换为未映射的ddc;在DC存储器中加载设计;设定一个存储器中的设计到当前设计。2.本单元所包含的命令3)使用命令将代码读入DC如果读取的是VHDL,命令为:dc_shell-topo>read_vhdlrtl/MYREG_rtl.vhdread_vhdl命令从“VHDL设计库中”创建几个中间文件和目录。除非代码中另有说明,否则默认情况下,VHDL设计库称为“WORK”。默认“WORK”文件和目录放在CWD中。2.本单元所包含的命令调用DCread命令:加载默认的GTECH库和用户指定的链接库;读RTL文件并转换为未映射的ddc;在DC存储器中加载设计;设定一个存储器中的设计到当前设计。一般要建这样几个内容,一般有几层目录。放约束放代码放工艺库。第三方提供两种格式.db和.Lib,.lib可以转化成.db产生的中间文件不存在工程文件下,工程目录特别干净。把代码读进来GTECH是公司提供CWD:调用DC的路径Warning应该处理MYREG设计加载到DCmemory约束和编译未映射的RTL执行一个脚本错误:无法读取以下目标库。如果设置了.setup就用你写的.db替换这个文件。如果约束引用库元素,则在执行此步骤后可能看到警告,错误。需要一个“目标”技术库来综合门的RTL。拓扑结构把文件读进来,读进来之后,会开辟一片区域,把读进来的东西放进去,同时把库也放进去。检查时序,DC是基于路径的路径要是没有时序,DC就不知道怎么优化。编译命令,如果工艺库没有,会给出报告。约束文件,创建延时等逻辑技术库示例.lib格式的单元说明示例:针对特定的PVT角(例如最慢或最坏情况)“特征”传播与转换表。设计规则:注意:在compile_ultra优化期间,默认情况下,逻辑或缓冲DRC的优先级高于时间。1输入2输出,有的就写output,可以查。4)约束和编译未映射的RTLLinux$cdrisc_designLinux$dc_shell-topodc_shell-topo>read_verilogrtl/my_design.vdc_shell-topo>sourcecons/myreg.condc_shell-topo>check_timingdc_shell-topo>compile_ultra2.本单元所包含的命令读入文件之后,DC会开辟一片区域,将读入的内容放进去,同时将库文件也放进去。接下来的命令是添加约束文件,创建延时等,这里执行一个脚本文件。约束加好后需要检查时序,DC是基于路径的,如果路径没有时序,DC就不知道该如何优化。2.本单元所包含的命令检查时序之后是编译命令,如果没有工艺库,会给出报告,如果约束引用库元素,则执行编译步骤后可能看到警告,错误。错误是:无法读取以下目标库。如果设置了.setup就用设计者自己写的.db替换这个文件。错误原因是综合需要一个“目标”技术库来综合门的RTL,因为没有添加库,所以出错。2.本单元所包含的命令5)目标库编译用于创建特定于技术的门级网表。DC优化选择满足所需DRC(DesignRulesChecking)、时序和逻辑功能的最小门。printartarget_librarytarget_library=your_library.db6)用户必须指定第三方提供的实际综合库文件set_app_vartarget_librarylibs/65n_wc.db2.本单元所包含的命令7)添加库并保存门级网表Linux$cdrisc_designLinux$dc_shell-topodc_shell-topo>read_verilogrtl/MYREG_rtl.vdc_shell-topo>sourcecons/myreg.condc_shell-topo>check_timing2.本单元所包含的命令7)添加库并保存门级网表dc_shell-topo>set_app_vartarget_librarylibs/65n_wc.dbdc_shell-topo>compile_ultradc_shell>write-formatverilog-outputmapped/MYREG_mapped.vdc_shell>exit2.本单元所包含的命令7)添加库并保存门级网表命令行的顺序是:读代码,约束,检查时序路径是否有没约束的,编译前设置目标库,compile_ultra(这个代码放在前面没有意义,因为都没找到目标),退出DC前保存门级网表。2.本单元所包含的命令8)保存了网表之后可以读取和分析网表Linux$cdrisc_designLinux$dc_shell-topodc_shell-topo>read_verilogmapped/MYREG_mapped.vdc_shell-topo>set_app_vartarget_librarylibs/65n_wc.dbdc_shell-topo>sourcecons/myreg.condc_shell-topo>report_constraint-all_violators2.本单元所包含的命令8)保存了网表之后可以读取和分析网表可以查看约束报告——所有违反。有些违反说明不正确,但是有一些一定范围的面积违反没关系。Link_library里边不仅有目标库,还有IP核等,比如购买的IP核公司不提供代码,设计者看不到代码,只提供.db文件,DC可以使用它,这时候可以把这个文件放到链接库里,DC就可以到这里找IP核。2.本单元所包含的命令9)在链接之前需要指定link_libraryLinux%cdwork_directoryLinux%dc_shell-topodc_shell-topo>…dc_shell-topo>read_verilogmapped/MYREG_mapped.vdc_shell-topo>set_app_vartarget_librarylibs/65n_wc.dbdc_shell-topo>set_app_varlink_library“*target_library”dc_shell-topo>link2.本单元所包含的命令9)在链接之前需要指定link_library缩短文件名涉及起名字的问题,有时每读一个文件,都加一个路径非常繁琐。如果目录包含在search_path变量中,则可以省略它们。使用search_path变量会有一些搜索路径,当读入一个文件或一个库,DC在search_path目录中查找指定的设计和库文件,DC会按照这些路径一步一步去查找,除非没有这个文件。首先查看“CWD”,然后按顺序查看列出的目录。2.本单元所包含的命令10)用户可以将目录添加到默认列表中set_app_varsearch_path“$search_pathmapdrtllibscons”search_path可以多设置一些,当然设的过多速度会变慢,很显然范围大不容易搜索。这些变量需要在每个DC会话的早期指定(例如,在读取或链接命令之前)。可以将它们包含在DC安装文件中。2.本单元所包含的命令10)用户可以将目录添加到默认列表中dc_shell-topo>set_app_varsearch_path“$search_pathrtlunmapdconslibs”dc_shell-topo>read_verilogrtl/MYREG_mapped.vdc_shell-topo>set_app_vartarget_librarylibs/65n_wc.dbdc_shell-topo>set_app_varlink_library“*&$target_library”dc_shell-topo>linkdc_shell-topo>sourcemyreg.con…2.本单元所包含的命令11)一个启动文件三个文件位置.synopsys_dc.setup这个文件名不是乱起的,DC只认识这份文件名。(1)$SYNOPSYS/admin/setup(default)默认,优先级最低,不要改动。(2)~user(user’sgeneral)用户,优先级中等,一般情况下尽量不改动。(3)DCstartupdirectory(CWD)DC启动目录,优先级最高,在当前工作目录下,可以改动。这些文件将在DC启动时按显示的顺序自动执行。2.本单元所包含的命令默认DC设置文件启动时自动读取加载。#.synopsys_dc.setupfilein$SYNOPSYS/admin/setup…set_app_vartarget_libraryyour_library.dbset_app_varlink_library{*your_library.db}set_app_varsymbol_libraryyour_library.dbset_app_varsearch_path“$search_pathmapdrtllibscons”2.本单元所包含的命令12)技术库交换迁移到一个新的技术库时,应该总是从原始的RTL设计开始。set_app_vartarget_librarylibs/new_65n_wc.dbset_app_varlink_library“*new_65n_wc.db”read_verilogORIGINAL_RTL.vlinksourcecons/new.concheck_timingcompile_ultra2.本单元所包含的命令示例:交换库当迁移到一个新的技术库时,应该总是从原始的RTL设计开始。13)层次设计Verilog是层次化的树状结构。例化IP/Macro库单元语句如下:IP_LIB_RAMU_ram(.WR…14)不能查看内容的.ddc文件DECODEU_dec(.D1…15)可以在链接库中指出IP在链接库中包含IP或宏库单元,IP单元将在链接过程中解析。dc_shell>set_app_varlink_library“*$target_libraryIP.db”2.本单元所包含的命令层次设计解决IP或宏库单元可以在链接库指出IP,但是这个不需要在目标库中。16)阅读层次RTL设计方法不同,软件识别的currentdesign不同。例如命令:dc_shell-topo>read_verilog{TOP.vA.vB.v}列表中读取的第一个文件是当前设计。dc_shell-topo>read_verilogTOP_hier.v文件中读取的第一个模块是当前设计。dc_shell-topo>read_verilogTOP.vdc_shell-topo>read_verilogA.vdc_shell-topo>read_verilogB.v最后读取的文件是当前设计。2.本单元所包含的命令阅读层级RTL设计把代码读进来,最后读取的文件是当前设计列表中读取的第一个文件是当前设计文件中读取的第一个模块是当前设计阅读层级RTL设计17)指定当前设计指定当前设计是好的做法,在链接前指定当前设计,链接后检查设计,检查当前的设计是否存在链接和层次结构问题。例如:缺端口或者未连接的输入引脚,递归层级结构或多实例化。dc_shell-topo>current_designMY_TOPdc_shell-topo>linkdc_shell-topo>check_design2.本单元所包含的命令18)analyze与elaborate读取设计这两个命令也可以把文件读进来。dc_shell-topo>elaborateMY_TOP-parameters“A_WIDTH=8,B_WIDTH=16”19)显示读入文件将.ddc文件加载到DC内存中的推荐方法。dc_shell>read_ddc{decode.ddcencode.ddc}2.本单元所包含的命令通过elaborate修改参数elaborate是在读取设计时更改参数的唯一方法。这些值覆盖RTL代码中定义的默认值。读取.ddc设计文件将.ddc文件加载到DC内存中的推荐方法是显示读入这些文件。解码编码读.ddc(解码.ddc编码.ddc)20)编译前保存ddc命令行的顺序是:先把设计读进来,并设置一个顶层。read命令采用RTL代码并在DC内存中构建“GTECH”设计,即转换为未映射的ddc格式。dc_shell>read_verilog{TOP.vA.vB.v}dc_shell>current_designMY_TOPdc_shell>link2.本单元所包含的命令20)编译前保存ddc检查设计是否有问题。dc_shell>check_designdc_shell>write-formatddc-hier-outputunmPad/MY_top.ddc设计已经是“GTECH”格式,读DDC即可,注意如果修改代码,ddc也一定要修改。source约束。dc_shell>sourceTOP.condc_shell>check_timingDC要确保每一条都加了约束,DC工作的基本条件就是基于path。确保都没有问题的情况下编译,编译和VCS不同。dc_shell>compile_ultra2.本单元所包含的命令21)编译后保存ddc文件dc_shell>change_names-ruleverilog-hier可以改名字。ddc格式存储设计网表,约束和属性。这是将设计重新读入DC或将设计读入ICC等后端工具的有效格式22)综合后也要保存ddc文件dc_shell>write-formatverilog-hier-outputmapd/MY_TOP_net.vdc_shell>write-formatddc-hier-outputmapd/MY_TOP.ddc2.本单元所包含的命令回顾:拓扑模式综合过程中,拓扑模式使用拥塞感知路由估计执行粗布局。用于代替WLM以更好地预测寄生净RC需要物理库和技术数据建议采用两级综合流程第一个网表是默认或早期的平面图数据综合得到的。由设计规划工具来设计实际的平面图使用实际的平面图合成第二个网表发送到布局工具用于放置和布线2设计和库ObjectsDesignandLibraryObjectsObjects(物集)是DC对内部端口进行分类,便于管理和操作,包含两方面主题:列出不同类型的设计和库对象;创建包含指定对象名称和类型的集合。从Verilog角度看待Object。大概分为六大类:Design:往往就是top层。Clock:时钟是设计的心脏,因为数字电路基本都有时序,甚至可以说没有时序的电路不能算是一个数字电路。Port:是和外部通讯的接口,针对design。Net:连线往往是内部例化模块与模块之间的互连。Cell:例化取名字为了互相区分。Pin:是专门针对cell的,cell的引脚称为pin。Objects大概分为六大类,design往往就是top层。一个模块大部分有时序,心脏就是clockPort对外通讯的接口,针对design连线往往是内部例化模块与模块互连,通过名字例化等。例化取名为了区分。Pin是专门针对cell的,cell的引脚称为pin。从Verilog角度看待Object这个CLK是一个port这个CLK是一个net这个CLK是一个pin从另一个角度schematic来看Object例化,比较直观。三个CLK不同,写TCL语言约束怎么区分呢?当我们设置一个命令,current_designENCODER,它就从一个cell升级为一个design,顶层就是design,design和cell是可以相互转换的。六大类不同的Objects会有不同属性。写脚本约束实际就是设置属性,DC为芯片(仍在设计过程中的芯片)设置工作环境,约束过程就是建模过程。design和cell可以相互转换。当设置一个命令,current_designENCODE,该模块就从一个cell升级为一个design,顶层就是design。例如一个模块被例化,该模块就从design降到cell,port就变成pin,port与pin之间连线就是net。Objects有时会涉及port、net和pin等同名的问题,写约束的时候要注意区分。常见的如CLK是一个外部端口连接内部触发器的时钟端,这就是port、net和pin同名的情况。输出端口和连线同名也很常见,例如有触发器输出端Q连接到输出端口SUM,从Q到SUM的连线的名字也是SUM。Objects设置命令:set_load6SUM这个SUM就有歧义,表示放6个单位负载电容加在哪里?端口还是线上?负载加在线上和加在端口上DC处理起来原则是不同的:如果负载放到net上,计算连线延时使用线负载模型,延时模型根据这个电容计算延时信息,它会覆盖掉原来估算的导线负载(例如2个单位),结果电容是6个单位。如果这个负载放在port上,原来导线等效负载是2个单位,DC就会将导线和端口两个负载相加,等效负载的结果就是8个单位。同名的Objects涉及库要查看文档,对工艺库熟悉,做综合要好一些。这是一份.lib文件。涉及库的一类内容1.get命令。这是一个好的添加负载方式,确定负载加在哪里。dc_shell-topo>set_load6[get_netsSUM]DC综合代码的过程就是为芯片建模的过程,代码里不含有环境信息,但是芯片实际生产出来是有温度等环境的,DC在工艺库挑选出合适的元件来实现,能够满足设计的要求,在最差情况下保证芯片能工作。相关命令1.get命令get会返回一组结果(当然这一组可能是空的)。getport把所有端口放在一起(类似指针),如clk等,把六大类进行分类。如果不这样将端口分类,就要逐个端口去设定,分类之后就可以一次操作很多同类端口。相关命令2.all命令分类所有输入all表示所有:dc_shell-topo>all_inputs分类所有输出all表示所有:dc_shell-topo>all_outputs分类所有时钟all表示所有:dc_shell-topo>all_clocks相关命令3.remove命令可以从物集中去除一些内容,也可以添加(addto),去除和添加是反的。remove_from_collection[all_inputs][get_portsCLK]add_to_collection$pci_ports[get_portsCTRL*]相关命令4.get命令将具有相同特征的端口找出来(例如所有以p开头的端口找出来),建立一个集合。之后通过句柄或指针,命令foo指向这个集合。echo把foo的内容显示出来。显示时候出现一个代码(例如_sel184),可以访问局部或整体。get是特定的内容,all是全部。相关命令4.get命令dc_shell-topo>setfoo[get_portsp*]{pclkpframe_npidselPad[30]…}TCL:把foo的内容显示出来。

dc_shell-topo>echo$foocollentionhandle:_sel184相关命令5.筛选命令filter_collectionfilter_collection[get_cells*]“reg_name=~AN*”命令的意思是所有的cell构成一个大的集合,再挑出以AN开头的。综合的最后一步是映射(Mapped),写的模块可能最终也没有找到。get_cells*-filter“don’t_touch==true”这个筛选命令效率要更高一些,每一条指令的效率不同。对于集合可以整体访问,进行一次遍历,命令嵌套,挑出来所有层次结构的模块。相关命令foreach_in_collectioncell[get_cells\-hier*-filter“is_hierarchical==ture”]{echo“Instance[get_object_name$cellishierarchical]”}挑出来所有层次结构的模块显示出来。相关命令InstanceI_AblockishierarchicalInstanceI_Bblockishierarchical…List存放用户定义的内容,collection用来存放DC提取出来的内容,除clk(设计者自己定义)。相关命令3时序约束TimingConstraints时序约束和面积约束RTL综合流程LoaddesignandlibrariesApplydesignconstraintsSynthesizethedesignWriteoutdesigndataWriteRTLcodeandsimulateCreatesetupfileSelectappropriatecompileflowCreateconstraintsfile1.Areaconstraints2.Timingconstraints3.Environmentalattributes怎么加是重点。具体涉及怎么加clk,怎么约束寄存器和寄存器之间的延迟,怎么约束输入端口到寄存器之间延迟,怎么约束寄存器到输出端口的延时。设计说明书有要求,例如芯片的功能要求、频率(时钟)等,这些要求就在Specs中,约束添加时要加上,对于时序约束来说,所关注的是频率要求。要实现特定的频率,就需设定相应周期的时钟。时序约束DC是基于路径(Path)的,路径就包括起点到终点,例如:input和clk是起点,output是终点。时序约束Path1Path2Path3ZACLKFFQBDQ时序约束方法,分为以下三种:设置输入延迟set_input_delay;

设置输出延迟set_output_delay;设置时钟周期

creat_clock。时序约束图7.10中间蓝色部分是约束对象,其余是芯片外部。时序约束包含三部分:第一部分是约束内部寄存器与寄存器时间(前一个触发器时钟到后一个D口,FF2-FF3之间的时间是有一个时钟周期,对X约束要加命令规定最大延时。延时有两段,寄存器加组合逻辑X,还需考虑建立时间);第二部分是约束输入端口到寄存器之间的时间(M-N怎么约束);第三部分是约束寄存器到输出端口之间的时间(一个触发器时钟到S-T延时怎么约束)。还有一类是纯组合逻辑(图中F)约束。时序约束举例想要进行约束就要创建时钟,通过设定时钟周期来达到设置工作频率的目的,clk默认单位一般是ns。DC不知道clk加在哪个端口,需要说明。这里get返回的是cellection。时序约束图7.10DC约束路径图1.创建时钟的命令create_clock-period3[get_portsclk]创建clk一般有周期、占空比、名字。get_portsclk是必须要加的,如果不加是虚拟时钟,虚拟时钟一般是对逻辑和存储的路径进行约束。时钟输入到达两个不同触发器端口时间有延迟,延迟对时序有影响,怎样模仿?Skew就是时间差,要建模模仿。设定这样的命令:set_clock_uncertainty-setup0.2[get_clocksclk]假设建立时间是0.08,但是DC是估算工具,是建模工具,所以需要保守一些,在这里还要提前0.2。时序约束2.片外延迟和片内延迟晶振通过PCB(PrintedCircuitBoard)到板子间会有延迟为片外延迟。命令行中加-source模仿晶振到板子的片外延迟,不加-source的是pin角到寄存器之间的延迟。如:set_clock_latency-source-max4[get_clocksclk]set_clock_latency-max[get_clocksclk]时序约束3.真实时钟的上升沿和下降沿时钟真实的有上升沿和下降沿,就是有“斜坡”。DC计算组合逻辑门算的更精确。时钟边沿设置更准确,会影响到DC计算组合逻辑门的精确度。set_clock_transitionTt[get_clocksclk]时序约束Pre/postlayoutclock综合就是建模,模拟,估算,除了clk准一些,版图画好就不需要估算了。时序约束版图画好后,CTS是时钟树综合,DC可以自己提取参数,这个参数不需要估算了。4.时钟综合约束reset_designcreate_clock-p6-nMCLKclkset_clock_uncertainty-setup0.6MCLKset_clock_transition0.1MCLKset_clock_latency-source-max4MCLKset_clock_latency-max2MCLK综合要建模、模拟、估算,版图画好就不需要估算了。时序约束5.Post-CTSSTA(StaticTimingAnalysis)的综合约束reset_designcreate_clock-p6-nMCLKclkset_clock_uncertainty-setup0.3MCLKset_clock_latency-source-max4MCLKset_propagated_clockMCLK时序约束6.输入端口到寄存器的延时约束图7.10中N,假设有一个外围有一个触发器加一个组合逻辑M驱动N。set_input_delay-max0.5-clockclk[get_portsA]留给组合逻辑N的时间=时钟周期-输入延时-寄存器建立时间7.寄存器到输出端口的延时约束图7.10中S,假设外围驱动一个组合逻辑T和一个触发器。set_output_delay-max0.7-clockclk[get_portsC]FF3+S延时=时钟周期-端口到FF4的延时,DC会尽量优化把S延时限定在这个范围内。时序约束8.从输入集合去除clk输入延时不包含时钟,把clk从输入集合去除。set_input_delay-max0.6-clockclk\[remove_from_collection[all_inputs]\[get_portsclk]]有另外一种方法去掉clk端口。后一条命令会覆盖上一条命令。set_input_delay-max0.6-clockclk[all_inputs]remove_input_delay[get_portsclk]纯组合逻辑如何约束?纯组合逻辑没有时钟,要创建一个虚拟时钟。时序约束9.创建虚拟时钟虚拟时钟必须有名字。之前创建时钟可以没有名字,加在哪个端口就认为和端口是同一个名字。虚拟时钟没有和任何端口连接,名字相当于同一个参考源。create_clock-nameVCLK-period3时序约束10.估算组合逻辑延时有些组合逻辑不知道延时,要进行保守预算。仍以图7.10为例,预算N的时间比例比如占时钟周期的40%,总时钟周期减掉建立时间等就是留给组合逻辑的约束时间。如果每一模块设计者都这样设定,两个模块之间就会有20%的裕量。create_clock-period10[get_portsclk]set_input_delay-max6-clockclk[all_inputs]remove_input_delay[get_portsclk]set_output_delay-max6-clockclk[all_outputs]时序约束10.估算组合逻辑延时输出是寄存器输出,做时间运算比较方便。所有设计都是寄存器输出,连接起来比较好,输出特别干净,毛刺较少,延迟也好估算,工艺库可以查到寄存器延迟,剩下时间都留给组合逻辑。如果用组合逻辑输出毛刺较多。时序约束,简单记住一句话:“告诉”DC时钟周期是多少。根据时钟周期,DC就知道寄存器和寄存器之间的约束。输出端口就“告诉”DC外部的电路需要多少时间,DC自己计算内部电路需要多少时间。时序约束模型时钟树时钟网络做版图前认为理想的。事实上时钟的负载很多,如果让DC做预算不准。后端有一个时钟树综合去做。时序约束Post-layoutCircuitFF2QBDQFF1QBDQD_InCLKFF1QBDQFF2QBDQXD_InCLKLogicCircuit模型时钟skew时钟输入到达两个触发器端口时间是有延迟的。延迟对时序有影响。怎么去模仿?Skew就是时间差。要建模模仿。设定这个命令:set_clock_uncertainty–setupTu[get_clocksclk]时序约束TuPost-layoutCircuitFF2QBDQFF1QBDQD_InCLK4环境属性EnvironmentAttributesTiming约束是最基本的,常用的方法是脚本文件。DC综合过程是根据约束在工艺库挑选库单元,满足时序和工艺要求前提下,保证面积最小。环境约束设计的问题包括:输入端口要加上什么样的激励?驱动能力强还是弱?输出端口有多大负载?综合时候怎样模仿输出负载有多大?负载对DC综合有何影响?工艺角或PVT怎样设置?温度电压等条件改变能否工作?室温能工作,户外能工作吗?寄生参数的影响怎样设置等问题。所有的设置都将影响综合结果。环境属性环境约束方法,分为以下四种:设置输入驱动单元set_driving_cell;设置输出负载单元set_load;设置工作环境set_operating_conditions;设置连线负载set_wire_load_model。环境属性RTL综合流程LoaddesignandlibrariesApplydesignconstraintsSynthesizethedesignWriteoutdesigndataWriteRTLcodeandsimulateCreatesetupfileCreateconstraintsfile1.Areaconstraints2.Timingconstraints3.EnvironmentalattributesSelectappropriatecompileflow1.输入设定输入管脚接了驱动单元,驱动能力强弱影响M(约束图7.10)逻辑。set_input_transition0.1[get_portsA] 如果不知道输入,则选择一个组合逻辑或者触发器模仿一下。set_driving_cell-lib_cellOR3B[gets_portsA]set_driving_cell-lib_cellFD1-pinQn[get_portsA]环境属性my_designFF1QBDQOR3B写约束让DC给芯片建一个模型,实际工作环境的模拟。输入、输出约束要合理,否则芯片做出来就不能正常工作。温度与工作电压,互联参数都有影响。约束充分性需要考虑。大部分情况下约不约束有很大差别。约束要适当。环境属性2.输出设定输出要驱动一个负载RC模型,假设负载电容设置的太小了,因此DC把S(约束图7.10)选的驱动能力太小,芯片做出来就不能驱动。输出约束驱动的可以是门,需要“告诉”DC接的是什么门,接多少这样的门。set_load[expr30.0/1000][get_portsB]环境属性FF2QBDQSCLK1.2nsB2.输出设定set_load[load_of_my_lib/AN2/A][get_portsB]set_load[expr{[load_of_my_lib/inv1a0/A]*3}][get_portsB]环境属性Bmy_designAN2ABBmy_design3.复杂实际情况设定输入端是其他人设计的模块,输出端也是其他人设计的几个模块,需要估算。估算意味着无法准确预测端口,这样如果约束不严,选择稍微弱的,但是不要选择太弱的单元。对输入端口限制最大加多大电容。每个内部单元都有电容,会限制内部逻辑,如果不约束,工具就可能接很多单元,实际应用的时候因为驱动能力弱就无法驱动。输出端口外接多少模块,大概多少单元,要做一个运算和评估。环境属性把时钟从输入端口中排除掉。set_all_in_ex_clk[remove_from_collection[all_inputs][get_portsCLK]]假设一个驱动能力很弱的单元。set_driving_cell-lib_cellinv1a1$all_in_ex_clk限制输入输出负载。set_MAX_INPUT_LOAD[expr[load_ofssc_core_slow/and2a1/A]*10]set_max_capacitance$MAX_INPUT_LOAD$all_in_ex_clkset_load[expr$MAX_INPUT_LOAD*3][all_outputs]环境属性PVT很好理解,也很常见。Process分为5个不同的corner(前后两个字符分别对应NMOS和PMOS):TT(TypicalNTypicalP)、FF(FastNFastP)、SS(SlowNSlowP)、FS(FastNSlowP)、SF(SlowNFastP)。其中最小最大限制为SS和FF,一般选择SS去综合。环境属性工艺角(Process Corner)传统上把NMOS和PMOS晶体管的速度波动范围限制在由四个角所确定的矩形内。这四个角分别是:快NFET和快PFET,慢NFET和慢PFET,快NFET和慢PFET,慢NFET和快PFET。在各种工艺角和极限温度条件下对电路进行仿真是决定成品率的基础。注:SS、TT、FF分别是左下角、中心、右上角。PVT(process,voltage,temperature)设计除了要满足上述5个corner外,还需要满足电压与温度等条件,形成的组合称为PVT(process,voltage,temperature)条件。温度如:-40ºC,0ºC,25ºC,125ºC。设计时设计师还常考虑找到最好最坏情况。时序分析中将最好的条件(BestCase)定义为速度最快的情况,而最坏的条件(WorstCase)则相反。PVT(process,voltage,temperature)根据不同的仿真需要,会有不同的PVT组合。几种标准STA分析条件:

WCS(WorstCaseSlow):slowprocess,hightemperature,lowestvoltageTYP(typical):typicalprocess,nominaltemperature,nominalvoltageBCF(BestCaseFast):fastprocess,lowesttemperature,highvoltageWCL(WorstCase@Cold):slowprocess,lowesttemperature,lowestvoltage在进行功耗分析时,可能是另些组合如:

ML(MaximalLeakage):fastprocess,hightemperature,highvoltageTL(typicalLeakage):typicalprocess,hightemperature,nominalvoltage三种STA(StaticTimingAnalysis)分析方法1.

单一模式,用同一条件分析setup/hold;2.WC_BC模式,用worstcase计算setup,用bestcase计算hold;3.OCV模式,计算setup用计算worstcase数据路径,用bestcase计算时钟路径;计算hold用bestcase计算数据路径,用worstcase计算时钟路径;

4.set命令通过set命令配置,有哪些文件和工艺库等。set_operating_conditions-max“WCCOM”DC有默认工作条件。工艺库中如果只有一种工作条件,不需要设定。如果有很多种配置,例如温度等配置不同,DC最后出来的结果不同。工艺库中有多个PVT文件,必须设定选择哪种。环境属性寄生参数,涉及器件互连,通过实际连线等效DC模型,用elmore模型来计算。DC的拓扑结构没出来之前,DC中没有任何版图信息,只能粗略估算连线延时,单元延时依据转换非线性延时模型。延时和输入信号的转换时间有关系,“斜坡”大小,和输出的容性负载有关系,这两项定下来之后去查找表查看,包括这个单元的输出转换时间都可以得到。线延时根据线负载模型来评估。环境属性查看工艺库内线负载模型,如果有一个负载,可以查表,如果有多个负载用相应的外推计算公式估算,因为表格不可能列出所有情况。工艺库的线负载模型有很多如何选择?setauto_wire_load_selectionfalseset_wire_load_model-name8000000这条命令有一个变量,会自动选择哪种线负载模型。当自己设置时候要把这个变量关掉。环境属性工艺库查看线负载模型,如果有一个负载,认为连线长度是14.15。如果有多个负载用线性代数,根据斜率,外推计算公式估算。因为不可能列出所有情况。单位长度的WLM例子5.去除掉之前的约束DC之前保存了现场,为了重新开始,要用这个命令。reset_design6.通过#在脚本里加注释create_clock-p5-nVCLK;#thisisavirtualclock程序里没有分号的原因是,没有这种注释和命令写在一行,一般可以把注释写在前面,更清晰。注释如果在同一行分号必须加上。环境属性7.检查语法错误Linux%dcprocheckTOP.con8.查看端口约束等加的是否正确check_designsourceTOP.conreport_port-verbosereport_clockreport_clock-skewcheck_timing环境属性5综合优化技术SynthesisOptimizationTechniquesRTL综合流程LoaddesignandlibrariesApplydesignconstraintsSynthesizethedesignOptimizeAnalyzeWriteoutdesigndataWriteRTLcodeandsimulateCreatesetupfileCreateconstraintsfileSelectappropriatecompileflow综合优化技术关于综合的编译策略有两种。大规模系统的整体设计一定是层次化的。怎么写约束脚本?只针对顶层约束?还是某个模块会有特殊约束……1.功能模块综合策略之一是Bottem-up从子模块开始约束约束并综合好后,设成dont_touch。这个过程十分复杂,工作量非常大,效果不一定好。综合优化技术2.另一种策略是Top-down有时钟管理模块需要特

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论