首页 Design Compiler使用笔记_DC中文笔记

Design Compiler使用笔记_DC中文笔记

举报
开通vip

Design Compiler使用笔记_DC中文笔记Design Compiler使用笔记_DC中文笔记 DC的手册包括3部分,分别是命令行手册,User Guide,以及参考手册。 其中参考手册有3个,分别是: Constraints & Timing Optimization & Timing Analysis Register Retiming 本系列笔记为阅读这三个参考手册所做的笔记 Notes for DC Reference Manual: Constraints & Timing, No.1 本文档(约束和时序)包括六章: 1. 基本概...

Design Compiler使用笔记_DC中文笔记
Design Compiler使用笔记_DC中文笔记 DC的手册包括3部分,分别是命令行手册,User Guide,以及参考手册。 其中参考手册有3个,分别是: Constraints & Timing Optimization & Timing Analysis Register Retiming 本系列笔记为阅读这三个参考手册所做的笔记 Notes for DC Reference Manual: Constraints & Timing, No.1 本文档(约束和时序)包括六章: 1. 基本概念 2. 约束 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 3. 描述设计环境 4. 指定时钟和时钟网络 5. 描述逻辑功能和信号端口 6. 在层次化设计中传播约束 Notes for DC Reference Manual: Constraints & Timing, No.2 基本概念篇: 利用DC进行综合,主要的过程就是设定适当的约束,从而指导DC综合出较为优化的结果,DC当中进行综合可以分成三大步骤:Transfer、Mapping、Optimization。 总的流程来说为: 1. 设定各种用于综合的库(.db或者.lib格式) 这些库包括标准单元库、I/O库、Memory Compiler生成的Memory/Regfile的.lib库以 及各种IP核的库。库中主要描述了库线负载模型、Max_transition、Max_Capacitance 等等;各种单元的时延、面积、逻辑功能、输入输出负载、功耗等等,注意,具有相 同footprint的单元是可以互相替换的。 2. 读入设计 此时可以对设计设定 参数 转速和进给参数表a氧化沟运行参数高温蒸汽处理医疗废物pid参数自整定算法口腔医院集中消毒供应 (Verilog当中的parameter,VHDL当中的generic)。设计读 入以后将会被转换(Transfer)成网表,该网表是基于一种通用库的,即gtech库(Generic Technology),该库可以较为容易的映射到各种实际的工艺库当中,当然,这个库是没 有时延的。 3. 设定约束 DC的约束总体分成两类:Design Rule Constraints以及Optimization Constraints。前者 是必须要满足的,包括工艺库当中进行的各种限定,而后者是为了优化而设定的。总 的说来,约束包括面积,时序,负载,Porosity,动态/漏功耗(使用Power Compiler )等几大类。 4. 约束设定好之后,就可以让DC根据这些约束将通用库的网表映射(Mapping)到实际 的库当中去,并进行各种的优化(Optimization),此时就可以得到结果的网表,用于后 端的布局布线。 5. DFT的流程可以在步骤3中完成,也可以在网表settle之后。DFT的流程包括扫描链 插入以及ATPG等。 6. 最后就是生成门级的网表(.v)、导出约束文件(.sdc,用于指导后面的布局布线)、时 延文件(.sdf,用于静态时序 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 STA),当然还要包含功耗、面积、时序的报告之类的。 综合产生的结果(门级的网表)的评价指标应该包括速度、面积、功耗、Porosity(不知如何翻译,这个指标代表结果布局布线的布通的能力),当然,在做完DFT & ATPG之后,还要保障一定的覆盖率,最后,我们还希望花较短的时间和计算资源就达到时序收敛。综合软件将利用我们给出的各种约束的指导进行综合,然而上述5个目标并不能同时满足,甚至很多时候会互相矛盾,例如速度和面积一般来说是互相矛盾的,所以这些目标必须要有一个优先级,只有较高优先级的目标有一定的Slack的时候才考虑对较低优先级的目标进行优化。我们的设计往往要求速度为第一目标,覆盖率也必须达到量产要求(例如90,以上),而面积、功耗、Porosity等则是可以容忍的。 Notes for DC Reference Manual: Constraints & Timing, No.2 (cont'd) 约束的分类: 约束总的分成两类:Design Rule Constraints和Optimization Constraints,其中前者是隐式约束(Implicit),后者是显式约束(Explicit)。前者由定义工艺库定义,多个工艺库定义值不同的时候取最严格者,而后者是用户定义的,前者具有优先权。但是隐式的约束用户仍然可以重新设定为更加严格的值(不能设为更松弛的值)。约束施加的对象包括net、port(in/out)、cell、design、path。其中Design Rule Constraints只是施加到net/pin上面。 Design Rule Constraints: 1. Max Fanout 约束对象为net,设定该in port或者整个design当中的所有net的fanout。如果违反fanout, 则可以将设计unflatten,即将原先扁平的变成拉长的,从而减少fanout,也可以增加 buffer,都会使timing恶化。命令格式为: set_max_fanout fanout_value object_list 而object_list可以为input port和design,注意,max_fanout不能用于设定output port ,对于一个design,设定它的output的fanout显然是没有意义的。当一个design作 为一个子模块,需要限定它的output的fanout的时候,此时要么在更高层的design 设定fanout,要么在该层次中设定其output net的fanout。 注意到一个net的fanout是它所驱动的负载的fanout_load(一般情况下负载的 fanout_load都是1)的累加,而此时output的load并不知道,系统会默认设定为1,而 很可能该fanout需要带动多个其它模块的输入,我们可以用set_fanout_load value output_port_list来为output port指定fanout load,注意该命令只用于output port。 2. Max Transition 约束对象为net,库中每个单元的每个输入/输出pin都定义了该值(晕,UMC的库 输出pin有max transition和max capacitance,而smic的库则是输入时钟有max transition ,为何,虽然input max_transition和output max_transition是可以互换的)。注意,DC 默认对input/output都没有transition time的限制。而input的max transition取库中该cell 的该input pin的transition值(如果有的话),output的max transition则取库中驱动该 output的cell的该output pin的transition值。输入的max_transition本来应该取决于该 port受谁驱动,而此时我们不知道,所以才取库中一个默认的值,库中该默认值应该是 一个单倍驱动门对该输入cell的pin的驱动的transition时间。不过设定该max_transition 有什么意义呢,反正此时谁来驱动它也不知道,也不会有什么violation,其实该 max_transition可以用于计算后面输出的transition,delay,power等等,所以还是应该 有必要设定一下的。而输出的max_transition则取决于该输出将会去驱动谁,所以应该 设定成将被驱动的门的input pin要求的max_transition。 3. Max Capacitance 约束的对象为net。如果负载电容太大,则可能1. 瞬时电流太大,2. RC延迟增大,3. 功 耗大。max capacitance的对象可以是input port或者design,对于input port,设定max capacitance应该根据驱动该input port的cell的情况设定,而对于其它的design中的net, 它们的负载电容只要能满足时延要求就OK了,但是也可以设定一个值以便约束更严。 4. Min Capacitance 约束对象为input/inout port,有的cell驱动的最小负载有限制(有毛病,) 5. Cell Degradation 约束对象是input port,应该类似于derating,随着温度、工艺、电压的变化,延迟参数 会随着变化,在很小的范围内,我们认为是线性变化的,它们的线性因子叫K-factor。 Optimization Constraints: 1. Timing Timing的约束总是针对某条路径的,而路径可以是In Port<-->Out Port、In Port<-->Din、 Dout<-->Din、Dout<-->Out Port。 异步路径(即从输入直接到输出),时序的约束直接使用input delay + output delay + gate delay + wire delay < set_max_delay,默认的input delay和output delay等于0,如果没有 设定max_delay,则不会有violation。 同步路径(相对于触发器或者锁存器的),则都是受时钟约束,即input delay + gate delay +wire delay + setup time < clock period,如果是锁存器,则可以借用(borrow)半个周期 的时间,也就是 ... < 1.5*clock period;同样clock to q + gate delay + wire delay + output delay < clock period。注意同属一个时钟域的所有通路组成一个path group,它们在计算 代价函数的时候具有同样的权重。 2. Area 使用set_max_area来约束,不知DC如何估计连线的面积的, 3( power。 包括leakage和dynamic两个部分。用power compiler才可以设定 4(Porosity 该值为用于布线的track面积和放置单元的track的面积之比,用于表征以后布局布线的 难度。 上述种种约束最后都体现为其约束对象的attribute,可以通过report_attribute/report_constraint来查看都有什么约束,后者还可以给出违反的情况以及其代价函数值。也可以通过remove_attribute或者reset_design、reset_path来取消约束。 Notes for DC Reference Manual: Constraints & Timing, No.2 (cont'd) 当DC发现某些约束不能满足时,它会采取何种手段使得这些约束满足呢,这些手段对于其它的约束又有什么影响,理解这些对于使用好DC是很有意义的,下面就分类列举。 design rule constraints 1(max_fanout 该项约束违反可能是两种情况: a( 一个输入信号为太多的输出信号的函数使用 b( 使用了set_flatten true -pase true|false -minimize single_output|multiple_output design_list, 从而导致产生的逻辑表达式为最小合取/最大析取范式,从而导致一个信号在逻辑函数当 中出现在多个最小/最大项里面,导致fanout上升。 对于第一种情况,只能通过增加/级联buffer来解决——增加buffer能增加驱动能力~ 对于后一种情况,可以不要flatten,从而可以提取公共项出来,减少了扇出,但是这样 也会让时延增加。通常总线、用FF搭建的存贮器、Crossbar结构等可能造成较大的 fanout。一般可将fanout设定为30,60之间。一般超出max fanout,timing也不大可能 满足了。 2(max_transition 每个net/gate的delay/transition/power都和输入信号的transition时间有关。如果transition 不满足,通常是因为负载太大,或者驱动能力不足,可以通过减少负载或者更换更大的 驱动门。设定output的transition,相当于设定输出的负载;设定input的transition,相 当于设定driving cell。 3(max_capacitance fanout,transition这两个约束都可以影响capacitance,而capacitance更为直接。violation 的fix方法也是减少fanout或者更换驱动更强的,或者替换为负载更小的门。 4. min_capacitance 5( cell_degradation 有的库当中有一个表,该表列出了随着输入transition的变化而导致负载max capacitance 的变化。因而cell degradation这个rule指出了负载电容应该小于表中列出的电容。使用 compile_fix_cell_degradation将会将这些violation消除。 optimization constraints 上面是design rule constraints,下面大略的描述一下optimization constraints。 1. speed 时序的violation主要为setup和hold的violation。通常在检查setup时间的时候使用slow 库,而检查hold的时候使用fast库。setup的violation可以通过增加驱动能力减小时延、 降频、timing borrowing来fix;对于hold violation,用set_fix_hold true可以自动插入 buffer。 2. area 通常.18工艺下,最小的反相器(1X,可能低功耗的反相器更小)面积大概10um2,这 里没有进行floorplan & place & route的情况下面积的估计较为粗糙。 3. porosity 4( power RTL Compiler可以自己产生门控时钟,不知道DC可不可以。注意门控时钟的控制信 号往往需要经过一个Latch然后和时钟信号相与,这样避免了毛刺。 这里给出一些参数的大致两级:一般负载应该在几十fF量级,一般最小CELL面积应该在10个um2量级,高度5,10个um量级,时延0.0x ns量级,D触发器的setup time和hold都在0.0x量级,clk-2-q则在0.x量级。流水级的长度应该在6个FO4的反相器左右。 Notes for DC Reference Manual: Constraints & Timing, No.2 (cont'd) 前面这么多的约束,相当于一个多目标规划的问题。但是这些目标的权重是不一样的,它们具有一定的优先级,当某一个目标未能满足的时候,DC选择优化的方向是不会使那些高优先级的约束项目变坏的方向,注意,是高优先级的代价函数即便没有超过约束,选择优化的方向也不能损害高优先级的代价函数~对于design rule constraints,优先级如下: min capacitance max transition max fanout max capacitance cell degradation 为什么要有这样的优先级呢,(偶看不出明显的特征) DC计算transition time有两种方式: 1. 对于使用CMOS延迟模型的库,直接根据输出负载(阻、容)查表 例如对于SMIC的库,首先典型延时T_typical=T_intrinsic+K_load*C_load,后者中的 K_load是根据负载电容查表得到的,而这种典型延时又会随着PVT变化,公式为 T_tpd=T_typical*K_process*(1+K_vlotage*Delta_voltage+K_temprature*Delta_temprature ) 2. 对于使用非线性模型的库,则根据输入transition time以及负载电容来进行计算和插值。 set_driving_cell和set_drive -drive_of(lib/DFF/Q)对于第一种情况是一致的,但对于后面 一种情形,则不一样。使用非线性模型的时候,set_driving_cell会动态的进行计算,而 set_drive不会(晕,不知道到底怎么个动态计算法,不管)。 指导 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf : 通常使用max fanout和max transition 或者max fanout和max capacitance,不要同时使用max transition以及max capacitance,库中也通常只指定其中之一。 Notes for DC Reference Manual: Constraints & Timing, No.2 (cont'd) DC计算时延采用的是STA分析,所以必须要指明false path和multi-cycle path(如果有的话),否则timing可能很差。注意,最critical的应该是实际延时和容许最大延迟差别最大的,而不是延迟最长的,一条path的起点和终点可能不在同一个时钟域,即该路径两端的触发器不在同一个时钟域。 延迟的成本函数是各个path group的成本的叠加,所以增加path group会让代价函数增加。一个path group的代价函数的值则是该group当中violation最大的那条路径(也可以说violation最大的那个pin)。不同时钟域的路径在不同的path group,跨越时钟域的路径呢,path group也可以通过path_group来创建。path_group命令用法如下: path_group weight.. critical_range.. name.. from.. to.. through.. 其中critical range的意义为:同一个path group当中存在violation的时候,如果critical range 为0,那么优化的时候只是优化最critical的那一条,而不管其余的。如果不为0,为正,那么其余不那么critical的,violation在most_critical_value的critical_range范围之内的也会被优化,如果该值足够大,那么就可以对该path group当中每个end point都优化一条violated path。这里要强调的是,优化是对每一个end point选出一条最为critical的来进行优化。当一个endpoint有两个最critical的path,那么必须将这两个path置于不同的group当中。 另,DC计算面积的时候不会计算未知component、未知面积的component、通用的和工艺无关的单元的面积(,tie-hi? keeper?),set_min_porosity设定porosity,值为<90,compile -routability可以面向routability进行优化。 指导性原则 critical的小模块进行综合的时候,我们往往在boundary进行over constraint,可以有一些violation,在这些小模块加入到整体的design的时候,ungroup之后这些over constraint 的violation就有可能得到优化。 冒险使用set_cost_priority -delay让max_delay约束优先级高于design rule不可取~并且这种顺序得调整只不过让mapping & optimization优化得顺序进行了调整,即先对时延进行优化,然后优化满足design rule,而design rule必须要满足,即便它会破坏前面对时延进行优化的结果。 Notes for DC Reference Manual: Constraints & Timing, No. 3 下面来详细的讲如何对每一项进行约束设定。确定约束的难点在于两个: 确定约束的策略 选取适当的约束目标 虽然定义系统spec的时候会确定各项constraint应该的目标(因为我们主要关心area, timing, power, porosity, coverage, etc),但是对于各个子模块我们可能没有具体的spec,而对于层次化的综合,可以在无约束的情况下进行估计得到这些约束大致应该取的值,而前者则是体现综合者艺术的地方了,同时注意,对于层次化的设计,在进行自底向上的综合流程时(即先对底层sub-design compile然后换到高层),底层的约束应该向上传递(propagate_constraints),否则可能底层的约束又没有了~ • Setting Design Constraints (可以增加1-10%的余量,即过约束) • Determining Realistic Goals(无约束情况下进行综合以便估计) • Checking the Design 这里主要检查design rules的违反,包括warning和error,列举如下: warning有: 1( 子模块/单元input未连 2( 子模块/单元output 未连 3( net负载为0, 4( net驱动为0 (晕,1、4,2、3不是等价的么,) 5( net有多个驱动,采用线与(如果标准单元库当中没有漏级开路怎么办,否则一个 驱动0,一个驱动1的时候就会有极大漏电流) 6( input port驱动wired and 7( cell无输入、输出pin,tie hi, tie low不就是么, design 无输入输出port 8( ref未使用,ref为一个实例指向的original design,注意区分cell, design, reference, pin, port 9( 输入输出直接连,会出现assign 10. 同一个net进入一个module的多个pin,可能发生了逻辑错误。 11. 某个design有多个instantiate,必须进行uniquify error有: 1( 输出无驱动 2( 层次递归(自己实例化自己) 3( instance和它的reference端口不一致(大小,输入输出,etc) 4( instance没有对应的reference,即便是black box也得搞个black box摆在那里么,呵 • Defining Timing Paths 对path的约束可能被后设的约束覆盖,例如set_false_path、set_multicycle_path、 set_max_delay、set_min_delay、path_group、create_clock、set_input_delay、 set_output_delay、etc... path类的约束命令一般都有from list, to list, through list,其中 from list和to list可以只取一个,分别代表从某组endpoint出发/汇聚到某组endpoint的 所有path,注意这其中可能出现非常多的false path,以及各个path group可能存在交集, 而这些交集的path使用的约束取决于命令的先后次序,因此不建议使用这样的通配规 则,路径越具体越好,例如指出through list。 • Grouping Paths for Maximum Delay input_delay 和 output_delay都是针对某个clock边沿而讲的~例如对于下面的图: 当存在这样三个时钟域的时候,对同一个port的input_delay只能选一个时钟域设定一 次,那么对于其它时钟域就要根据这两个时钟之间的关系来确定了。 • Setting a Path Group Critical Delay Range • Fixing Hold Violations fix_hold对某一个clk而言的。可用remove_attribute clk fix_hold来去除自动fix hold violation • Defining Maximum Area • Determining the Smallest Design 利用如下脚本确定可达到最小面积: remove_constraints -all remove_clock -all set_max_area 0 report_area • Defining Minimum Porosity • Defining Maximum Transition Time • Defining Maximum Fanout • Defining Expected Fanout for Output Ports • Isolating Input and Output Ports 对输入输出端口进行隔离,为了得到更精确的时序模型(,,),隔离逻辑单元可以选 择buffer或者两个inverter,也可自己用-driver选项指定插入的cell类型,但是DC可 能根据驱动能力进行Cell大小的替换。其中对输入端口,当输入到多个cell或者输入 到一个具有多输入的cell中,则插入隔离逻辑,否则除非用-force选项不会插入逻辑。 对于输出端口,当该输出端口的驱动单元只有该port一个扇出的时候,不会插入隔离 逻辑,除非使用-force选项。对输出进行隔离可以让输出port独享driver,但是对输入 隔离是吃饱了撑的,相关命令还有remove_isolate_ports,report_isolate_ports • Defining Maximum Capacitance • Defining Minimum Capacitance • Specifying Cell Degradation 这个东西要根据输入的transition time来查表么,ft..set_cell_degradation只设定一个值, 是什么意思, • Specifying Ideal Nets • Specifying Ideal Networks 对于scan enable,reset等高扇出的global net,可以将其设定为ideal net以免进行不必 要的优化,注意,这种设定只是针对current design visible的,如果是包含一个sub design, 但是没有进行ungroup,那么sub design不受影响~~set_ideal_network才会向下传播。 理想net有如下一些特点: 1( 不受DRC影响(max_transition、max/min_capacitance、max_fanout、cell degradation, DC通过将这些net上design rule的权重设成0来避免进行DRC fixing),net具有 dont_touch,net上的cell(非时序)具有size_only(即优化只能改大小而不能替换成不 同即footprint不同的cell)属性 2( latency、transition、capacitance均为0,net具有ideal_net属性 相关命令包括set_ideal_latency set_ideal_transition但是没有set_ideal_capacitance,ft... report_net当中具有i属性的为ideal net,report_timing当中列出每段的时延时,具有^符号的为ideal net,而不是0的为ideal net。注意,时钟本身就是ideal,不要再用set_ideal_net/networks。set_ideal_network的network可以从某个port/pin(即便是内部的)开始传播。传播规则为: 一个pin是ideal的,要满足1. 直接用set_ideal_network设定了 2. 作为输出pin驱动它的cell是ideal的 3.作为输入pin,驱动它的net是ideal的。 而一个net是ideal的,要求所有驱动该net的cell都是ideal的。 组合单元是ideal的,要满足所有输入都是ideal的,或者一个输入是ideal而其它输入pin都是接到constant nets(这个是乜啊,)。同时注意对比set_ideal_net的状况,这种ideal的net上的组合单元都会具有size only属性,而不是具有ideal属性。 Notes for DC Reference Manual: Constraints & Timing, No.3(cont'd) • Setting Ideal Latency and Ideal Transition Time • Automatically Disabling Design Rule Fixing on Special Nets • Constraining Designs for Single-Cycle Timing • Constraining Multifrequency Designs • Overriding Single-Cycle Timing • Setting False Paths • Setting Multicycle Paths • Defining Maximum Delay for Paths • Defining Minimum Delay for Paths • Resetting Paths to Single-Cycle Timing • Using Case Analysis to Set Constant Paths • Using Mode Analysis to Set Active Modes • Applying Time Borrowing to Level-Sensitive Latches • Limiting or Disabling Time Borrowing • Constraining Designs Containing Asynchronous Logic • Reporting Constraints • Removing Constraints
本文档为【Design Compiler使用笔记_DC中文笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_180829
暂无简介~
格式:doc
大小:43KB
软件:Word
页数:0
分类:互联网
上传时间:2017-11-16
浏览量:81