DC的手册包括3部分,分别是命令行手册,User Guide,以及参考手册。
其中参考手册有3个,分别是:
Constraints & Timing
Optimization & Timing Analysis
Register Retiming
本系列笔记为阅读这三个参考手册所做的笔记
本文档(约束和时序)包括六章:
1. 基本概念
2. 约束设计
3. 描述设计环境
4. 指定时钟和时钟网络
5. 描述逻辑功能和信号端口
6. 在层次化设计中传播约束
Notes for D
基本概念篇:
利用DC进行综合,主要的过程就是设定适当的约束,从而指导DC综合出较为优化的结果,DC当中进行综合可以分成三大步骤:Transfer、Mapping、Optimization。
总的流程来说为:
1.设定各种用于综合的库(.db或者.lib格式)
及各种IP核的库。库中主要描述了库线负载模型、Max_transition、Max_Capacitance
等等;各种单元的时延、面积、逻辑功能、输入输出负载、功耗等等,注意,具有相
同footprint的单元是可以互相替换的。
2.读入设计
此时可以对设计设定参数(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等。
design翻译6.
最后就是生成门级的网表(.v)、导出约束文件(.sdc,用于指导后面的布局布线)、时
延文件(.sdf,用于静态时序分析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_tr
ansition则取决于该输出将会去驱动谁,所以应该设定成将被驱动的门的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也不大可能满足了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论