一逻辑综合1逻辑综合的含义实现在满足设计电路的功能,速度及面积等限制条件下,将行为级描述转化为指定的技术库中单元电路的连接。2逻辑综合的原因RTL代码是理想的情况,在实际情况中会有门的延时,导线的延时,信号的转换时间及时钟信号到达各个触发器的时间不相等情况。3综合的过程主要包括转译(Translation),优化(Optimization),映射(Mapping)三个过程。3.1转译:用HDL语言描述的电路转化为用GTECH库元件组成的逻辑电路的过程。GTECH是synopsys的通用工艺库,它仅表示逻辑函数的功能,并没有映射到具体的厂家工艺库,是独立于厂家工艺的。3.2优化:根据设计者对电路设定延时和面积等约束条件对电路进行优化设计的过程。它通过各种方法尽量满足设计者对电路的要求。3.3映射:把用GTECH库元件的电路映射到某一固定厂家的工艺库上,此时的电路包含了厂家的工艺参数LibraryCells.4综合的目标:得到一个功能和时序都满足的网表。达到面积最小化,功耗最小化和性能最大化。二综合软件(DC)DesignCompile是synopsys的综合软件,它的功能是把RTL级的代码转化为门级网表。DC综合的流程如下:1综合环境建立1.1启动文件启动文件用来指定综合工具所需要的一些初始化信息。DC使用名为“.synopsys_dc.setup”的启动文件,启动时,DC会以下述顺序搜索并装载相应目录下的启动文件:1)、DC的安装目录;2)、用户的home目录;3)、当前启动目录。注意:后装载的启动文件中的设置将覆盖先装载的启动文件中的相同设置。search_path=search_path+{“.”,synopsys_root+“/dw/sim_ver”}search_path=search_path+{“~/risc32/synthesis/libraries”}target_library={tcb773stc.db}synthetic_library={dw_foundation.sldb}link_library={“*”,dw_foundation.sldb,tcb773stc.db}symbol_library={tcb773s.sdb}synlib_wait_for_design_license={DesignWare-Foundation}aliasrt“report_timing”designer=XXXXXcompany=“ASICLab,FudanUniv.”search_path指定了综合工具的搜索路径。target_library:为综合的目标库,它一般是由生产线提供的工艺相关的库。synthetic_library:综合库,它包含了一些可综合的与工艺无关的IP。dw_foundation.sldb是Synopsys提供的名为DesignWare的综合库,它包含了基本的算术运算逻辑、控制逻辑、可综合存储器等IP,在综合是调用这些IP有助于提高电路性能和减少综合时间。link_library:链接库,它是DC在解释综合后网表时用来参考的库。一般情况下,它和目标库相同;当使用综合库时,需要将该综合库加入链接库列表中。symbol_library为指定的符号库。synlib_wait_for_design_license用来获得DesignWare-Foudation的许可(license)。alias语句与UNIX相似,它定义了命令的简称。最后的designer和company项则表明了设计者和所在公司。1.2设计实体在DC中,总共有8种设计实体:设计(Design):一种能完成一定逻辑功能的电路。设计中可以包含下一层的子设计。单元(Cell):设计中包含的子设计的实例。参考(Reference):单元的参考对象,即单元是参考的实例。端口(Port):设计的基本输入输出口。管脚(Pin):单元的输入输出口。连线(Net):端口间及管脚间的互连信号。时钟(Clock):作为时钟信号源的管脚或端口。库(Library):直接与工艺相关的一组单元的集合。2逻辑综合的过程DC通过Script文件,自动完成模块的综合过程,其内容如下:2.1向DC输入用Verilog或VHDL描述的设计:RTLdesignentry编码指南RTL级的HDL描述实际是电路结构的文本描述,它是技术无关的,类似于网表。HDL语言先于综合工具出现,综合工具只能根据HDL代码进行逻辑推断,对完成同一功能而书写方式不同的HDL代码,综合工具会产生不同逻辑电路。所以不能依靠DC去修正不符合规范的代码。写代码时,需清楚描述的硬件电路拓扑结构。RTL描述内容如下:寄存器的结构;电路的拓扑;寄存器之间的功能;DC仅对寄存器之间的逻辑进行优化,不会对寄存器的排列进行优化。输入命令:read和analyze&elaborate,推荐用analyze&elaborateanalyze&elaborate允许设计者在设计的GTECH建立之前,首先去分析设计的语法错误和进行HDL代码转换。Analyze做语法的检查并产生一个“.syn”文件,存储于work路径下的定义的设计库内,可供后来elaborate使用。对于一个analyzed设备,只需用elaborate重新输入,节省时间。Read就不行。2.2设定约束:Environmentconstraints定义设计的工艺参数,I/O端口属性,统计wire-load模型Set_operating_conditions:设置工作条件命令芯片供应商提供的库通常有max,type,min三种类型,代表操作环境为最坏(worst),典型(type),最好(best)三种情况。芯片的操作环境包括:操作温度,供电电压,制造工艺偏差和RC树模型。一般说来,电压越低,操作温度越高,工艺偏差系数越大,产品速度越慢,反之,速度越快。当电压,温度和工艺偏差有波动的时候,乘以系数K因子来模拟这种影响计算延时。Tree_type定义了环境的互连模型,通过定义这个值选取适当的公式来计算互连线的延迟。如:命令set_operating_conditions–minBEST–maxWORST用于指示DC对设计的WORST和BEST条件,同时优化。Set_wire_loadwire-loadmodel-modetop|enclosed|segmented:设置连线负载模型向DC提供wire_load信息。在DC综合的过程中,连线延时是通过设置连线负载模型确定。连线负载模型基于连线的扇出,估计它的电阻电容等寄生参数,它由foundary提供。根据导线负载模型(wire_load_model),DC可以估算出连线的电容,电阻和面积。找出这条线所驱动的负载,得出其扇出数,通过以网表可以查出相应的线的长度。通常技术库里包含许多负载模型,每一种wire-load模型都代表一定模块的尺寸。导线负载模型模式(wireloadmodelmode)用来选择穿过层次边界时的线的模型,有top,enclosed,segmented三种模式,如果不指定模式,默认的模式是top。Set_loadvalueobjectlist:设定输出负载综合出来的电路必须要驱动下一级电路,如果负载取得过小,下级电路无法正常工作,负载取得过大,会增大上一电路的难度。用set_load命令可以设置端口或者线上的电容负载,从而保证输出路径的时序(transitiontime)。set_driving_cell-cellcellname-pinpinnameobjectlist:设置输入驱动驱动是指施加到待综合电路的驱动能力。如果取值不当,综合出来的电路就不能正常工作。如果驱动太大,综合出来的电路的负载很大;驱动太小,信号的变化边沿会很差。set_drive命令用特定的驱动阻抗来设置输入端口的驱动强度。保证输出路径的时序,确定输入信号的transitiontime。在默认的情况下,DC认为驱动输入的单元的驱动能力为无穷大,即transitiontime为0。DRC的设计规则约束:set_max_transitionvalueobjectlist:设置最大传输时间Transitiontime是指改变某线所驱动的pin所需用的时间,该时间的计算方法是基于工艺库的。输出的传输时间是输入传输时间及输出负载的函数关系。DC在优化的过程中就是确保所有net的对应的传输时间小于所设定的最大传输时间。set_max_capacitancevalueobjectlist:设置线负载电容Transitiontime不能提供对net(线)的电容的直接控制,此命令可实现独立于传输时间约束的最大容值的约束。对于连接输出pin上的net,其对应的容值是net本身的电容加上所连接的pin的容值,DC将这个计算结果与所设定的Max_capacitance比较,决定是否违反设计规则约束。set_max_fanoutvalueobjectlist:设置最大扇出负载设置某线所能驱动的负载数量上线,如果某线的扇出负载过重,DC可通过改变单元的驱动强度来修正该约束违例的情况。这些约束用于的inputports,outputports或current_design,一般在技术库内部设置。当技术库的内部设置不能满足时,可用以上命令设置。例如;set_max_transition0.3current_designset_max_capacitance1.5find(port,”out1”)set_max_fanout3.0all_outputs()2.3设计和面积约束:Designandclockconstraints描述设计的目标,包括时序和面积约束,要注意约束必须是可实现的,否则会导致面积超额,功耗增加或时序不能满足要求。主要包括两点:约束综合模块的最大面积(set_max_area)约束综合模块timingpath(Create_clock,Set_input_delay,Set_output_delay)IC代码的综合过程可以说就是时序分析过程,DC会将设计打散成一个个路经,这些路经上有cell延迟和net延迟,然后DC会根据加的约束,来映射库中符合这种延迟以及驱动的器件。从而达到综合的目的。Create_clock:用于定义时钟的周期和波形(duty及起始沿);时钟的必要定义有时钟的来源(portorpin)及时钟的周期。附加选项有占空比,offset/skew和时钟名称。通过时钟定义约束了寄存器到寄存器之间的延时例如:create_clock–period40–waveform{020}CLK周期40ns上升沿0ns,下降沿20ns;Set_clock_transition在pre_layout必须设置一个固定的transition值(由技术库提供),因为时钟网有很大的fanout.这样可使DC根据该时钟计算实际的延时值。Set_clock_skew:设置时钟的skew及delaypre_layout和post_layout命令选项不一样。Pre-layout需要估计时钟树的延时和抖动,post-layout用户不需定义时钟的延时和抖动,他们由时钟树决定。clocktransitiontime也不需定义。Set_input_delay:约束输入延时定义信号相对于时钟的到达时间,指一个信号,在时钟沿之后多少时间到达。例如:set_input_delay–max23.0–clockCLK{dataout}Set_output_delay:约束输出延时定义从输出端口数据不可用开始距后一个时钟沿的时间:即时钟周期间去cell从上一个时钟沿开始的工作时间。如:set_output_delay–max19.0–clockCLK{dataout}Set_dont_touch_network,常用于port或net阻止DC隔离该net,和该net向连的门具有dont_to