《数字电路自动化设计.ppt》由会员分享,可在线阅读,更多相关《数字电路自动化设计.ppt(53页珍藏版)》请在课桌文档上搜索。
1、数字电路自动化设计,Design Flow,LEDAVCSDC,ISEFMPTICC,AstroPrimeRailDFT CompilerStarRCVirtuoso,Cadence,2,综合的定义,逻辑综合:决定设计电路逻辑门的相互连接。逻辑综合的目的:决定电路门级结构、寻求时序和与面积的平衡、寻求功耗与时序的平衡、增强电路的测试性。逻辑综合的过程:首先,综合工具分析HDL代码,用一种模型(GTECH),对HDL进行映射,这个模型是与技术库无关的;然后,在设计者的控制下,对这个模型进行逻辑优化;最后一步,进行逻辑映射和门级优化,将逻辑根据约束,映射为专门的技术目标单元库(target cel
2、l library)中的cell,形成了综合后的网表。,ASIC design flow,Verified RTL,DesignConstraints,IP and LibraryModels,Logic Synthesis optimization&scan insertionStatic Timing Analysis,Formal verification,Floorplan placement,CT Insertion&Global routing,Transfer clock tree to DC,Post global routeStatic Timing Analysis,Det
3、ail routing,Post-layout Optimization(in-place optimization(IPO)Static Timing Analysis,Tape out,Time ok?,Time ok?,no,no,Time ok?,no,ASIC design flow,设计举例,tap控制器,已完成代码编写及功能仿真:Tap_controller.vTap_bypass.vTap_instruction.vTap_state.v完成全部设计还需经过如下几个步骤:Pre_layoutSynthesisSTA using PrimeTimeSDF generationVe
4、rificationFloorolanning and RoutingPost_layout反标来自layout tool的信息,STA using PrimeTimePost-layout OptimizationFix Hold-Time Violation,ASIC design flow,Initial Setup:建立设计环境,技术库文件及其它设计环境设置。DC.synopsys_dc.setup 文件 company=“zte corporation”;designer=“name”;technology=“0.25 micron”search_path=search_path+“
5、.”“/usr/golden/library/std_cells”“/usr/golden/library/pads”target_library=std_cells_lib.db link_library=“*”,std_cells_lib.db,pad_lib.db symbol_library=std_cells.sdb,pad_lib.sdb,ASIC design flow,Synthesis:利用约束完成设计的门及实现及扫描插入Constrain scripts/*Create real clock if clock port is found*/if(find(port,clk)
6、=clk)clk_name=clk create_clock-period clk_period clk/*Create virtual clock if clock port is not found*/if(find(port,clk)=)clk_name=vclk create_clock-period clk_period-name vclk,ASIC design flow,Constrain scripts(续)/*Apply default drive strengths and typical loads for I/O ports*/set_load 1.5 all_outp
7、uts()set_driving_cell-cell IV all_inputs()/*If real clock,set infinite drive strength*/if(find(port,clk)=clk)set_drive 0 clk/*Apply default timing constraints for modules*/set_input_delay 1.2 all_inputs()-clock clk_name set_output_delay 1.5 all_outputs()-clock clk_name set_clock_skew-minus_uncertain
8、ty 0.45 clk_name/*Set operating conditions*/set_operating_conditions WCCOM/*Turn on Auto Wireload selection Library must support this feature*/auto_wire_load_selection=true,ASIC design flow,Compile and scan insert的scripts,采用bottom_up的编译方法 set_fix_multiple_port_net buffer_constants all compile scan c
9、heck_test create_test_pattern sample 10 preview_scan insert_scan check_test 如果模块内的子模块具有dont_touch 属性需添加如下命令,因要插入扫描 remove_attribute find(-hierarchy design,”*”)dont_touchWrite netlist remove_unconnected_ports find(-hierarchy cell,”*”)change_names hierarchy rules BORG set_dont_touch current_design wri
10、te herarchy output active_design+”.db”write format verilog hierarchy output active_design+”.sv”,ASIC design flow,Pre_layout 的 STA:用DC的静态时序分析引擎做block的STA,用PrimeTime做full_chip的STA。Setup_time分析Hold_time分析 其时序约束和提供给DC做逻辑综合的约束相同。静态时序分析同综合一样,是一个迭代的过程,和cell的位置及布线关系密切,通常都执行多次,直到满足需要。,ASIC design flow,SDF ge
11、neration,pre_layout的SDF文件,用于pre_layout timing仿真,同时还需提供时序约束文件(SDF格式)给layout tool做布局布线。script文件如下:active_design=tap_controller read active_design current_design active_design link Create_clock period 33 waveform 0 16.5 tck Set_dont_touch_network tck trst set_clock_skew delay 2.0 minus_uncertainty 3.0
12、tck set_driving_cell cell BUFF1X pin Z all_inputs()set_drive 0 tck trst set_input_delay 20.0 clock tck max all_inputs()set_output_delay 10.0 clock tck max all_outputs()write_timing format sdf-v2.1-output active_design+”.sdf”write_constraints format sdf cover_design-output constraints.sdf,ASIC design
13、 flow,Verification利用SDF文件进行动态时序仿真:利用功能仿真时。用verilog 编写的test_bench 文件形式验证:利用数学算法检查设计的逻辑的等效性,静态验证,需要的时间比动态仿真少,验证全面。在这里验证RTL描述与gate_level网表的逻辑等效性。Floorolanning and global Routing;Estimated 寄生电容和RC delay的抽取;利用抽取的参数静态时序分析,若时序不满足要求,生成custom wire_load 做incremental synthesis即post_layout的优化,采用reoptimize_desig
14、n in_place命令,其script文件需反标抽取的参数到设计;Detail routing;real寄生电容和RC delay的抽取;利用抽取的参数静态时序分析,修正hold_time如需要做post_layout的优化;生成post_layout的SDF文件,做gate_level仿真验证;,ASIC design flow,ECOEngineering change order,不属于正常的ASIC流程,一般只有在ASIC设计的后期,需要改变网表,可利用ECO,例如,在tape-out(sign-off)以后,遇见设计的硬件bug。采用ECO可仅对设计的一小部分重新布线不影响chip
15、其他部分的位置及时序,通常,修改不能大于10%。最新版本的DC提供由ECO compiler,可使设计者手工修改网表,节省时间。一些layout工具也具有ECO功能。,DC介绍,Synopsys Design Compiler,是一个基于UNIX系统,通过命令行进行交互的综合工具,除了综合之外,它还含有一个静态时序分析引擎及FPGA和LTL(links-to-layout)的解决方案。我们就以下几个方面对DC做以介绍:script文件:由DC的命令构成,可使DC自动完成综合的整个过程。DC支持的对象、变量、属性DC支持的文件格式及类型DC在HDL代码中的编译开关,控制综合过程Translate
16、_off/translate_on:指示DC终止或开始verilog 源代码转换的位置。full_case:阻止case语句在不完全条件下生成latch。,综合环境建立,在综合之前必须用setup文件配置综合的环境,下面,我们就以下几个方面对setup文件进行介绍:setup文件的位置setup文件的内容setup文件举例,综合环境建立,setup文件的位置:由一个setup文件提供,文件名必须为“.synopsys_dc.setup”,通过向相关环境变量赋值,定义技术库的位置及综合需要参数。setup文件的位置如下:Synopsys installation directory:它用于卸载S
17、ynopsys 技术独立库及别的参数,不包含设计相关的数据。Users home director:用的setup信息。Project working directory:设计的setup信息 DC按以上顺序依次读取setup文件,最后一个读取的setup文件将覆盖前面读取的setup文件。将设计相关的startup文件放于Project working directory下。,综合环境建立,Startup文件必须定义如下变量:Search_path:指明库文件的位置Target_library:既技术库,由生产厂家提供,该库中的cells,被 DC用于逻辑映射。Target library的
18、文件名应包含在Link library的文件清单中,用于DC读取门级网表。Link_ library:该库中的cells,DC无法进行映射,例如:RAM,ROM及Pad,在RTL设计中,这些cells以实例化的方式引用。Symbol_library:该库文件包含技术库中cells的图形表示,用于DA生成门级示意图。Target_library和Link _library为设计者提供了将门级网表从一种技术在映射 到另一种技术的方法,将旧的Target library文件名包含在Link_library的文件清单中,而Target_library包含新的Target library文件名,利用tr
19、anslate命令实现。,综合环境建立,设计相关的startup 文件的例子:.synopsys_dc.setup 文件 company=“zte corporation”;designer=“name”;technology=“0.25 micron”search_path=search_path+“.”“/usr/golden/library/std_cells”“/usr/golden/library/pads”target_library=std_cells_lib.db link_library=“*”,std_cells_lib.db,pad_lib.db symbol_libra
20、ry=std_cells.sdb,pad_lib.sdb 其它的环境变量的设置参看DC的操作手册。,逻辑综合的过程,DC通过Script文件,自动完成模块的综合过程,其内容如下:RTL design entryEnvironment constraintsDesign and clock constraintsCompile design into mapped gatesOptimizing designanalyze the synthesis results and debug potential problems.Save design netlistReport constraint
21、s(Optional)Apply critical path constraints(Optional)Second compile to improve critical paths(Optional)Second path compile constraint report,Environment constraints,功能:定义设计的工艺参数,I/O端口属性,统计wire-load模型。下图解释了描述设计环境约束的DC命令:,Top level,Environment constraints,Set_operating_conditions 用于描述操作条件:process,volta
22、ge,temperature,cell和wire 的delay和操作条件呈线性关系。如:Set_operating_conditions WORST(或TYPICAL、BEST)命令set_operating_conditions min BEST max WORST 用于指示DC对设计的WORST和BEST条件,同时优化。,Environment constraints,Set_wire_load-mode 向DC提供wire_load信息,通常技术库里包含许多负载模型,每一种wire-load模型都代表一定模块的尺寸,模拟模块内部nets的delay,用户也可以创建自己的wire_load
23、模型去模拟各设计模块的net loading。这有三种wire-load mode:top,enclosed,segmented,用于模拟各设计层次的net wire_load的关系。Top:所有层次子模块的wire_load和top-level相同,如果用户计划flatten设计去layout可选择此模式编译子模块;Enclosed:子模块net的wire_load和enclosed 它的最小模块相同,推荐用于在layout后logical and physical hierarchy相似的设计;Segmented:子模块之间net的wire_load和enclosed该net的模块相同,需
24、技术库提供Segmented wire_load,一般不常用;wire_load模型的选择很重要,太悲观或太乐观的模型都将产生综合的迭带,在 pre-layout的综合中应选用悲观的模型。命令格式如下:dc_shellset_wire_load MEDIUM mode top,Environment constraints,Environment constraints,Set_load 定义nets或ports的电容负载,为了保证输出路径的时序,例如:,Environment constraints,Set_drive:主要用于模块的input port,0表是最大的驱动强度通常用于cloc
25、k port,例如:set_drive 0 CLK RST。set_driving_cell-cell-pin:模拟input port驱动cell的驱动阻抗,为了保证输出路径的时序,确定输入信号的transition time例如:,Environment constraints,Set_min_library-min_version 允许用户同时设置worst-case和best-case libraries,从而在初步编译时,DC修正hold-time冲突时,验证setup-time冲突。也可用于在编译时修正hold-time冲突。DRC的设计规则约束:set_max_transitio
26、n set_max_capacitance set_max_fanout 这些约束用于的input ports,output ports或current_design,一般在技术库内部设置.当技术库的内部设置不能满足时,可用以上命令设置。例如;set_max_transition 0.3 current_design set_max_capacitance 1.5 find(port,”out1”)set_max_fanout 3.0 all_outputs(),design and clock constraints,功能:描述设计的目标,包括时序和面积约束,要注意约束必须是可实现的,否则会
27、导致面积超额,功耗增加或时序不能满足要求。设计约束的DC命令如下:,set_output_delay on output,design and clock constraints,主要包括两点约束综合模块的最大面积(set_max_area)约束综合模块timing path(Create_clock,Set_input_delay,Set_output_delay),design and clock constraints,时钟描述 时钟的描述在设计中很关键,传统上,在clock source 加很大的buffer去驱动整个时钟网络,布线时,使时钟网络成鱼骨状,用于减少时钟网络延时和cloc
28、k_skew。对于VDSM,传统的方法已不适用,而是由layout工具根据cell的位置综合时钟树,以满足我们对时钟的需求。下面,我们介绍一下描述时钟的DC命令。时钟DC命令介绍Create_clock:用于定义时钟的周期和波形(duty及起始沿);例如:create_clock period 40 waveform0 20 CLK周期40ns 上升沿0 ns,下降沿20 ns;对于仅包含组合逻辑的模块,为了定义该模块的延时约束,需创造一个虚拟时钟定义相对于虚拟时钟的输入输出延时。例如:create_clock-name vTEMP_CLK-period 20Set_clock_transit
29、ion:在pre_layout必须设置一个固定的transition值(由技术库提供),因为时钟网有很大的fanout.这样可使DC根据该时钟计算实际的延时值。,design and clock constraints,Set_clock_skew:设置时钟的skew及delay,pre_layout 和post_layout命令选项不一样。-propagated选项让DC计算时钟的skew。,design and clock constraints,例如:Set_clock_skew uncertainty 0.5 CLK,design and clock constraints,Pre-l
30、ayout时钟DC 命令介绍:估计时钟树的延时和抖动,DC命令如下:create_clock period 40 waveform 0 20 CLK Set_clock_skew delay 2.5 uncertainty 0.5 CLK Set_clock_transition 0.2 CLK set_dont_touch_network CLK set_drive 0 CLK 考虑到layout后时钟网络的变化可若下设置时钟skew:set_clock_skew delay 2.5 minus_uncertainty 2.0 plus_uncertainty 0.2 CLK minus_u
31、ncertainty用于setup-time的计算,plus_uncertainty 用于hole-time的计算.一个cell的delay使根据input signal的斜率和output pin的电容负载决定,对于时钟信号,因为clock network的fanout 很大,从而造成clock network 末端门的时钟信号的clock transition time很慢,使DC计算的门延时失真。,design and clock constraints,post-layout时钟DC命令介绍:这个阶段,用户不需定义时钟的延时和抖动,他们由时钟树决定。clock transition t
32、ime也不需定义。如果layout 工具提供与DC的直接接口,则直接将包含有时钟树的网表回馈给DC,不需在script文件中对时钟的延时和抖动进行描述,如果layout 工具不能实现此功能,则需用户从layout 工具提取时钟的延时和抖动信息,描述命令同pre_layout.如果含有时钟树的网表能够移植到DC,则clock的命令描述如下:create_clock period 40 waveform 0 20 CLK set_clock_skew propagated minus_uncertainty 2.0 plus_uncertainty 0.2 CLK set_dont_touch_n
33、etwork CLK set_drive 0 CLK 另外,很小的clock uncertainty定义的目的是考虑process的变化。如果无法得到包含有时钟树的网表,只有SDF文件,则对原网表只需定义时钟,并将SDF 文件回馈给原网表,时钟的延时和抖动由SDF文件决定。,design and clock constraints,生成时钟DC命令介绍:对于内部产生时钟的模块,如内部含有分频逻辑,DC不能模拟时钟产生模块创造一个时钟对象。如下图:DC创造时钟命令应用于顶层输入CLK,因clkB 继承自CLK,所以Block B的时钟来自CLK,对clkA,因CLK被clk_div 内部的寄存器
34、隔离,不能传递给clkA,所以clkA 这个时钟对象应在clk _div的output port定义,命令如下:dc_shellcreate_clock period 40 waveform 0 20 CLK dc_shellcreate_clock period 80 waveform 0 40 find(port,”clk_div/clkA”),Clk_div,clkB,Block A,Block B,CLK,clkA,design and clock constraints,输入路径DC命令介绍:Set_input_delay:定义信号相对于时钟的到达时间。指一个信号,在时钟沿之后多少时
35、间到达。例如:set_input_delay max 23.0 clock CLK dataout set_input_delay min 0.0 clock CLK dataout,design and clock constraints,输出路径DC命令介绍:Set_output_delay:定义从输出端口数据不可用开始距后一个时钟沿的时间:既时钟周期间去cell从上一个时钟沿开始的工作时间。如:set_output_delay max 19.0 clock CLK dataout 用该命令对一些信号进行over-constrain,从而获得最大 setup-time.但可能导致面积和功耗
36、的增加。一个负值(如:-0.5)可在layout后,被 in-place optimization用于为hold_time修正提供timing margin.,design and clock constraints,其它设计DC命令介绍:Set_dont_touch_network,常用于port或net阻止DC隔离该net,和该net向连的门具有dont_touch属性。常用于CLK和RST 例如:Set_dont_touch_networkCLK,RST。当一个模块例用原始的时钟作为输入,在该模块内部利用分频逻辑产生了二级时钟,则应对二级时钟output port上设置set_dont_
37、touch_network.当一个电路包含门时钟逻辑时,若在时钟的输入设置set_dont_touch_network,则阻止DC 隔离该门逻辑,导致DRC发现时钟信号冲突,对门RESET同样。Set_dont_touch,应用于current_design,cell,net,references.阻止DC对模块中的这些元素进行技术映射。例如:Set_dont_touch find(cell,”sub1”)Set_dont_use:用于.setup文件用此命令可将技术库中的某些cell滤出,禁止DC映射;例如:Set_dont_use mylib/SD*,将技术库中名字以SD起头的flip-f
38、lops.,Advanced constraints,Path:每一条路径都由startpoint 和endpointstatrpoint:input ports 或时序cell的clock pins;endpoint:output ports或时序cell的data pins;Path_delay,Advanced constraints,Set_false_path:指示DC不要对指定的路径按照时序约束优化,如:异步路径或约束不可实现的路径。false path路径的鉴别在设计中很关键,如果不对false path路径进行标识,DC会对所有的路径进行优化,从而影响关键时序路径。此命令用于当
39、因为有false path关键逻辑时序静态分析失败时。例1,在clock 域之间的false path:set_false_path-from get_clock CLKA-to get_clock CLKB,Advanced constraints,例2,logic的false path:dc_shellset_false_path through mux1/A through mux2/A dc_shell set_false_path through mux1/B through mux2/B,Advanced constraints,例3,对含有tristates 的path,DC总是
40、认为tristates 时能,会产生false path,如下图,读写不可能在同一个周期:,Advanced constraints,例3,我们推荐将tristates 最好移致顶层,在子模块中就无false path:set_false_path-through get_pins U1/DATA_BUS_OUT1-through get_pins U1/DATA_BUS_IN1,Advanced constraints,Set_multicycle_path:因为DC假设所有的路径都是单周期的,为了满足时序,对多周期路径会做不必要的优化,从而影响相邻路径或面积。所以这个命令用于隔离多周期路径
41、,通知DC通过这条路径所需的周期数。例如:dc_shell set_multicycle_path 2-from FFA/CP-through Multiply/Out-to FFB/D,Advanced constraints,Group_path:将设计中的时序关键路径绑在一起,可以使路径组间具有优先次序,命令格式:dc_shellgroup_path to out1 out2 name grp1;但添加太多的组会增加编译时间;且会增加最坏违例路径延时。,Advanced constraints,Set_max_delay对于仅包含组合逻辑的模块,用此命令约束所有输入到输出的总延时。例如:
42、set_max_delay 5 from all_inputs()to all_outputs对于含有多个时钟的模块,可用通常的方法定义一个时钟,用此命令进行约束定义时钟和其他时钟的关系。例如:set_max_delay 0-from CK2-to all_register(clock_pin)该命令还是用于包含gated clocks or resets的设计。Set_min_delay,对于仅包含组合逻辑的模块,定义指定路径的最小延时例如:Set_min_delay 3 from all_inputs()set_fix_hold一起使用,只是DC添加一定延时,满足最小延时的定义。,SDF文
43、件的产生,SDF文件的生成 SDF文件分为如下两种:pre_layoutpost_layout post_layout的SDF文件由DC在设计回注了RC延时值和lumped电容后产生。PT也 可产生SDF文 件。DC命令如下:write_timing format sdf-v2.1 outputSDF用于做gate-level动态时序仿真。SDF包含的时序信息组成如下:IOPATH delay:cell delay,根据输出的wire loading 和输入信号的transition计算INTERCONNECT delay:是一条路的driving cell的output pin和driven
44、 cell的input pin RC delay。SETUP timing check:根据技术库的描述,确定时序cell的setup-timeHOLD timing check:根据技术库的描述,确定时序cell的hold-time,SDF文件的产生,生成pre_layout的SDF文件pre_layout的延时根据通用wire-load计算,因为没有时钟树的插入,所以首先需对时钟树延时进行估计,DC命令如下:create_clock period 30 waveform 0 15 CLK set_clock_skew delay 2.0 CLK set_clock_transition 0
45、.2 CLKDC利用以上值做静态时序分析,在生成SDF文件时,不会输出。为了使 DC用设置的clock delay代替计算,DC可对时钟的input pad(CLKPAD)作如下设置:set_annotated_delay 2.0 cell-from CLKPAD/A to CLKPAD/Z设置clock_transition不仅用于静态时序分析,还用于计算driven cell的delay,将结果写入SDF文件中。,SDF文件的产生,生成post_layout的SDF文件 需生成之前,做如下设置,反标layout数据到设计:read_timing format sdf include qui
46、et create_clock period 30 waveform 0 15 CLK set_clock_skew propagated CLKSDF文件的时序检查 部分设计的setup_time和hold_time的违例常引起仿真出现Xs,引起仿真失败。但有时,我们想忽略这部分设计的违例验证其它部分,这时我们可以人为的选择伪造SDF文件中setup_time和hold_time 的值,使仿真成功。然而最好使用下列DC命令向仿真器注明setup_time和hold_time 的值为zero,确保仿真成功。set_annotated_check 0 setup hold-from REG1/C
47、LK-to REG 1/D,SDF文件的产生,阻止错误的时序计算在SDF文件的输出 Cell delay由input transition 和输出负载决定,而input transition 又由driving cell的transition delay决定,所以,若driving cell由多个time arc,产生一个很大的driven cell delay,为了避免这个问题,阻止阻止错误的时序计算在SDF文件的输出,在生成SDF文件之前,使用如下DC命令:set_disable_timing U1 from A to Z,reset,signal_a,2ns,0.3ns,U1,U2,Z,
48、I,Z,Affected Gate,DC综合简易流程,在自己的目录下创建source、scripts、output、reports四个文件夹将.synopsys_dc.setup 放入该目录下将设计的verilog代码放入source文件夹中将约束文件放入scripts中,如课上所说的cons.tcl、run.tcl,DC综合简易流程,在该目录下输入dc_shell-t,即启动DC然后直接输入run或source./scripts/run.tcl即可,时序仿真,在modelsim中创建新的一个project,将标准单元的verilog仿真模型(如umc18.v,在工艺库里找到)、在output
49、文件夹中综合后的网表(如示例中的sd_crc16.v)和测试代码加入工程。编译,注意将verilog仿真模型编译到另一个库中,该过程为:在Workspace-Library中新建一个库,再将verilog仿真模型如umc18.v的Compile to library改为新建的库下。,时序仿真,编译完后,在Simulate下拉菜单中选Start Simulation,然后选择SDF栏,点击ADD出现了ADD SDF Entry对话框,选中综合生成的SDF文件并打开。再在Apply to Region填入“/测试代码中被测电路的示例名”,点击OK确定。然后点击Library栏中的Add,在跳出的Select Library对话框中选择自己新建的在Library中的仿真模型库最后点击Start Simulation对话框中得Design栏,选择work库中自己定义的测试模块,点击OK启动仿真,此时的仿真波形引入了延时,