版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ASIC设计流程
--逻辑综合DDC项目组ASIC设计流程1基于standcell的ASIC设计流程基于standcell的ASIC设计流程2使用DC进行逻辑综合SetupFilesetupfile是一个脚本文件,用来指定DC综合时所需的初始化信息,它也可以和约束文件写在一起,但建议分开写,方便脚本的管理。需要定义的变量有:target_library:综合用的目标库,它一般是由生产线提供的工艺相关的库,如slow_1v08c125.db是smic0.13um最坏情况下的目标库。synthetic_library:综合库,它包含了一些可综合的与工艺无关的IP。dw_foundation.sldb是Synopsys提供的名为DesignWare的综合库,它包含了基本的算术运算逻辑、控制逻辑、可综合存储器等IP,在综合时调用这些IP有助于提高电路性能和减少综合时间。link_library:链接库,DC不使用该库中的cells进行映射,它是DC在读入综合后网表时用来参考的库,RAM,ROM,PAD,macros都应包含在这个库,目标库和综合库也必须包含在其中。symbol_library:指定的符号库,使用GUI时会调用。search_path:指明库文件的位置,这样在添加上面的库时就不用写绝对路径。另外还有一些变量需要在setupfile里进行设置,分别是:define_name_rules,bus_naming_style,verilogout_show_unconnected_pins,verilogout_no_tri,后面会讲到。使用DC进行逻辑综合SetupFile3使用DC进行逻辑综合DesignEnvironment功能:定义设计的工艺参数,I/O端口属性,统计wire-load模型。下图解释了描述设计环境约束的DC命令:set_max_capacitanceset_max_transition&set_max_fanoutoninput&outputportsorcurrent_design;BlockBClockDividerLogicBlockAset_loadonoutputset_operating_conditionsonthewholedesignclkset_driveonClockset_driving_celloninputsignalsset_loadoninputsset_wire_loadforeachblock,includingtoplevel使用DC进行逻辑综合DesignEnvironmentse4使用DC进行逻辑综合DesignEnvironmentset_min_library:允许同时设置worst-case和best-caselibraries,从而在初步编译时,DC修正hold-timeviolations时,避免出现setup-time的violation。例:set_min_libraryslow_1v08c125.db-min_versionfast_1v32cm40.dbset_operating_conditions:定义设计的工艺,电压,温度等参数。操作条件的名字每个库不同,到库中去查。cell和net的delay和这几个参数呈线性关系,delay的计算公式如下(smic0.13um为例):使用DC进行逻辑综合DesignEnvironment5使用DC进行逻辑综合DesignEnvironment命令set_operating_conditions–minBEST–maxWORST用于指示DC对WORST和BEST条件,同时优化。WORST用于对setup-time进行优化,BEST用于对hold-time进行优化,当BEST和WORST都满足时,TYPICAL也就可以满足。例:set_operating_conditions-minfast_1v32cm40-maxslow_1v08c125set_wire_load_model:用于设置线负载模型估计连线负载,线负载模型是根据cell的扇出数查表得到线长,再用线长乘以单位线长的电阻和电容值得到的负载电阻电容值的,如图:使用DC进行逻辑综合DesignEnvironment6使用DC进行逻辑综合DesignEnvironment线负载模型是一个统计模型,它估计出的负载是不准确的,尤其是0.35um以下的工艺,因此,在布局布线前应使用较悲观的模型,对最坏的情况做综合,线负载模型由目标库提供。例:set_wire_load_model-namesmic13_wl10-minset_wire_load_model-namesmic13_wl30–maxset_wire_load_mode:有三种wire_load_mode{top,enclosed,segmented}top:所有层次子模块的wire_load和top-level相同,如果用户计划flatten设计去layout可选择此模式编译子模块。enclosed:子模块net的wire_load和enclosed它的最小模块相同,推荐用于在layout后logicaland
physical
hierarchy相似的设计;segmented:子模块之间net的wire_load和enclosed该net的模块相同,需技术库提供segmentedwire_load,一般用于跨层次的net;例:set_wire_load_modetop图示:使用DC进行逻辑综合DesignEnvironment7使用DC进行逻辑综合DesignEnvironment使用DC进行逻辑综合DesignEnvironment8使用DC进行逻辑综合DesignEnvironmentset_drive:用来指定inputport的驱动强度,它指定的是一个阻抗值,用来计算从这个port到被它驱动的cell之间的路径延时,0表示最大驱动,通常用于clockports。例:set_drive0$PROCLKset_driving_cell:用来模拟驱动inputport的cell的驱动阻抗,用于计算输入信号的transitiontime做DRC的检查,一般在分模块综合时使用,顶层则设置为PAD或用buffer隔离。例:set_driving_cell-lib_cellDFFRX2-no_design_rule[get_portsRX_DDC_PDC_SDAT_16B]选项-no_design_rule是指DFFRX2自身的DRC检查不做。set_load:用于定义net或port的电容负载,保证输出路径的时序,主要用inputport和outputport,在顶层则设置为PAD的电容值或用buffer隔离,在库中获得。例:set_load0.4[get_portsTX_DDC_AOUT_18B]-pin_loadDRC设计规则约束:set_max_transition<value><objectlist>
set_max_capacitance<value><objectlist>set_max_fanout<value><objectlist>
使用DC进行逻辑综合DesignEnvironment9使用DC进行逻辑综合DesignEnvironmentDRC规则在厂家提供的库中有一个default值,不用人为的设置,如果在默认值无法满足时序的情况下可以人为约束。set_max_transition会影响setup-time,hold-time,recovery-time,removal-time,如图。
使用DC进行逻辑综合DesignEnvironment10使用DC进行逻辑综合DesignEnvironmentset_max_transition对时序的影响使用DC进行逻辑综合DesignEnvironment11使用DC进行逻辑综合DesignEnvironmentset_max_fanout对design,net,outputport进行操作,设定的不是具体的电容值。例如对一个design我们设定set_max_fanout12,表示在这个design中的一条net或一个port只能驱动12个fanout_load为1个单位的pin或6个fanout_load为2个单位的pin,在smic0.13um库中默认的fanout_load为1,我们可以用set_fanout_load自行设置,set_max_fanout和set_fanout_load仅仅是用做DRC的检查,他们的值与时序无关。图示如下:使用DC进行逻辑综合DesignEnvironment12使用DC进行逻辑综合DesignEnvironmentset_max_capacitance定义输出管脚可以驱动的最大电容值。set_max_transition和set_max_fanout间接的定义了outputport可以驱动的最大电容,set_max_capacitance则是设定的一个真实的电容值,outputport所带的容性负载不能超过这个值。一般情况下都通过set_max_transition来定义DRC规则,因为库里是使用transitiontime来计算动态延时。
DRC规则的优先级:
transition>fanout>capacitance例:set_max_transition0.3[get_designs*]set_max_capacitance1.5[get_portsout1]set_max_fanout3.0all_outputs()使用DC进行逻辑综合DesignEnvironment13使用DC进行逻辑综合DesignConstraints功能:描述设计的目标,包括时序和面积约束,要注意约束必须是可实现的,否则会导致面积过大,功耗增加或时序不能满足要求。设计约束的DC命令如下:
set_clock_latencyset_clock_transitionset_output_delayonoutputBlockBClockDividerLogicBlockAclkCreate_clock&set_clock_skewset_input_delayoninputsignalsset_max_areaforeachblock,Toplevel使用DC进行逻辑综合DesignConstraintsse14使用DC进行逻辑综合DesignConstraintscreate_clock:用于定义时钟的周期和波形(duty及起始沿);例如:create_clock–period40–waveform{020}
CLK周期40ns上升沿0ns,下降沿20ns;如果不定义waveform,则默认占空比为50%。set_clock_transition:在pre_layout必须设置一个固定的transition值(技术库提供有一个值),因为时钟网络有很大的fanout,这样可使DC根据该时钟计算实际的延时值。例:set_clock_transition0.1[get_clocks$SCLK]creat_generated_clock:用于定义内部产生的时钟信号,比如分频和倍频的时钟信号。creat_generated_clock–name<clockname>-source<clocksource>-divide_by<dividefactor>……set_dont_touch_network:在net或port上设置don’ttouch属性,主要用于clock和reset信号,使DC不对这些nets插buffer,留到布局布线时综合。例:set_dont_touch_network[get_clocks$SCLK]
set_dont_touch_network[get_pinsmasterrst*/Q]使用DC进行逻辑综合DesignConstraints15使用DC进行逻辑综合DesignConstraintsset_dont_touch:用于对current_design,cells,references,nets设置don’ttouch属性,阻止DC对它们进行映射或优化,一般在分模块综合和综合后优化时使用。例:set_dont_touch[get_cellsX_DATA_N_1_33B_reg[0]]set_dont_use:指示DC在进行映射时将目标库的某些cells滤除不用,比如一些驱动能力很小的cell就可以不用,以满足时序。通常将它写在setupfile里。例:set_dont_use{slow_1v08c125/DFFRXL}使用DC进行逻辑综合DesignConstraints16使用DC进行逻辑综合DesignConstraintsset_input_delay:定义信号相对于时钟的到达时间。指一个信号,在时钟沿之后多少时间到达inputports。下图中input_delay=Tclk-q+Tm使用DC进行逻辑综合DesignConstraints17使用DC进行逻辑综合DesignConstraintsset_output_delay:定义从输出端口数据不可用开始距离后一个时钟沿的时间,既时钟周期减去cell从上一个时钟沿开始的工作时间。下图中output_delay=Tt+Tsetup
使用DC进行逻辑综合DesignConstraints18使用DC进行逻辑综合DesignConstraintsConstraintforhold-time设寄存器的hold-time为0.5ns,则寄存器间的组合逻辑X的最小延时为0.5ns使用DC进行逻辑综合DesignConstraints19使用DC进行逻辑综合DesignConstraints设clock有0.5ns的skew,hold-time为0.5ns,则X最小应为1ns使用DC进行逻辑综合DesignConstraints20使用DC进行逻辑综合DesignConstraints设FF2hold-time为1ns,N的延时为0.7ns,为保证hold-time而设置的最小input_delay就应为0.3ns使用DC进行逻辑综合DesignConstraints21使用DC进行逻辑综合DesignConstraints设hold-time为0.5ns,FF3+S的延时为0.2ns,则T的最小延时应为0.3nsset_output_delay–max(Tmax+Tsetup)set_output_delay–min(Tmin-Thold)使用DC进行逻辑综合DesignConstraints22使用DC进行逻辑综合DesignConstraintsset_clock_latency:模拟时钟树插入后从时钟输入端口到寄存器clock端口的延时,用于布局布线前的综合和时序分析,一般设0.3-0.8。例:set_clock_latency0.3[get_clocks$PROCLK]set_clock_uncertainty:由于工艺制造的原因,时钟到达各个触发器clock端口时会有一定的偏差,set_clock_uncertainty就是为这种偏差留一定的余量以保证setup-time和hold-time,一般设为0.2-0.3。例:set_clock_uncertainty0.3[get_clocks$PROCLK]使用DC进行逻辑综合DesignConstraints23使用DC进行逻辑综合DesignConstraints使用DC进行逻辑综合DesignConstraints24使用DC进行逻辑综合DesignConstraintssetup-timecheck:(假设libsetup-time为1ns)creat_clock–period10–waveform{05}[get_portsCLK]set_clock_latency–rise1–fall2[get_portsCLK]set_clock_uncertainty–rise0.5–fall0.7[get_portsCLK]
setuptimecheck=(clock_edge+edge_delay-uncertainty-lib_setup)使用DC进行逻辑综合DesignConstraints25使用DC进行逻辑综合DesignConstraintshold-timecheck:(假设libhold-time为1ns)creat_clock–period10–waveform{05}[get_portsCLK]set_clock_latency–rise1–fall2[get_portsCLK]set_clock_uncertainty–rise0.5–fall0.7[get_portsCLK]
holdtimecheck=(clock_edge+edge_delay+uncertainty+lib_hold)使用DC进行逻辑综合DesignConstraints26使用DC进行逻辑综合DesignConstraints对多时钟域或不可实现的路径的处理:用set_false_path指示DC不对这些路径进行时序优化,如果不对falsepath路径进行标识,DC会对所有的路径进行优化,从而影响关键时序路径。例:多时钟域:set_false_path-from$SCLK-to$PROCLKset_false_path-from$PROCLK-to$SCLK不可实现路径:set_false_path–throughmux1/A–throughmux2/A
set_false_path–throughmux1/B–throughmux2/B
使用DC进行逻辑综合DesignConstraints27使用DC进行逻辑综合DesignConstraints
对high-fanout信号的处理:对于高扇出的信号,比如clock,reset,和其他的扇出上千的控制信号,如果不进行处理,DC会对这些信号路径加buffer进行时序优化,但综合时的线延时是不准确的。DC会浪费大量的综合时间在这些路径上,对这些信号时序的优化应放到后端布局布线时给后端工具来做,因此要对这些信号进行处理。clock信号:对时钟端口使用creat_clock命令后,DC就不会对这个时钟net插buffer,DC对时钟net内置有idealnet的属性,也就是说如果你没有set_clock_transition,那么DC就默认为0。reset信号:reset信号也是一个高扇出信号,应做如下处理set_dont_touch_network让DC不对resetnet插buffer,set_ideal_net_work让DC忽略对resetnet的DRC检查,但这样DC还是会检查resetnet的时序,显然是不满足的,会花大量时间优化时序,因此还应设置一个变量set_high_fanout_net_threshold<number>,既不论fanout为多少,DC都按这个设定的number值计算延时。使用DC进行逻辑综合DesignConstraints28使用DC进行逻辑综合RTL描述的读入read和analyze&elaborate都可以用来读入RTL代码,推荐使用analyze&elaborateanalyze&elaborate允许设计者在设计的GTECH建立之前,首先去分析设计的语法错误和进行HDL代码转换。GTECH由“softmacros”比如adders,comparators等组成,这些组件来自synopsys的syntheticlib,每种组件具有多种结构。Analyze做语法的检查并产生一个“.syn”文件,存储于work路径下的定义的设计库内,可供后来elaborate使用。对于一个analyzed过的设计,只需用elaborate重新输入,节省时间。Read就不行。以下是两个命令的比较:使用DC进行逻辑综合RTL描述的读入29使用DC进行逻辑综合类别analyze&elaborateread格式verilog或VHDLverilog、VHDL、EDIF、db等所有格式用途综合verilog或VHDL的RTL设计读网表,设计预编译设计库用-library选项定义设计库名,存储“.syn”文件用缺省的设置,不能存储中间结果Generics(vhdl)可以对parameter进行操作不能对parameter进行操作Architecture(vhdl)可以进行结构化的操作不可用RTL描述的读入使用DC进行逻辑综合类别analyze&elaborat30使用DC进行逻辑综合RTL描述的读入
elaborate对parameter的操作:例:moduleDFF(in,clock,out,rst);parameterSIZE=8;input[SIZE-1:0]in;inputclock;inputrst;output[SIZE-1:0]out;reg[SIZE-1:0]out;always@(posedgeclk,negedgerst)if(rst==1’b0)out<=0;elseout<=in;endmodule
如果要指定parameter为16,可以这样操作:elaborateDFF–paramSIZE=16使用DC进行逻辑综合RTL描述的读入31使用DC进行逻辑综合编码指南RTL级的HDL描述实际是电路结构的文本描述,它是技术无关的,类似于网表。HDL语言先于综合工具出现,综合工具只能根据HDL代码进行逻辑推断,对完成同一功能而书写方式不同的HDL代码,综合工具会产生不同逻辑电路。所以不能依靠DC去修正不符合规范的代码。写代码时,需清楚描述的硬件电路拓扑结构。为提高DC综合的质量和减少综合时间,应注意以下几个方面:联系紧密的组合逻辑应在同一个模块内DC无法对跨越模块层次的组合逻辑进行有效优化,因此联系紧密的逻辑被分开放在两个子模块内就很可能造成关键路径。把相关联的组合逻辑以及它的目的寄存器放在一个模块内模块与模块之间不要出现胶粘逻辑,把胶粘逻辑放到其中一个模块中compile的-boundary_optimization对边界的优化仅对一些常量的引脚,未连接的引脚等进行优化,对时序的优化并不显著,如下图。使用DC进行逻辑综合编码指南32使用DC进行逻辑综合编码指南使用DC进行逻辑综合编码指南33使用DC进行逻辑综合编码指南左图的两个联系紧密的组合逻辑被划分到两个模块,DC无法进行有效的优化,导致出现关键路径,右图合在一个模块后就可以对关键路径进行有效的优化,去除关键路径。使用DC进行逻辑综合编码指南34使用DC进行逻辑综合编码指南对所有的输出进行寄存这样在分模块综合时,可以很方便的设置本模块的drivestrength,driving_cell,input_delay,output_delayinput_delay=path_delayoutput_delay=clockcycle–path_delay
使用DC进行逻辑综合编码指南35使用DC进行逻辑综合编码指南I/O管脚与内部电路用寄存器隔离IO管脚尽可能与内部电路用触发器隔离,以保证内部电路高速运行,并隔离毛刺的影响。如不能,则尽量减少对IO运算。原因:IO管脚速度较低。CHIPACHIPBPCBLineT=Touta+Tpcb+Tinb;使用DC进行逻辑综合编码指南CHIPACHIPBPCBLi36使用DC进行逻辑综合编码指南禁止使用异步触发器,慎用latch。Latch虽然面积仅为触发器的1/3,功率消耗也小于触发器,但latch并不是同步元件,异步存储元件在时序分析时会带来很大的困难,在可测试性上也不易做,所以尽量不要在设计中使用latch。禁止使用含有组合逻辑反馈的电路。组合逻辑反馈时异步设计,会给STA和DFT带来困难,应予以避免,如需要应使用时序反馈。如图使用DC进行逻辑综合编码指南37使用DC进行逻辑综合编码指南合理的规划端口数,能够复用的端口进行复用,可以使设计更经济。决定一个芯片die大小的因素有两个,一个为pin的数目,另一个为core的大小,分别成为PADLimited和coreLimited。使用DC进行逻辑综合编码指南38使用DC进行逻辑综合编码指南PADLimited虽然留给了core更大的布局布线空间,易于满足时序,但是并不经济,一般布线面积占整个core的面积的15%-20%就足够了。所以端口能够复用的话尽量复用,以防止PADLimited来决定整个die的大小。使用DC进行逻辑综合编码指南39使用DC进行逻辑综合编码指南clock逻辑及reset生成应放在一个模块中,便于综合时对时钟约束的定义I/OPAD,异步逻辑,边界扫面电路应为单独的模块内部模块之间不要有inoutport状态机对verilog,State命名使用“parameters”;组合逻辑和时序逻辑分开;尽量使用同一种类型的寄存器所有寄存器都必须有复位端,最好使用异步复位,不要既使用异步复位又使用同步复位。使用DC进行逻辑综合编码指南40使用DC进行逻辑综合DC的三种综合策略Top-downcompile:就是将整个设计作为一个模块进行编译,仅需toplevel约束。对一些设计如:单时钟的设计,很适用。允许一次编译大于100Kgate的设计。对于大型设计,可使用ungroup命令将子模块合并成一组,然后展开进行编译,可以改善时序。优点:仅需对top_level的约束;将整个设计作为整体优化,可获得较好的结果;缺点编译时间长,占用的内存多;子模块的改变需要整个设计再综合,可重用性不好;如果设计包含多个时钟或生成时钟逻辑,则不能很好执行。使用DC进行逻辑综合DC的三种综合策略41使用DC进行逻辑综合DC的三种综合策略Bottom-upcompile:各自模块可独立编译,适合于划分合理,各自模块的时序约束能够被明确定义的设计。优点:每一个子模块都由自己的Scripts文件,便于管理;子模块的改变不需要整个设计全部重新综合,可重用性好;不需要关心设计类型,如:多时钟或产生时钟;一般来说,可获得好的结果;缺点
需要更新维护多个scripts;Top的关键路径也许在子模块并非关键路径;需要incrementally编译,用于DRC’s;使用DC进行逻辑综合DC的三种综合策略42使用DC进行逻辑综合DC的三种综合策略mixedcompile:同时使用前两种综合策略。使用DC进行逻辑综合DC的三种综合策略43使用DC进行逻辑综合DC的优化过程使用DC进行逻辑综合DC的优化过程44使用DC进行逻辑综合DC的优化过程结构优化(ArchitechuralOptimization)
结构优化是对RTL描述进行优化,最后把RTL代码转化为GTECH网表,它包括以下几个方面:共享子表达式例:原RTL代码为X<=A>B;Y<=(A>B)&C;共享子表达式后变为temp<=A>B;X<=temp;Y<=temp&C;使原来的两个比较器变为了一个,优化了面积。如果不想使用这个优化,可以设置set_share_csefalse–designmy_top
共享资源例:RTL代码为always@(*)beginif(ADD_A_B)Z=B+A;elseZ=C+D;end
使用DC进行逻辑综合DC的优化过程45使用DC进行逻辑综合DC的优化过程
可以从上图看到,加法器被共享了,节约了资源。使用report_resources可以查看资源的共享情况。使用DC进行逻辑综合DC的优化过程46使用DC进行逻辑综合DC的优化过程再看下面这个代码
always@(*)beginif(ADD_B)beginTEMP_1=A+B;Z=TEMP_1+C;endelsebeginTEMP_2=D+E;Z=TEMP_2+F;endend
使用DC进行逻辑综合DC的优化过程47使用DC进行逻辑综合DC的优化过程上面这段代码在A+B和TEMP_2+F共享加法器R1,D+E和TEMP_1+C共享加法器R2时,有一条逻辑反馈回路,就是图中加黑的回路。综合的时候,DC会报一个warning,但我们可以看到MUX在选择的时候这条回路是不会同时被激活的,因此并不需要去管。选用DesignWare的softmacroDesignWare是synopsys提供的可重用的ip,使用DesignWare的ip会获得更好的综合效果。DesignWare的选择在门级优化的时候还会再做一次,以达到更好的效果,其余的都只在这一步优化做。这一步后得到GTECH网表。
相关语法:set_resource_allocation,set_resource_implementation
使用DC进行逻辑综合DC的优化过程48使用DC进行逻辑综合DC的优化过程逻辑优化(Logic-leveloptimization)逻辑优化对GTECH网表进行优化,主要分为两步:Structuring和Flattening。Structuring:加入中间逻辑达到逻辑共享从而减少面积,但会增加延时,因为级数加深了。常用于结构逻辑,如超前进位加法器等,一般用于非关键路径。Flattening:把组合逻辑变为两级逻辑,也即与或结构,把路径缩到最短,但会增加面积的压力,flatten不会打破层次,适合于随机逻辑。Structure和Flatten的default设置如下:AttributeValuestructureturestructure_booleanfalsestructure_timingtureflattenfalse使用DC进行逻辑综合DC的优化过程AttributeValu49使用DC进行逻辑综合DC的优化过程例:structure:beforestructure:afterstructureM=ax+ay+cM=Ia+cN=x+y+zN=I+zI=x+y结构化以后由两级逻辑变为了3级逻辑,但减少了面积,3输入或门变为了两输入或门。使用DC进行逻辑综合DC的优化过程50使用DC进行逻辑综合DC的优化过程
例:Flatten:beforeflatten:afterflatten:
结构化以后由3级逻辑变为了两级逻辑,但是增加了面积。使用DC进行逻辑综合DC的优化过程51使用DC进行逻辑综合DC的优化过程相关语法:set_flatten,set_structure根据设计flattened的形式和compileeffort的类型,被flattened的设计在最终的及
术映射优化之前,还要被structured,用于减少面积。如果对DC的优化不是很了解,
建议不要改变flatten,structure的设置,使用默认设置就可以了。使用DC进行逻辑综合DC的优化过程52使用DC进行逻辑综合DC的优化过程门级优化(Gate-leveloptimization)
使用目标库的门对上一步得到的网表进行映射和优化。分以下四个步骤:Mapping:用目标库对genericnetlist进行映射,得到门级网表。Delayoptimization:fixmapping时出现的时序violations。Designrulefixing:通过插入buffer和改变cell的面积来fixDRCviolation。Areaoptimization:在前面几步优化的基础上对面积进行优化。使用DC进行逻辑综合DC的优化过程53使用DC进行逻辑综合对关键路径的处理当DC综合报告出结果以后,用pt画时序柱状图(EndpointSlackHistogram
)进行分析,对于violation超过时钟周期20%的关键路径就要考虑从RTL级进行修改了,violation低于时钟周期10%的关键路径可以使用以下办法使其满足约束。检查关键路径是否在层次边界处,如果发生在层次边界,使用ungroup去掉层次划分,再进行compile。找到关键路径上的高扇出节点,使用balance_buffer对这条路径插buffer。compile选项map_effort设为high。第一次compile时设为medium,如果不能满足约束再改为compile–map_efforthigh–incremental。compile的不同选项优化结果是不一样的,如下:使用DC进行逻辑综合对关键路径的处理54使用DC进行逻辑综合对关键路径的处理关于compile的不同选项compile-incremental:只做门级的映射,不会返回GTECH网表进行优化,也不会重新选择designware的组件(IIS),不会重新做flatten和structure。compile–map_efforthigh:所有的优化都会重做,包括IIS,flatten,时序和面积优化,DRCfix,关键路径优化,由于对时序的优化很严,structure基本上不做。compile–incremental–map_efforthigh:做incremental优化和关键路径的重新综合,对关键路径的重新综合会返回到GTECH网表进行所有优化。
使用DC进行逻辑综合对关键路径的处理55使用DC进行逻辑综合对关键路径的处理目标库里的一些标准单元,比如DFFXL虽然面积小,但是延时很大,很容易造成关键路径,recompile时使用set_dont_use告诉DC在综合时不使用这些cell进行映射。使用group_path对I/Oport的路径进行优化。DC主要优化寄存器到寄存器的路径,每一个时钟域为一个pathgroup,对I/Oport使用group_path让DC对I/O路径和寄存器间的路径都进行优化。例:group_path-namepathsin-critical_range0.0-fromall_inputs()group_path-namepathsout-critical_range0.0-toall_outputs()
使用DC进行逻辑综合对关键路径的处理56使用DC进行逻辑综合对关键路径的处理DC中一条path的划分startpoints:endpoints:inputportsoutputportsclockpinsofsequentialdevicesdatainputpinsofsequentialdevices使用DC进行逻辑综合对关键路径的处理57使用DC进行逻辑综合对关键路径的处理用set_critical_range让DC对更多的关键路径进行优化。DC在对一组path进行优化的时候,只对最差的一条路径进行优化,当这条路径不能够再优化时就转到DRCfix这步而不会去优化剩下的路径。使用set_critical_range设定一个范围让DC对这个范围内的路径都进行优化,当然这也会使综合的时间变得很长。这个范围应该用pt做了分析以后再选定recompile。例:使用DC进行逻辑综合对关键路径的处理58使用DC进行逻辑综合对关键路径的处理上面这组path设定的约束是10ns,如果没有设置critical_range,DC只会优化13ns违约的路径,另外两条不会进行优化,对于这组path,可以设定set_critical_range3.0$current_design使用compile_ultra,compile_ultra会自动执行ungroup。对有关键路径的模块进行单独综合,改变默认flatten的设置,用面积换取速度。使用DC进行逻辑综合对关键路径的处理59使用DC进行逻辑综合Fixhold-timeviolation当综合后出现hold-time违约时,使用以下办法fixhold-timeviolationset_fix_holdCLK让DC对CLK时钟域的hold-timeviolation进行修复,这样DC在第二次compile时会自动fixhold-time。用set_cost_priority改变DC优化路径的权重,让hold-time的优化权重大于setup-time。采用compile–incremental再compile一次。使用DC进行逻辑综合Fixhold-timeviolat60使用DC进行逻辑综合Fixhold-timeviolation用set_cost_priority改变权重后,有可能又出现新的setup-timeviolation,导致在这两个之间反复的优化,看下面的例子:使用DC进行逻辑综合Fixhold-timeviolat61使用DC进行逻辑综合Fixhold-timeviolation假设netb有hold-timeviolation,neta有一个小的setupslack,slack的值几乎为0,也就是说刚好满足setup条件。那么当DC在netb上为了fixhold-time加buffer后,寄存器A的Q端的负载增大,导致transitiontime变大,使得neta的延时变长,从而不满足setuptime。去掉buffer后又无法满足hold-time。为了避免这种情况,应该把寄存器B的D脚的电容设为buffer的inputpin的电容。就可以fixhold-time而不影响setup-time。使用DC进行逻辑综合Fixhold-timeviolat62使用DC进行逻辑综合为Layout生成网表为了方便后端的工作,生成网表前需要做以下的事情:给后端做布局布线的网表用verilog格式。EDIF格式的网表不易读,要做ECO(EngineeringChangeOrder)的话很困难EDIF网表不能用来进行仿真综合时使用uniquify。对一个被上层多次例化的子模块各生成一个单独的module。如果不进行唯一化,网表中只会出现一个module,当插入时钟树后,会报出多驱动的error。如果design有dont_touch属性,应先移除dont_touch属性dc_shell-t>remove_attribute[get_designs–hier{*}]dont_touch对网表的信号命名做修改。有些layout工具不能读取一些含有不常用的信号命名的verilog网表,例如含有*的网表,或是对信号名的字符数有限制,因此在导出网表前要对网表命名做适当的修改。网表的命名规则最好写在setup_file里。使用DC进行逻辑综合为Layout生成网表63使用DC进行逻辑综合为Layout生成网表例:define_name_rulesverilog-allowed"A-Za-z0-9_"-first_restricted"0-9_\[]"-case_insensitive-max_length30-target_bus_naming_style{%s[%d]}-typenet-prefix"N"-replacement_char"_"-map{{{"__","_"},{"reg_reg","r_reg"}}}对总线的命名规则为:setbus_naming_style{%s[%d]}写出网表之前执行以下命令:change_names–hier–rulesverilog规则名最好使用verilog,verilog是DC默认的命名规则,自己定义的规则会只接加入到这个规则里,不会覆盖原来的规则。使用DC进行逻辑综合为Layout生成网表64使用DC进行逻辑综合为Layout生成网表移除未连接的端口。设计中会有很多时候遇到没有连接的端口信号,比如中间的一些截位运算。如果不对这些端口进行处理,DC会报很多的warning,有可能使我们忽略掉一些有用的warning。
例:remove_unconnected_ports[get_cells–hier{*}]使stdcell的端口名可见。综合时,有些cell的一些port可能没有用到,DC在写出网表时就不会把这些端口写出来,在layout时,就会出现端口数不匹配的warning。例如一个4端口的DFF(D,CLK,Q,QN),可能会用以下连接DFF(.D(data_in),.CLK(clock),.Q(data_out));这里QN端口就没有用到,DC就不会把QN写出来,layout时就会报出warning。应在setup_file里进行如下设置setverilogout_show_unconnected_pinsture使用DC进行逻辑综合为Layout生成网表65使用DC进行逻辑综合为Layout生成网表去除网表中的assign语句和tri等线网在设计中使用了inout端口时,DC会产生tri或tran型的线网,而有的layout工具不支持这两种类型的线网,应在setup_file里让DC对三态线网都声明为wire型:例:setverilogout_no_triture如果一个模块的输入端口直接连到输出口或是输出端口接地或输出端口被一个常量驱动时,都会导致DC在网表中写出assign语句,而layout工具不支持assign这样的行为语句。去除assign的方法是在这条net上加入buffer。例:foreach_in_collectiondesign[get_designs"*"]{current_design$designset_fix_multiple_port_nets-all-buffer_constants}current_design$active_designset_fix_multiple_port_nets-all-buffer_constants如果没有去除干净,在综合后对还有assign的design使用set_isolate_ports使用DC进行逻辑综合为Layout生成网表66使用DC进行逻辑综合为Layout生成SDC文件写出网表后还需要写出SDC文件给后端工具使用,SDC文件就是你在综合时设置的约束,得到verilog网表和SDC文件后就可以交给Astro做布局布线了。另外还需要写出SDF文件给PT做时序分析。例:write_sdcDDC_TOP.sdcwrite_sdf-version2.1DDC_TOP.sdf使用DC进行逻辑综合为Layout生成SDC文件67使用DC进行逻辑综合一些必要的报告report_constraint:对违约的情况进行报告,以方便再综合。report_power:报告功耗的情况,提供给后端电源分配的依据,主要看cell的功耗。report_timing:报告时序情况,找出关键路径。report_area:报告面积的使用情况,主要看cell所占的面积,线面积并不准确,不用考虑。使用DC进行逻辑综合一些必要的报告68使用DC进行逻辑综合用PT和FORMALITY做验证
综合完得到verilog网表和SDF文件后,用Formality和PT做一次形式验证和静态时序分析,有问题的话就要重新综合甚至修改RTL代码,没有问题就可以交给后端工具做下一步的布局布线了。使用DC进行逻辑综合用PT和FORMALITY做验证69ASIC设计流程
--逻辑综合DDC项目组ASIC设计流程70基于standcell的ASIC设计流程基于standcell的ASIC设计流程71使用DC进行逻辑综合SetupFilesetupfile是一个脚本文件,用来指定DC综合时所需的初始化信息,它也可以和约束文件写在一起,但建议分开写,方便脚本的管理。需要定义的变量有:target_library:综合用的目标库,它一般是由生产线提供的工艺相关的库,如slow_1v08c125.db是smic0.13um最坏情况下的目标库。synthetic_library:综合库,它包含了一些可综合的与工艺无关的IP。dw_foundation.sldb是Synopsys提供的名为DesignWare的综合库,它包含了基本的算术运算逻辑、控制逻辑、可综合存储器等IP,在综合时调用这些IP有助于提高电路性能和减少综合时间。link_library:链接库,DC不使用该库中的cells进行映射,它是DC在读入综合后网表时用来参考的库,RAM,ROM,PAD,macros都应包含在这个库,目标库和综合库也必须包含在其中。symbol_library:指定的符号库,使用GUI时会调用。search_path:指明库文件的位置,这样在添加上面的库时就不用写绝对路径。另外还有一些变量需要在setupfile里进行设置,分别是:define_name_rules,bus_naming_style,verilogout_show_unconnected_pins,verilogout_no_tri,后面会讲到。使用DC进行逻辑综合SetupFile72使用DC进行逻辑综合DesignEnvironment功能:定义设计的工艺参数,I/O端口属性,统计wire-load模型。下图解释了描述设计环境约束的DC命令:set_max_capacitanceset_max_transition&set_max_fanoutoninput&outputportsorcurrent_design;BlockBClockDividerLogicBlockAset_loadonoutputset_operating_conditionsonthewholedesignclkset_driveonClockset_driving_celloninputsignalsset_loadoninputsset_wire_loadforeachblock,includingtoplevel使用DC进行逻辑综合DesignEnvironmentse73使用DC进行逻辑综合DesignEnvironmentset_min_library:允许同时设置worst-case和best-caselibraries,从而在初步编译时,DC修正hold-timeviolations时,避免出现setup-time的violation。例:set_min_libraryslow_1v08c125.db-min_versionfast_1v32cm40.dbset_operating_conditions:定义设计的工艺,电压,温度等参数。操作条件的名字每个库不同,到库中去查。cell和net的delay和这几个参数呈线性关系,delay的计算公式如下(smic0.13um为例):使用DC进行逻辑综合DesignEnvironment74使用DC进行逻辑综合DesignEnvironment命令set_operating_conditions–minBEST–maxWORST用于指示DC对WORST和BEST条件,同时优化。WORST用于对setup-time进行优化,BEST用于对hold-time进行优化,当BEST和WORST都满足时,TYPICAL也就可以满足。例:set_operating_conditions-minfast_1v32cm40-maxslow_1v08c125set_wire_load_model:用于设置线负载模型估计连线负载,线负载模型是根据cell的扇出数查表得到线长,再用线长乘以单位线长的电阻和电容值得到的负载电阻电容值的,如图:使用DC进行逻辑综合DesignEnvironment75使用DC进行逻辑综合DesignEnvironment线负载模型是一个统计模型,它估计出的负载是不准确的,尤其是0.35um以下的工艺,因此,在布局布线前应使用较悲观的模型,对最坏的情况做综合,线负载模型由目标库提供。例:set_wire_load_model-namesmic13_wl10-minset_wire_load_model-namesmic13_wl30–maxset_wire_load_mode:有三种wire_load_mode{top,enclosed,segmented}top:所有层次子模块的wire_load和top-level相同,如果用户计划flatten设计去layout可选择此模式编译子模块。enclosed:子模块net的wire_load和enclosed它的最小模块相同,推荐用于在layout后logicaland
physical
hierarchy相似的设计;segmented:子模块之间net的wire_load和enclosed该net的模块相同,需技术库提供segmentedwire_load,一般用于跨层次的net;例:set_wire_load_modetop图示:使用DC进行逻辑综合DesignEnvironment76使用DC进行逻辑综合DesignEnvironment使用DC进行逻辑综合DesignEnvironment77使用DC进行逻辑综合DesignEnvironmentset_drive:用来指定inputport的驱动强度,它指定的是一个阻抗值,用来计算从这个port到被它驱动的cell之间的路径延时,0表示最大驱动,通常用于clockports。例:set_drive0$PROCLKset_driving_cell:用来模拟驱动inputport的cell的驱动阻抗,用于计算输入信号的transitiontime做DRC的检查,一般在分模块综合时使用,顶层则设置为PAD或用buffer隔离。例:set_driving_cell-lib_cellDFFRX2-no_design_rule[get_portsRX_DDC_PDC_SDAT_16B]选项-no_design_rule是指DFFRX2自身的DRC检查不做。set_load:用于定义net或port的电容负载,保证输出路径的时序,主要用inputport和outputport,在顶层则设置为PAD的电容值或用buffer隔离,在库中获得。例:set_load0.4[get_portsTX_DDC_AOUT_18B]-pin_loadDRC设计规则约束:set_max_transition<value><objectlist>
set_max_capacitance<value><objectlist>set_max_fanout<value><objectlist>
使用DC进行逻辑综合DesignEnvironment78使用DC进行逻辑综合DesignEnvironmentDRC规则在厂家提供的库中有一个default值,不用人为的设置,如果在默认值无法满足时序的情况下可以人为约束。set_max_transition会影响setup-time,hold-time,recovery-time,removal-time,如图。
使用DC进行逻辑综合DesignEnvironment79使用DC进行逻辑综合DesignEnvironmentset_max_transition对时序的影响使用DC进行逻辑综合DesignEnvironment80使用DC进行逻辑综合DesignEnvironmentset_max_fanout对design,net,outputport进行操作,设定的不是具体的电容值。例如对一个design我们设定set_max_fanout12,表示在这个design中的一条net或一个port只能驱动12个fanout_load为1个单位的pin或6个fanout_load为2个单位的pin,在smic0.13um库中默认的fanout_load为1,我们可以用set_fanout_load自行设置,set_max_fanout和set_fanout_load仅仅是用做DRC的检查,他们的值与时序无关。图示如下:使用DC进行逻辑综合DesignEnvironment81使用DC进行逻辑综合DesignEnvironmentset_max_capacitance定义输出管脚可以驱动的最大电容值。set_max_transition和set_max_fanout间接的定义了outputport可以驱动的最大电容,set_max_capacitance则是设定的一个真实的电容值,outputport所带的容性负载不能超过这个值。一般情况下都通过set_max_transition来定义DRC规则,因为库里是使用transitiontime来计算动态延时。
DRC规则的优先级:
transition>fanout>capacitance例:set_max_transition0.3[get_designs*]set_max_capacitance1.5[get_portsout1]set_max_fanout3.0all_outputs()使用DC进行逻辑综合DesignEnvironment82使用DC进行逻辑综合DesignConstraints功能:描述设计的目标,包括时序和面积约束,要注意约束必须是可实现的,否则会导致面积过大,功耗增加或时序不能满足要求。设计约束的DC命令如下:
set_clock_latencyset_clock_transitionset_output_delayonoutputBlockBCl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林艺术学院《媒体发布与管理》2021-2022学年第一学期期末试卷
- 吉林艺术学院《构成与表现》2021-2022学年第一学期期末试卷
- 企业互关互助协议书范文范本
- 【初中数学】正数和负数课件 2024-2025学年人教+数学七年级上册
- 吉林师范大学《小学跨学科教学案例研究》2021-2022学年第一学期期末试卷
- 吉林艺术学院《教育学》2021-2022学年第一学期期末试卷
- 【初中数学】实际问题与一元一次方程(6)余缺和差倍数课件 2024-2025学年人教版数学七年级上册
- 吉林师范大学《数字图像处理技术》2021-2022学年期末试卷
- 2014年广西桂林市中考语文试卷(学生版)
- 2014年湖南省湘潭市中考语文试卷(含解析版)
- 电子能谱材料分析全
- 学生家长会调查问卷
- 个人借条范本版免费下载
- 合成气直接制低碳烯烃最新进展(课堂PPT)
- 小学《乒乓球》校本课程
- 工业硅技术问答
- 孙道荣《你不能头发蓬乱地走出我的店》阅读练习及答案
- 《颞下颌关节疾病》
- 调研报告调研过程(共7篇)
- 综合型家政服务公司运作方法和管理程序
- 小学美术教学工作坊工作总结(共8篇)
评论
0/150
提交评论