数字后端简要流程HDL代码逻辑综合布局布线形式验证综合的定义•逻辑综合:决定设计电路逻辑门之间的相互连接。•逻辑综合的目的:决定电路门级结构,寻求时序、面积和功耗的平衡,增强电路的测试性。•逻辑综合的过程(constraint_driven):Synthesis=Translation+LogicOptimization+Mapping首先,综合工具分析HDL代码,用一种模型(GTECH),对HDL进行映射,这个模型是与技术库无关的,也不包含Timing和Load信息;然后,在设计者的控制下,对这个模型进行逻辑优化;最后一步,进行逻辑映射和门级优化,将逻辑根据约束,映射为专门的技术目标单元库(targetcelllibrary)中的cell,形成了综合后的网表。综合环境初始化•初始化设计环境,技术库文件及其它设计环境设置。•search_path:指明文件的位置。•target_library:既技术库,由生产厂家提供,该库中的cells,用于逻辑映射。Targetlibrary的文件名应包含在Linklibrary的文件清单中,用于读取门级网表。•link_library:该库中的cells,DC无法进行映射,例如:RAM,ROM及Pad,在RTL设计中,这些cells以实例化的方式引用。•symbol_library:该库文件包含技术库中cells的图形表示,用于生成门级示意图。•read:读入HDL代码环境属性•定义设计的工艺参数,I/O端口属性,wire-load模型,下图解释了描述设计环境约束的DC命令:set_operating_conditionsset_max_capacitanceset_max_transition&set_max_fanoutoninput&outputportsorcurrent_design;BlockBClockDividerLogicBlockAset_loadonoutputsset_driveonClockset_driving_celloninputsset_wire_load_model•set_operating_conditions用于描述cells操作条件:process、voltage和temperature。例如:set_operating_conditions-maxslow•set_wire_load_model用于设置Nets的寄生RC模型,一般选用悲观的模型。例如:set_wire_load_model-namesmic18_slow•set_load用于定义nets或ports的电容负载,为了保证输出路径的时序,default条件下为0。例如:set_load0.6all_outputs()•set_drive用于定义模块的inputports,0表示最大的驱动强度,通常用于clockports和reset,例如:set_drive0{clk,rst}。•set_driving_cell用于定义inputports,模拟cell的驱动阻抗,为了保证输入路径的时序和输入信号的transitiontime。例如:set_driving_cell-lib_cellBUFX2-pinY-libraryslowall_inputs()•set_min_library允许用户同时设置worst-case和best-caselibraries,从而在初步编译时,DC修正hold-time冲突时,验证setup-time冲突。也可用于在编译时修正hold-time冲突。例如:set_min_libraryslow.db-min_versionfast.db•DRC的设计规则约束:set_max_transition、set_max_capacitance和set_max_fanout。这些约束用于的inputports,outputports或current_design,一般在技术库内部设置。当技术库的内部设置不能满足时,可用以上命令设置。例如:set_max_transition0.3current_designset_max_capacitance1.5current_designset_max_fanout3.0all_outputs()面积和时序约束•描述设计的目标,包括时序和面积约束,要注意约束必须是可实现的,否则会导致面积超额,功耗增加或时序不能满足要求。设计约束的DC命令如下:BlockBClockDividerLogicBlockAcreate_clock&set_clock_uncertaintyset_input_delayoninputsignalsset_max_areaforeachblockToplevelset_output_delayoninputsignals•set_max_area用于约束current_design的最大面积。0表示在满足时序、功耗的前提下,尽可能的减小面积。例如:set_max_area0•时序约束包括3个部分:allinputs、registertoregister和alloutputs。•输入路径的约束:set_input_delay:定义信号相对于时钟的到达时间。指一个信号,在时钟沿之后多少时间到达。•例如:set_input_delay-max20-clockCLK{get_portsA}set_input_delay-min0.8-clockCLK{get_portsA}•输出时序约束:set_output_delay:定义从输出端口数据不可用开始到后一个时钟有效沿的时间。例如:set_output_delay-max20-clockCLK{get_portsB}set_output_delay-min-0.5-clockCLK{get_portsB}•时钟描述:时钟的描述在设计中非常关键,一般通过clockperiod和clocksource(port/pin)、dutycycle、offset/skew和clockname进行描述。•DC时钟约束命令:create_clock:用于定义时钟的周期和波形(占空比及起始沿)例如:create_clock-period40-waveform{020}对于仅包含组合逻辑的模块,为了定义该模块的延时约束,需要创造一个虚拟时钟定义。例如:create_clock-nameV_clk-period20•set_clock_transition:在pre_layout必须设置一个固定的transition值(由技术库提供),因为时钟网有很大的fanout.这样可使DC根据该时钟计算实际的延时值。•set_clock_skew:设置时钟的skew及delay,pre_layout和post_layout命令选项不一样。-propagated选项让DC计算时钟的skew。•例如:set_clock_skew-delay2.5-minus_uncertainty2.0\-plus_uncertainty0.2CLK-minus_uncertainty用于setup-time的计算,-plus_uncertainty用于hold-time的计算。一个cell的delay是根据inputsignal的斜率和outputpin的电容负载决定。对于时钟信号,因为clocknetwork的fanout很大,从而造成clocknetwork末端门的时钟信号的clocktransitiontime很慢,是DC计算的门延迟失真。•set_dont_touch_network常用于port或net阻止DC隔离该net,和该net向连的门具有dont_touch属性,常用于CLK和RST。例如:set_dont_touch_network[CLK,RST]当一个电路包含门时钟逻辑时,若在时钟的输入设置set_dont_touch_network,则阻止DC隔离该门逻辑,导致DRC发现时钟信号冲突,对门RESET同样。•set_dont_touch应用于current_design,cell,net,references。阻止DC对模块中的这些元素进行技术映射。其它的一些约束条件•set_dont_use用于将技术库中的某些设计中不需要的cell滤除,比如Latch、DelayCell,禁止DC映射;例如:set_dont_use{mylib/SD*}•set_false_path指示DC对指定的路径不要按照时序约束优化。比如:异步路径或约束不可实现的路径。falsepath路径的鉴别在设计中很关键,如果不对falsepath路径进行标识,DC会对所有的路径进行优化,从而影响关键时序路径。此命令也用于当因为有falsepath关键逻辑,时序静态分析失败时。set_false_path-from[get_clockCLKA]-to[get_clockCLKB]•set_multicycle_path:因为DC假设所有的路径都是单周期的,为了满足时序,对多周期路径会做不必要的优化,从而影响相邻路径或面积。所以这个命令用于隔离多周期路径,通知DC通过这条路径所需的周期数。•例如:set_multicycle_path2-fromFFA/CP\-throughMultyply/Out-toFFB/D•set_max_delay:1、对于仅包含组合逻辑的模块,用此命令约束所有输入到输出的总延时。例如:set_max_delay5-fromall_inputs()-toall_outputs2、对于含有多个时钟的模块,可用通常的方法定义一个时钟,用此命令进行约束定义时钟和其他时钟之间的关系。例如:set_max_delay0–fromCLK2–toall_register(clock_pin)•set_min_delay:1、对于仅包含组合逻辑的模块,定义指定路径的最小延时。例如:set_min_delay3-fromall_inputs()2、和set_fix_hold一起使用,只是DC添加一定的延迟,满足最小延迟需求。编译•编译就是将GETCH逻辑网络映射为技术库的gatecell,使设计满足用户的约束。对于一个层次设计分两步实现:1、映射各子模块到逻辑门,不考虑约束;2、根据时序和面约束优化逻辑,修正模块分界间的违例。布局布线DesignSetupFloorPlanTimingSetupPlacementCTSRouteDFM&DataOutDesignSetupCreateLibraryAttachRefLibReadNetlistExpandNetlistOpenLib&CreateCellBindNetlistToCellPreserveTheHierarchyMarkTheHierarchySaveTheCellReferenceLibraryWorkingLibraryAttachTLU+Model•DesignSetup:布局布线的准备工作,读入网表,跟Foundry提供的STDCell、Pad库以及Macro库进行映射。FloorPlanLoadTDFFileCreateCorePowerRingsSetupFloorplanLogicConnectPGPrerouteMacros&PadsCreateCorePowerStrapsDumpFloorplanSaveAsInsertPadFillersAddP/GRingsPlaceMacro(Flylines)PrerouteSTDVerifyP/GStructure•FloorPlan:整体的布局规划,设置Core的大致面积、管脚位置以及Macro位置等一些粗略的布局信息。TimingSetupLoadSDCFileTimingDataCheckTimingSetupTimingReportSaveAs•TimingSetup:读入时序约束文件(.sdc),设置时序信息,主要是Environment、Optimi