ASIC經典總結
ASIC經典總結
2
时钟抖动 (Clock Jitter) ....................................................................................................................5
信号同步的窍门...............................................................................................................................8
数字后端流程...................................................................................................................................9
DC 概论之一 setup time 与 hold time .......................................................................................11
DC 概论二之 fanout 与 skew.........................................................................................................14
DC 概论三之 setup time 与 hold time 之二................................................................................21
DC 概论四之 setup time 与 hold time 之三.................................................................................26
DC 概论五之 high fanout...............................................................................................................42
DC 概论六之 multicycle_path ......................................................................................................58
DC 概论七之 gated clock...............................................................................................................75
DC 概论之 IO 约束........................................................................................................................84
DC 优化约束 ..................................................................................................................................90
Synopsys Synthesis Constraints Template ......................................................................................92
功耗和门控时钟的的基本概念.....................................................................................................95
对 FALSE PATH 的理解 ................................................................................................................97
TimeQuest 时钟分析 ....................................................................................................................101
静态时序分析...............................................................................................................................105
寄生参数提取和静态时序分析...................................................................................................124
IC 设计中的时钟类型约束..........................................................................................................130
IC 设计流程及工具......................................................................................................................132
Typical ASIC design flow
Step 1: Prepare an Requirement Specification
Step 2: Create an Micro-Architecture Document.
Step 3: RTL Design & Development of IP's
Step 4: Functional verification all the IP's/Check whether the RTL is free from
Linting Errors/Analyze whether the RTL is Synthesis friendly.
Step 4b: Perform Property Checking , to verify the RTL implementation and the
specification understanding is matching.
Step 6: To Perform Synthesis for the IP, the inputs to the tool are (library file(for
which synthesis needs to be targeted for, which has the functional/timing information
available for the standard-cell library and the wire-load models for the wires based on
the fanout length of the connectivity), RTL files and the Design Constraint files, So
that the Synthesis tool can perform the synthesis of the RTL files and map and
optimize to meet the design-constraints requirements. After performing synthesis, as a
part of the synthesis flow, need to build scan-chain connectivity based on the
DFT(Design for Test) requirement, the synthesis tool (Test-compiler), builds the
scan-chain.
Step 7a: Perform the Netlist-level Power Analysis, to know whether the design is
meeting the power targets.
Step 7b: Perform Gate-level Simulation with the Synthesized Netlist to check whether
the design is meeting the functional requirements.
Step 7d: Perform STA(Static Timing Analysis) with the SDF(Standard Delay Format)
file and synthesized netlist file, to check whether the Design is meeting the
timing-requirements.
Step 7e: Perform Scan-Tracing , in the DFT tool, to check whether the scan-chain is
built based on the DFT requirement.
Step 9: The next step is the Floor-planning, which means placing the IP's based on the
connectivity,placing the memories, Create the Pad-ring, placing the
Pads(Signal/power/transfer-cells(to switch voltage domains/Corner pads(proper
accessibility for Package routing), meeting the SSN requirements(Simultaneous
Switching Noise) that when the high-speed bus is switching that it doesn't create any
noise related acitivities, creating an optimised floorplan, where the design meets the
utilization targets of the chip.
Step 9a : Release the floor-planned information to the package team, to perform the
package feasibility analysis for the pad-ring .
Step 9b: To the placement tool, rows are cut, blockages are created where the tool is
prevented from placing the cells, then the physical placement of the cells is performed
based on the timing/area requirements.The power-grid is built to meet the
power-target's of the Chip .
Step 10: The next step is to perform the Routing., at first the Global routing and
Detailed routing, meeting the DRC(Design Rule Check) requirement as per the
fabrication requirement.
Step 11: After performing Routing then the routed Verilog netlist, standard-cells
LEF/DEF file is taken to the Extraction tool (to extract the parasitics(RLC) values of
the chip in the SPEF format(Standard parasitics Exchange Format), and the SPEF file
is generated.
Step 12a: Perform the Routed Netlist-level Power Analysis, to know whether the
design has met the power targets.
Step 12b: Perform Gate-level Simulation with the routed Netlist to check whether the
design is meeting the functional requirement .
Step 12c: Perform Formal-verification between RTL vs routed Netlist to confirm that
the place & route Tool has not altered the functionality.
Step 12d: Perform STA(Static Timing Analysis) with the SPEF file and routed netlist
file, to check whether the Design is meeting the timing-requirements.
Step 12e: Perform Scan-Tracing , in the DFT tool, to check whether the scan-chain is
built based on the DFT requirement, Peform the Fault-coverage with the DFT tool and
Generate the ATPG test-vectors.
Step 12h: Perform LVS(layout vs Spice) check, a part of the verification which takes
a routed netlist converts to spice (call it SPICE-R) and convert the Synthesized
netlist(call it SPICE-S) and compare that the two are matching.
Step 12i : Perform the ERC(Electrical Rule Checking) check, to know that the design
is meeting the ERC requirement.
Step 12j: Perform the ESD Check, so that the proper back-to-back diodes are placed
and proper guarding is there in case if we have both analog and digital portions in our
Chip. We have seperate Power and Grounds for both Digital and Analog Portions, to
reduce the Substrate-noise.
Step 12k: Perform seperate STA(Static Timing Analysis) , to verify that the
Signal-integrity of our Chip. To perform this to the STA tool, the routed netlist and
SPEF file(parasitics including coupling capacitances values), are fed to the tool. This
check is important as the signal-integrity effect can cause cross-talk delay and
cross-talk noise effects, and hinder in the functionality/timing aspects of the design.
Step 12l: Perform IR Drop analysis, that the Power-grid is so robust enough to
with-stand the static and dynamic power-drops with in the design and the IR-drop is
with-in the target limits.
Step 13: Once the routed design is verified for the design constraints, then now the
next step is chip-finishing activities (like metal-slotting, placing de-coupling caps).
Step 14: Now the Chip Design is ready to go to the Fabrication unit, release files
which the fab can understand, GDS file.
Step 15: After the GDS file is released , perform the LAPO check so that the database
released to the fab is correct.
Step 16: Perform the Package wire-bonding, which connects the chip to the Package.
信号同步的窍门
RMM 中曾经介绍过一个概念叫"locality",希望能够在 RTL 编程的时候,通
过模块的正确划分(partition)和接口的恰当设计来实现模块封装。它的一大优
点在于,当验证出现问题的时候,可以更方便进行定位。概念很明确,但真的在
设计中去实现就不那么容易了。我自己就是通过一个教训才真正理解了这个概
念。当时项目中涉及到多时钟域信号同步的问题。我用的方法很简单,直接用两
级寄存器打一下。唯一值得注意的时,由于同步后采样是在时钟上升沿,两级寄
存器打的时候就采用了下降沿来做。
PS. 下图给出了简单的同步电路,仅供个人参考。
//-------------------------------------------------------------------
// input ______ sync_ff1 ______ sync_ff2
// ------| |____________ | |__________
output
// clk | | | |
// ----o|> | -----o|> |
// | |______| | |______ |
// |_______________|
//-------------------------------------------------------------------
数字后端流程
闲逛论坛,发现一篇关于后端流程的短文。不长,却非常清晰的解释了后端的
整个流程。转载以记之。
5. STA 静态时序分析和后仿真。时钟树插入后,每个单元的位置都确定
下来了,工具可以提出 Global Route 形式的连线寄生参数,此时对延时参数的
提取就比较准确了。SE 把.V 和.SDF 文件传递给 PrimeTime 做静态时序分析。确
认没有时序违规后,将这来两个文件传递给前端人员做后仿真。对 Astro 而言,
在 detail routing 之后, 用 starRC XT 参数提取,生成的 E.V 和.SDF 文件传
递给 PrimeTime 做静态时序分析,那将会更准确。
加入飞索半导体中国设计中心快一年了,现在倒回去看看,收获良多。在这快一
年的时间里,我跑完了从系统设计到
综合的整个前端流程;熟悉了包括 VCS, debussy, modelsim, DC, leda 在内的
常用工具链;最近半年参与设计的
BCH 纠错码模块,从 matlab 系统仿真,C model 建立,RTL coding,验证到综合
都完整的做过;项目中系统的 verfi-
cation spec.和 IP 的 development spec 都有参与完成;也参与了芯片测试的
pattern 的生成;为纠错码的 IP,还申
请了 patent,算是对前期工作一个不小的认同吧。
之后我转去做系统级的验证,因为数字逻辑部分不大,除了按照 Flow 跑了
前仿和 LEC 以外,我们还跑了门级的后仿,
将 Layout 以后 Astro 得到的 wire laod model 通过 PT 送出 SDF,反标到 netlist
里。这之间遇到了许多问题,比如跨时钟
域信号出现 Timing violation;Behavior Model 中或者 RTL 中因为没有标明路
径而无法顺利标上 SDF 的 Timing;Pad
模块中 inout 接口无法标时间。。。总之是问题一大堆,真正让我体会到 Yarbim
第一天告诉我们的"Shit happens all
the time"是种什么感觉。虽然后来有人觉得我们后仿做的比较没意义,但却实
实在在让我们发现了许多教训,也发现
不少 Timing 的问题。因为前仿我们没意识到系统时钟频率对验证的影响,下意
识的觉得 cycle by cycle 的验证不需要
时钟跑太高。也因为这个,我们没有发现时钟跑慢了之后,FW 也会执行的更慢,
控制信号有可能出错。
看到设计,首先要分析路径,找出最长和最短路径,因为 dc 的综合都是根据约束而得到最短和最长路
径来进行器件选择的。所以接下来将图中的所有路径标出。因为没有前级(input_delay)和后级电路
(output_delay),我们只分析图中给出的 路径,如下图:
对于红色路径:Td=Tcell+Td4+Td5+Td6=1+4+3+1=9
对于黄色路径:Td=Tcell+Td4+Td5+Td6+Td8=1+4+3+1+2=11
对于粉色路径:Td=Tcell+Td1+Td2+Td3=1+2+3+2=8
对于路色路径:Td=Tcell+Td7+Td2+Td3=1+2+3+2=8
所以 Tlongest=11,Tshortest=8
对于 setup time 的 slack:Tclk-Tlongest-Tsetup=30-11-1=18
对于 hold time 的 slack : Tshortest-Thold=8-0.5=7.5
对于 setup time 和 hold time 的 slack 的计算,可以体会下面的示意:
对照第一副示意图与此比较,建立时间看 D2 ,保持时间看 D1,因为同时把 Tl 和 Ts 放在一个图例中,
看起来可能有些误解:)
有空会继续讨论 setup time 和 hold time,下次讨论将包括 clock skew 和 input delay,output delay
在其中。
扇出线上的转换时间根据在版图之后提取的 rc 参数信息求得:
2.2RC=(Rnet+Rout)×(Cnet+Cin)
无论如何,要记住的就是 dc 是基于路径分析的,每个路径上有 cell 延迟和 net 延迟,而 cell 延迟是
根据 input_transition 和 out_lod 得出的,net 延迟是根据 fanout_length,resistance,capacitanc 得
出的。驱动和电阻成反比,负载和电容成正比。
由上面可以知道 fanout 影响到 load(capacitance),transition,delay。了解了上面,我们来理
解下 dc 中对 design 建模,所用到的一些跟 fanout 有关的参数。
Dc 中的约束,其实就是给 chip 设计一个环境,比如驱动这个 chip 输入端口的 cell,或者这个 chip
输出端口驱动了那些单元或者端口接入了哪些负载,以及这个芯片的工艺,电压,温度,等等。
对于一个 cell 来说,输出端口具有 max_fanout 属性,输入端口有 fanout_load 属性。
例如将一个 AND2 作为 design 的驱动 cell(set_driving_cell),这样就把 AND2 的 max_fanout 属性加
在了输入端口上。如果一个 AND2 的输出端口 max_fanout 是 5,输入端口 fanout_load 是 2。一个 buffer
输入端口的 fanout_load 是 3。那么这个 AND2 的输出端可以接 2 个 AND2,或者可以接一个 buffer,或者
可以接一个 buffer 和一个 AND2。如上图所示,则会引起 DC 产生 DRC 错误。因为输入端口的
fanout_load=2XAND2+buffer=7,超过了 AND2 的 max_fanout2.如果使用了系统提供的 set_max_fanout 5
[all_inputs],将会忽略 set_driving_cell 中 cell 的 max_fanout 属性,而使用 set_max_fanout 属性。
如果将一个 AND2 作为 design 的负载,那么这个输出端口上的 fanout_load 属性将会为 2.dc 中一般的
做法是 set_fanout_load [expr [get_attribute slow/and2/a fanout_load] *xxx] [all_outputs],来
设置输出端口的 fanout_load 属性。
这样 dc 就可以根据这些设置,选择优化端口处的器件,以及时序。
说道 fanout,所以顺带说明一下容易混淆的 max_fanout,max_capacitance。如上图所示,
输入端口的 fanout_load=2 个与门的 fanout_load 和一个 buffer 的 fanout_load。
输入端口的 load(capacitance)=2 个与门的 load_of 和一个 buffer 的 load_of。
(如果通过 set_load
设置了输入端口,另外还要加上 set_load 的值)。
Max_fanout 检查的是输入端口的 fanout_load 最大值,Max_capacitance 检查的是输入端口 load 值。
两者概念不同。
下面讲下 fanout 与 delay,看如下一个例子:
到 buffer 的 net 延迟是 2,buffer 延迟是 1,fanout 为 1 时 net 延迟为 3,每增加一个扇出,net 延
迟增加 2.如果一个信号经过这个扇出网络后,那么延迟为:2+1+(3+(8-1)×2)=20;
如果把扇出结构优化成如下形式:
那么信号经过这个网络后,延迟为:2+1+2+1+(3+(4-1)×2)=15.
那么延迟减少了 5。
既然我们知道了建立时间和保持时间的含义,这篇主要是根据工厂提供的标准单元库中时序器件的建
立时间和保持时间来预估我们的约束对设计的影响,是否满足时序要求,简单点就是说,时序有没有
violator。
set_input_delay :
input_delay 是设置外部信号到达输入端口的时间,dc 会用它来计算留内内部逻辑的空余时间是多少。
之所以让 ClkA 和 Clk 的时钟周期不一致,主要是用来说明上图中黄色部分的。黄色部分的确认是很重
要的。这是 DC 用来确定时间余量(slack)的关键。如上图所示,黄色部分已经确实是最小相位差。那么
根据 input_delay 时间以及库中触发器的 setup 建立时间,可以知道留给内部逻辑的延迟时间是红色部分
Tmin-Tinput_delay-Tsetup。综合过程中,dc 会优化 Logic2 的时序,以使他达到时序要求。
同样 set_output_delay 是设置输出端口到数据采集处的延迟。如下图:
DC 会根他来计算留给内部逻辑的时间。
这里还是要强调一下不同频率的问题:)
介绍完了 input_delay 和 output_delay,以及 skew 在分析时间余量之前再介绍下时钟的 latency。
Latency 分为 source lantency 和一般的 latency。
内部逻辑延迟的限度为 T1-T2-Tinput_delay-Tsetup。
当考虑了 latency 的时候。D1 上的 clock 会变成时序图中的红色部分
那么留给内部逻辑的最大延迟为:T2’(T2+Tlatency)-T1-Tinput_delay-Tsetup。会发现留给内部逻辑
的延迟会变大,那么会给 DC 更大的空间来综合。
同样如果 ClakA 上面如果也设置了 Latency 在分析 slack 的时候也要算进去。
顺便介绍一下时钟的 jitter,如下图
正常的时钟到来时蓝色的时序图。但是由于无法预知的因素,时钟可能提前(粉色)或者延迟(红
色)到来,这就是 jitter。提前到来充为 setup jitter,延迟到来充为 hold jitter。
DC 中把 skew 和 jitter 合成一个 uncertainty。用 set_clock_uncertainty 来设置。
下文中提到的 skew 指的是合体,即 uncertainty。
Uncertainty 分为 setup 和 hold,顾名思义,如上图理解即可。
下面开始正式分析时间余量 slack。其实有了上面的知识,只要稍微说明下大家
都会很明白。
在分析前,记住,建立时间是分析路径中的考虑到各种最不利因素的最大延迟,
打个比方:
前面一级用尽最大程度向后推(最大的延迟),本级就近打力气向前顶(最大不
确定因素)。
然后看中间有没有漏气(slack 为负,时序违规)。
要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup
到达时间=T1+Tlantency+Tinput_delay+Tlogic2
上图中:
要求时间=T2+Tlatency-Toutput_delay-Tuncertainty_setup
到达时间=T1+Tlatency+Tcell+Tlogic5
3.时序器件到时序器件
上图:
要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup
到达时间=T1+Tlatency+Tcell+Tlogic
4,输入端口到输出端口
如上图:
要求时间=T2+Tlatency-Tuncertainty_setup-Toutput_delay
到达时间=T1+Tlatency+Tinput_delay+Tlogic
我们再来看下保持时间,保持时间的到达时间和建立时间的到达时间是一样的。
只是保持时间的要求时间不一样而已.
保持时间类似于龟兔赛跑:
系统要求时间就是尽可能的向后,而线上信号就是追那个要确定的时间,追上了,
就没问题,追不上问题就有了。
到达时间:Tarrive=T1+Tlatency+Tinput_delay+Tlogic
要求时间:Trequire=T2+Tlatency+Tuncertainty_hold+Thold
2. 时序器件的输出管脚到输出端口
到达时间:Ta=T1+Tlatency+Tcell+Tlogic
要求时间:Tr=T2+Tlatency+Tuncertainty_hold+Thold-Toutput_delay
3 时序器件到时序器件
到达时间:Ta=T1+Tlatency+Tcell+Tlogic
要求时间:Tr=T2+Tlatency+Tuncertainty_hold+Thold
4,输入端口到输出端口
到达时间:Ta=T1+Tlatency+Tinput_delay+Tlogic
要求时间:Tr=T2+Tlatency+Tuncertainty_hold+Thold-Toutput_delay
Slack 计算:
对于建立时间:
Slack=要求时间-到达时间
对于保持时间
Slack=到达时间-要求时间
a
9
8
7
6
5
4
3
2
Net_delay=R*C*OC
其中系数 OC 是根据操作环境(set_opearting_conditions)中设置的 rc 树模型得到。
一般的工艺库的操作环境有三种,WORST,TYPICAL,BEST,分别是最差,典型,最坏。
下面看例子:
下面看一个高扇出实例,有时钟,有复位还有一般信号
module test(clk,clk_G, d_in ,s_r1, s_r2, rst_N1, rst_N2,dout);
parameter size =1100;
input d_in, rst_N1,rst_N2, s_r1, s_r2,clk_G,clk;
output dout;
reg dout;
endmodule
综合脚本:
set lib $env(DC_LIB)
set target_library "slow.db fast.db"
set link_library "* $target_library"
set search_path ". ../src ../scripts $lib"
set hdlin_while_loop_iterations 5000
analyze -format verilog test.v
elaborate test
uniquify
link
check_design
create_clock -period 100 [get_ports clk]
set_operating_conditions -max slow -min fast
set_wire_load_mode top
set_min_library slow.db -min_version fast.db
set input_exp_clk [remove_from_collection [all_inputs] [get_ports clk]]
set_input_delay 60 -clock [get_clocks clk] $input_exp_clk
set_output_delay 30 -clock [get_clocks clk] [all_outputs ]
compile
电路图:
下面是生成的网表的关键几个地方。
AND2X4 U1106 ( .A(clk_G), .B(clk), .Y(G_clk) );
AND2X2 U1340 ( .A(s_r2), .B(s_r1), .Y(n2) );
AND2X2 U2441 ( .A(rst_N2), .B(rst_N1), .Y(n3) );
时序分析
<!--[if !supportLists]-->1. <!--[endif]-->clock
可以看到 clock tree 上没有插入 buffer,但是 cell 的延迟却很大
2.reset
Dc 自动插入了 buffer。
3 一般信号
Dc 同样自动插入了 buffer。
下面我们修改一下脚本,如下;
set lib $env(DC_LIB)
set target_library "slow.db fast.db"
set link_library "* $target_library"
set search_path ". ../src ../scripts $lib"
set hdlin_while_loop_iterations 5000
analyze -format verilog test.v
elaborate test
uniquify
link
check_design
create_clock -period 100 [get_ports clk]
set input_exp_clk [remove_from_collection [all_inputs] [get_ports clk]]
set_input_delay 60 -clock [get_clocks clk] $input_exp_clk
set_output_delay 30 -clock [get_clocks clk] [all_outputs ]
set_ideal_network -no_propagate [get_nets s_r]
set_ideal_network -no_propagate [get_nets rst_N]
compile
重新分析 timing
<!--[if !supportLists]-->1. <!--[endif]-->clock
基本和原来一样,cell 上仍然有很大延迟。
<!--[if !supportLists]-->1. <!--[endif]-->reset
问题:
虽然设置了 set_ideal_net(network),set_dont_touch(network)但是 clock 上仍然有大延迟。
为了解决这个问题,我们还要继续设置高扇出的选项。
<!--[if !supportLists]-->1. <!--[endif]-->high_fanout_net_threshold,这个变量是用来指出,
如果 net 的扇出个数超过指定值,那么他就是高扇出,同时 drc 检查,还有延迟计算都是这
个数值计算,但是时间上 net 上的扇出是没有变的。
<!--[if !supportLists]-->2. <!--[endif]-->high_fanout_net_pin_capacitance , 结 合
high_fanout_net_threshold 使用的,当 net 的扇出超过 threshold,那么 net 上的负载等于这 2
个数值的乘积。
进一步:修改脚本:
set lib $env(DC_LIB)
set target_library "slow.db fast.db"
set link_library "* $target_library"
set search_path ". ../src ../scripts $lib"
set hdlin_while_loop_iterations 5000
analyze -format verilog test.v
elaborate test
uniquify
link
check_design
create_clock -period 100 [get_ports clk]
set input_exp_clk [remove_from_collection [all_inputs] [get_ports clk]]
set_input_delay 60 -clock [get_clocks clk] $input_exp_clk
set_output_delay 30 -clock [get_clocks clk] [all_outputs ]
set_ideal_network -no_propagate [get_nets s_r]
set_ideal_network -no_propagate [get_nets rst_N]
set high_fanout_net_threshold 60
set high_fanout_net_pin_capacitance 0.01
compile
时序分析:
<!--[if !supportLists]-->1. <!--[endif]-->clock
Apr 之后
导出网标,修改约束文件成初始状态,继续分析时序:
可以看出 apr 工具自动加入了 buffer,同时优化了 net 上的 fanout
总结:
为 了 让 dc 在 综 合 高 扇 出 的 net 时 候 不 插 入 buffer tree 和 buffer chain , 需 要 使 用
set_idea_network 使这些搞扇出 net 避免时序优化(timing optimization),时序更新(timing
update),drc 修正(drc fixxing)。但是这样设置之后,net 上的高负载并没有消除,我们需
要额外的参数进行设置. high_fanout_net_threshold high_fanout_net_pin_capacitance .以减少
dc 综合时间,以及减少 timing violators report
常用的技巧
+define+macro=value+ 预编译宏定义
-f filename RTL 文件列表
+incdir+directory+ 添加 include 文件夹
-I 进入交互界面
-l logfile 文件名
-P pli.tab 定义 PLI 的列表(Tab)文件
+v2k 使用推荐的标准
-y 定义 verilog 的库
-notice 显示详尽的诊断信息
-o 指定输出的可执行文件的名字,缺省是 sim.v
DC 概论六之 multicycle_path
这几天看书看到这个概念,多周期路径。书上有点解释:指的是两个寄存器之间数据要经过多个时钟才能稳定的路径,一般出现于组合逻辑较大的那些路径。
而且有指出,在实际工程中,除了乘除法器等少数比较特殊的电路,一般应该尽量避免采用多周期路径电路。即使有所使用,也应该通过约束在综合工具中指出该路径,使得
sta 工具会分析所有的 path,除了定义为 false path 的路径.所有的 path 都在最近的沿分析 setup,在最近的沿的前一个沿分析 hold
设置为 multicycle 的 path 会改变分析分析方法, 比如 muticycle 2 就是说会在最近的沿的下一个沿分析 setup,分析 setup 的沿的前一个沿分析 hold.
在讲多周期路径之前,先看下单频率路径的建立关系和保持关系
『Design Compiler calculates the default setup and hold relations and derives single-cycle timing, based on active edges.』
建立关系检查:
对于多频率设计,在两个时钟之间可能存在多个建立关系,对于目的时钟的的每一个锁存边沿,找到捕获边沿最近的发送边沿。发送边沿和捕获边沿的最小关
系决定了这个路径上的最大延迟。
保持关系检查:
如下图所示:
Setup 要求:5-0=5
Hold 要求:30-30=0
Exp2:
Setup 要求=10-0=10
Hold 要求=0-0=0
Exp3
Setup 要求:4-3=1
Hold 要求:7-7=0
下面进入单频率的多周期:
先介绍命令 set_multicycle_path
常用格式:
set_multicycle_path
path_multiplier
[-rise | -fall]
[-setup | -hold]
[-start | -end]
[-from from_list]
[-to to_list]
[-through through_list]
例子:
用来说明多周期路径的建立时间检查。
那么缺省的保持时间检查时什么呢?看下面
根据 dc 综合原理:
对 hold 的检查之一就是:在 capture active edge 之前不能被捕获。所以缺省的 hold 检查实在第 6 个周期。而我们希望的是在 0 时刻进行 hold check。
所以要如下设置
下面进入多频率的多周期:
这个例子和上面例子差不多,只是频率不同。
例子:以下仅为例子,实际设计中不会存在
input clka,clkb;
always@(posedge clka)
begin
end
always@(posedge clkb)
begin
end
endmodule
dc 脚本
elaborate m
compile
compile
结构图
原来以为路径 path4 和 path1,path2,path3 上的建
立时间和保持时间检查的分析方法一项。所以上篇的
timing report 仅仅分析了一下 path1 和 path2。后来
觉得有些疑问,然后分析了下 path4(慢时钟采集快
数据),发现 dc 一个很微妙的分析方法,后来在 dc
的文档中发现的。后来想了下,这种建立关系和保持
关系的检查其实在 dc 的文档中还是说明了的。先看分
析,再总结:
综合脚本:
elaborate m
compile
compile
path4 分析:
Setup:
而实际上,dc 的分析师如下的:
对于 setup 分析:
对于 hold 分析:
更简单的说,慢时钟采集快数据,是先分析慢时钟的
单周期 setup relation 和 hold relation,然后再扩
展到多周期路径上。
对于 hold 分析的理解,可以将综合脚本改成下面的,
然后再分析下,就会很明白了。
elaborate m
compile
compile
path4:
setup 分析:
Hold 分析:
一般常用的门控时钟是下面这种形式
考虑上图中的各种延迟,分析门控时钟的建立时间检查和保持时间检查。
对于门控单元建立时间的检查路径:
对于门控单元保持时间的检查路径:
考虑到延迟的保持时间检查:
由上图可以知道 clk_latch 的延迟如果比 clk_and 延迟大点,那么电路会更稳定些。
门控时钟综合:
综合工具内置时钟故障分析,但是有时候会产生不正确的分析。虽然如此,由于优化算法比
较强大,仍然可以得到理想的结果。
如上图所示,综合工具会认出门控时钟里的锁存器,同时标识这条路径为锁存路径,分析的
时候会将这条路径分为 2 部分。
<!--[if !supportLists]-->第一条, <!--[endif]-->上级输出到锁存器的输入端 d
<!--[if !supportLists]-->第二条, <!--[endif]-->锁存器输出端 q 到门控逻辑的输入单
综合工具会实现分析第一条路径,因为这个锁存器的缘故。所以会发生前级向锁存器 borrow
time 的情况,出现这种情况的时候,即使第一条路径满足时序,可能的 violations 还是会产
生在第二条 path 上。
看一例:
wire gclk;
always@(posedge gclk)
reg gate_out;
always@(clk)
if(!clk)
endmodule
DC 综合脚本:
elaborate gate
uniquify
link
check_design
compile
综合结束后,setup 时序分析:
现在综合脚本中加入
1.DC
如果我们知道 Tdelay 的 max,min 那么很容易的写出约束
set_input_delay -max Tmax -clock Clk DIN
set_input_delay -min Tmin -clock Clk DIN
但是如果我们不知道输入延迟的最大最小值。那么如何约束呢。
先看下最大最小延迟对于器件的建立,保持检查起到的影响
如果注意观察就会发现上如对于信号的要求都是要求信号在相关时钟沿附件保持稳定。
有的时候我们要求信号在相关时钟沿附近是需要变化的。
这里要用到零多周期路径。
下面看下对于一般的单周期路径,如何写成多周期路径
那么如果对于零多周期路径,建立,保持如何检查:
当设置 set_multicycle_path -setup 0 的检查如下:
当再次设置 set_multicycle_cycle -hold -1 ..时序检查如下:
首先是设置 0 多周期路径。
set_multicycle_path -setup 0 .....
set_multicycle_path -hold -1 .....
然后根据要求设置最大最小延迟。
有了上面的认识,我们大约可用了解:
如果设置了最大延迟,那么信号只能在最大延迟前变化,
如果设置了最小延迟,那么信号只能在最小延迟后变化。
所以我们设置成:
set_output_delay -max -S1 .....
set_output_delay -min H1 .....
注意符号:)
接着我们来考虑下源同步接口,所谓源同步接口就是输入输出带有时钟线。
同时数据的变化和时钟沿对齐(或上升沿,或下降沿,或双沿)。
如下图,单边沿对齐的源同步接口。数据 DQ 和时钟 SCK 对齐,CAC 地址控制信号
如果数据和时钟是双边沿对齐的,建立,保持条件如上,同时下降沿和上升沿要求一样。
create_generated_clock -name clkx1 -multiply_by 1 -source clk PLL/clkx1
create_generated_clock -name SCK -divide_by 1 -source PLL/clkx1 SCK
DC 优化约束
时间约束和面积约束、功耗约束
set_max_area
set_input_delay
set_output_delay
create_clock
set_clock_latency
set_propagated_clock
set_clock_uncertainty
1.定义时钟, 周期和波形
默认为 50%占空比
关于公共基准周期的问题,查询书。10,20,30,公共基准就是 60.尽量设置使得公共基准周期小。否则,运算复杂。
设置时钟不确定性绕开这个问题,如下:10,10.1,公共基准周期为 1010.0
相当于给输入输出信号信号相对于时钟的时间要求。
对输入:定义了信号到达模块时已经经过的延时。
对输出:限定了信号必须在哪个时间前有效。
据此,DC 可以计算出这个模块内部各个路径的时延要求,根据这些信息进行优化。
默认,都为 0,与实际相悖。
例如: 定义的是时间约束相对于时钟上升沿的关系
3.组合时延
无法与时钟对应的情况
>set_min_delay
4.确定例外情况
伪路径:
无时间要求或无实际操作的路径
最小时延要求和最大时延要求:
set_min_delay set_max_delay
多周期路径:
set_multicycle_path
例如:定义一个从 A 到 B 的路径伪一个两周期的路径
功耗和门控时钟的的基本概念
1. 1 功耗的基本概念
电路中耗散的能量可以分为静态功耗( static power)和动态功耗( dynamic power) 。静态功耗的主要原
因是:晶体管中从源到漏的亚阈值泄漏( subthreshold leakage) ,就是指阈值电压的降低阻止了栅的关闭。
动态功耗分为开关功耗( switching power)和内部功耗( internal power) 。开关功耗是由于器件的输出
端的负载电容的充放电引起的。负载电容包括了门和线的电容。内部功耗指在器件内部耗散的能量,主要由
瞬时短路所引起的。
1. 2 门控时钟的的基本概念
通常,门控时钟的实现方式有 4 种:基于“与”门、基于“或”门、基于触发器和基于 latch。以图 1
中基于 latch 的门控时钟为例,基于 latch 的门控时钟的实现原理是:在 clock 为高电平时 latch 不会锁存
数据,在 clock 的上升沿捕获 enable 信号。特别需要注意的是,门控时钟的使用可能会带来时序上的问题。
特别当集成电路的设计已经进入深亚微米级时代, 线延时占据了总延时的 70%。以基于 latch 的门控时钟
为例, 布局布线之后,对应的 latch 和寄存器可能会距离很远,造成它们之间的连线延时过大,时序就可能
不满足要求。因此,采取的方法是将对应的 latch 和寄存器整合在一起,作为一个标准单元来使用。这样,
可以保证的时序满足要求(此时的 set_clock_gating_style 的设置将会不同) 。
2 在设计中使用门控时钟
本文首先给出了综合时使用的脚本,以实际中的一个设计生成的报告文件为例,对比了使用门控时钟前
后的面积、时序、功耗方面的差别。
2. 1 运行的脚本
一般可以采用全定制( full - custom)的设计方法,手工绘制电路图,确定设计中是否采用门控时钟。
但随着设计规模的日益增大,必须要借助 EDA 工具的帮助。在脚本中可以很灵活地对设计进行如下方面的控
制:
(1) 时钟的实现方式:基于“与”门、基于“或”门、基于触发器、基于 latch;
(2) “使能”端( enable)进行 SETUP、HOLD 检查;
(3) 对特定的 signal 是否使用门控时钟;
(4) 门控时钟的最大扇出;
(5) 是否插入 scan 信号。
使用 Synop sys 公司的综合工具 Design Comppiler,该综合工具支持在设计中使用门控时钟,并可以进
行相应的时序分析和功耗分析[ 2~4 ] 。
下面给出使用 Design Compiler 进行综合时部分脚本:
set_clock_gating_style - sequential_cell latch - positive_edge_logic { and} -
negative_edge_logic {or}
/基于 latch 的门控时钟, 如果从工艺库中调用已经做好的具有门控时钟功能的标准单元, 对应选项
变为- positive_edge_logic integrated /
analyze - format verilog - lib library_name - define SYNOPSIS
/读入 verilog 格式的 HDL 文件,并且用指定的 library 中的中间格式存储 /
Set_clock_gating_signals - design design_name
/控制 signal 是否采用门控时钟 /
elaborate design_name - gate_clock - update - lib library_name
/从存储的中间格式中建立对应的设计/
p ropagate_constraints - gate_clock
/ 将底层设计中的约束加到当前设计中/
comp ile - incremental_mapp ing - map_effort high
/映射过程中花费更多的 cpu 运行时间 /
2. 2 报告文件
Synopys 公司的 Design Comp iler 作为业界最流行的综合工具软件,功能相当强大,可以生成详细的报
告文件,将会在时序、功耗、面积三个方面加以比较。首先必须保证时序满足条件,否则功耗的降低和面积
的减小就没有意义。而门控时钟的引入,常常会造成相应的时序问题。作者使用 Synopys 公司的 PrimeTime
进行静态时序分析( Static Timing A2nalysis) 。
表 1 给出的是 PrimeTime 对当前设计的关键路径的时序报告。data required time 表示理论上最大允许的
延迟时间, data arrival time 表示实际数据到达的时间。表 1 说明,使用门控时钟后,时序仍然满足要求。
图1
再看图 2,模块 test_logic 表示一个测试逻辑,它并不真正实现我们电路的功能,
只是为了测试电路功能。所以我们就不希望综合工具对这这些路径进行分析,就
是说这些路径就是我们所说的 FALSE PATH:
图2
set_false_path –fall_from clk1–to [get_pins test_logic|*|datain]
set_false_path –from [get_pins test_logic|*|clk] \
‐to [get_pins test_logic|*|datain]
set_false_path –from [get_pins test_logic|*|clk] ‐to [get_ports test_out]
然后看图 3,reg1 的输出和 reg2 的输入跨越了不同的时钟域 clk1 和 clk2,我们
不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的 FALSE
PATH:
set_false_path –from [get_pins reg1|clk]–to [get_pins reg2|datain]
图3
图4
TimeQuest 时钟分析
完整的静态时序分析包括寄存器至寄存器分析、I/O 和异步复位通路分析等。 TimeQuest 分
析器使用数据请求时间、数据到达时间和时钟达到时间来验证电路性能,检测潜在的时序违
规。 TimeQuest 分析器确定设计正常工作必须符合的时序关系,针对请求时间检查达到时
间,以验证时序。
时钟建立检查
时钟保持检查
恢复和消除
多周期通路
时钟建立检查
进行时钟建立检查时,TimeQuest 分析器分析每个寄存器至寄存器通路的启动和锁存边沿,
确定建立关系。对于目的寄存器的每个锁存边沿,TimeQuest 分析器使用最靠近源寄存器的
前一时钟边沿作为锁存边沿。
在图 1 中,定义了两个建立关系,标记为 Setup A 和 Setup B。对于 10ns 的锁存沿,作为启
动沿的最近时钟是在 3ns,标记为 Setup A。对于 20ns 的锁存沿,作为启动沿的最近时钟是
在 19ns,标记为 Setup B 。
图 1. 建立检查
TimeQuest 分析器时钟建立检查作为松弛结果。松弛是时序要求达到或者没有达到的余量。
正松弛表明达到要求,负松弛表明没有达到要求。 TimeQuest 分析器利用方程 1 来确定内
部寄存器至寄存器通路的时钟建立松弛。
方程 1
Clock Setup Slack = Data Required Time – Data Arrival Time
Data Required = Clock Arrival Time – μt SU – Setup Uncertainty
Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register
Data Arrival Time = Launch Edge + Clock Network Delay Source Register + μt CO +
Register-to-Register Delay
如果数据通路是从输入端口至内部寄存器, TimeQuest 分析器使用方程 2 来计算保持松弛
时间。
方程 2
Clock Setup Slack Time = Data Required Time – Data Arrival Time
Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + Input Maximum
Delay of Pin + Pin to Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register – μt SU
如果数据通路是从内部寄存器至输出端口, TimeQuest 分析器使用方程 3 来计算建立松弛
时间。
方程 3
Clock Setup Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch
Edge + Clock Network Delay to Source Register + μt CO + Register to Pin Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register – Output
Maximum Delay of Pin
时钟保持检查
进行时钟保持检查时, TimeQuest 分析器确定所有源和目的寄存器对的建立关系的保持关
系。 TimeQuest 分析器检查所有建立关系的邻近时钟边沿,确定保持关系。 TimeQuest 分
析器对每一种建立关系进行两种保持检查。第一种保持检查确定当前启动沿启动的数据没有
被前一锁存沿捕获到。第二种保持检查确定下一启动沿启动的数据没有被当前锁存沿捕获
到。
图 2 显示了两种建立关系,以 Setup A 和 Setup B 标出。 Setup A 和 Setup B 的第一种
保持检查分别标记为 Hold Check A1 和 Hold Check B1 。 Setup A 和 Setup B 的第二种保
持检查分别标记为 Hold Check A2 和 Hold Check B2 。
图 2.保持检查
STA 资料准备
Library Data:
图 四
图 五
图 六
图 七
图 八
图 九
图 十
图 十一
图 十二
图 十三
图十四
• 元件延迟时间(Ddelay):输入达逻辑 1 位准 50%到输出达
逻辑 1 位准 50%的时间。
• 元件转换时间(Dtransition):输出达逻辑 1 位准 20%(80%)
到 80%(20%)的时间。
接下来我们说明操作环境(Operating Condition)对时序的影响。操
作环境指的是制程(Process)、电压(Voltage)、温度(Temperature)三项
因子。这三项因 子通常会被简称为 PVT,其对时序的影响可用下方线性方程式
来描述。其中 nom_process、nom_voltage 及 nom_temperature 会定义在标准元
件库中,代表建立时序表格时的操作环境。
Interconnect Data:
在「什么是 STA」段落的例子中,为了方便说明,我们并没有把逻辑闸和逻
辑闸间的连线延迟(Interconnect Delay)考虑在内。事实上,许多 DSM IC 设
计之时序表现是由连线延迟主导的,其重要性不容我们忽视。
连线延迟依照布局与绕线(P&R)前后有不同的考量。在布局与绕线前,元
件在晶片中摆放的位置尚未确定,所以连线延迟是一个预估值。而在布局与绕 线
之后,连线延迟则是根据实际绕线计算出来的。对布局与绕线之前的连线延迟,
通常是用 Wireload Model 来预估。Wireload Model 根据晶片面积的预估大小及
连线驱动元件数目(Fan-out)的多寡来决定连线的电阻和电容值,STA 软体则
利用这些电阻电容值计算出连线延 迟。在布局与绕线之后,可以利用电阻电容
萃取(RC Extraction)软体将绕线图形转换成实际的电阻电容电路,然后贴回
(Back-annotate)STA 软体计算连线延迟。
Timing Constraints:
图十五
如果上面的文字让你有不知所云的感觉,那底下看图说故事的解说也许会让你有
比较清晰的概念。在图十五的电路中,左边的正反器(Flip-Flop) 在第一个
Clock 上升缘时会丢出资料,此资料会在第二个 Clock 上升缘让右边的 Flip-Flop
撷取。要分析右边的 Flip-Flop 能否正确撷取 资料就必须知道第一个 Clock 上
升缘到达节点 C1 的时间点和第二个上升缘到达节点 C2 的时间点。假设在时间点
为 0 的时候,Clock 讯号由 S 点出发,经 过一段时间(source latency,1 个时
间单位,模拟晶片外的 Clock 延迟时间,例如板子上的绕线产生的讯号延迟时间)
到达电路的 Clock 输入端点 P,接下来再经过一 段时间(晶片内 Clock 绕线造
成的讯号延迟时间),Clock 讯号分别到达 C1 和 C2 节点。如果电路已经进行布
局与绕线,输入端点 P 到 C1 和 C2 的讯号 延迟时间可由连线上的寄生电阻电容
计算得来。比方说,经过计算发现讯号由 P 传递到 C1 需要 1 个时间单位,由 P
传递到 C2 需 2 个时间单位,则 Clock 讯号 第一个上升缘到达 C1 和第二个上升
缘到达 C2 的时间点就会如图十六下方两列所示,分别为时间点 2 和 13(因为加
上了 1 个时间单位的 source latency)。
图十六
在布局与绕线之前,我们无法准确得知 P 到 C1 和 C2 的讯号延迟时间,仅能先做
个预估。图十五的 network latency 及上文提到的 Uncertainty 就是用来做此种
预估的。先假设我们拥有某种完美的布局与绕线软体可以让 Clock 输入端点 P
到所有 Flip-Flop 的 Clock 输入端的讯号延迟时间一模一样,那么我们只要知
道这个讯号延迟时间就可以得到 Clock 讯号到达 C1 和 C2 的时间点了。这 个讯
号延迟时间可以藉由电路特性(如预估面积大小,Flip-Flop 数目等)来做预估,
而这个预估值就是所谓的 network latency。如果这种完美的软体存在的话,那
Clock 的上升缘到达 C1 和 C2 的时间点就可以由 Latency(source latency +
network latency)计算出来。
除了 Clock 之外,对于电路其他输出输入端点及其周边的环境(Boundary
Condition)也要加以描述。在说明 Boundary Condition 之前,我们得对路径
(Path)有更进一步的了解。上文曾提及 STA 会将电路中所有的 Path 找出来加
以分析,但 Path 的定义是什么 呢?
Path 根据起点及终点可以分为 4 种:
1. Driving Cell:定义输入端点的推动能力(图十八)。
2. Input Transition Time:定义输入端点的转换时间(图十八)。
3. Output Capacitance Load:定义输出负载(图十八)。
4. Input Delay:输入端点相对于某个 Clock 领域的延迟时间。(图十九,
Delayclk-Q + a)
5. Output Delay:自输出端点往外看相对于某个 Clock 领域的延迟时间。
(图
十九,c)
图十八
图十九
STA 流程及分析方式
STA 的流程如图二十所示,而其分析验证的项目就是我们前文提及之时序检查相
关的 Timing Arc,如 Setup Time、Hold Time 等等。以下我们针对 Setup Time
举 1 实际范例来说明 STA 的分析方式。
图二十
Setup Time
设计电路如图二十一所示,时序模型(Timing Model)及时序限制(Timing
Constraint)如下:
图二十一
图二十五
图二十七
图二十九
图三十一
图三十三
图三十四
图三十六
寄生参数提取和静态时序分析
引言
Star-RCXT 工具介绍
Star-RCXT 以其高精度、友好的用户界面以及和其它工具良好的结合成为目前业
界比较流行的一款寄生参数提取工具,是专门针对 0.18mm 及以下工艺的寄生参
数提取所设计的。它采用了二点五维的几何提取技术,达到了三维的提取精度,
但比三维的抽取工具速度快很多,能够快速准确地对上百万门的设计进行全局的
寄生参数提取。
用 Star-RCXT 进行寄生参数提取的条件
应用 Star-RCXT 进行精细寄生参数提取,还需要两个与工艺参数有关的文件:
mapping 文件和 ITF(Interconnect Technology Format)文件。ITF 文件是由晶
圆代工厂直接提供的,它包含的信息主要有:工艺采用的各个层次(包括电介质、
过孔和金属导线等),各个层次在工艺流程中的厚度、宽度等物理尺寸,各个层
次的电气参数(如介电常数、方块阻值等)。Star-RCXT 不能直接使用 ITF 格式的
文件,它提供 grdgenxo 命令将晶圆代工厂提供的 ITF 格式文件转换成 Star-RCXT
所需要的.nxtgrd 格式文件,Mapping 文件用于实现这种转换过程,将目
标.nxtgrd 文件中各个层次名称与设计数据库中的层名称相对应起来。
Star-RCXT 支持的格式
Primetime 工具介绍
PrimeTime 分析原理
PrimeTime 进行静态时序分析时把整个芯片按照时钟分成许多时序路径。路径的
起点是时序单元的输出引脚或是设计的输入端口,路径的终点是时序单元的输入
引脚或是设计的输出端口。根据起点和终点的不同,可将逻辑电路分解为图 1
中用虚线表示的四种路径,分别代表了以下四种类型: 路径 1 起始于输入端口,
终止于时序单元的数据输入端;路径 2 起始于时序单元的时钟引脚,终止于时序
单元的数据输入端;路径 3 起始于时序单元的时钟引脚,终止于输出端口;路径 4
起始于输入端口,终止于输出端口。
图 1 逻辑电路中的四种时序路径
PrimeTime 工具把设计打散成一系列时序路径之后,沿每条路径计算延时。路径
的总延时是该路径中所有单元延时和连线延时的和。单元延时为路径中从逻辑门
的输入到输出的延时量,若没有提供反标延时信息,PrimeTime 会根据工艺库中
提供的此单元延迟表来计算单元延时。典型的单元延迟表是输入传输时间和输出
负载电容的函数,基于二维表格来计算每个单元的延时。对于在表格中找不到对
应点的情况,可通过内插或外推表格中的值来获得当前条件下的延时值。连线延
时是时序路径中从一个单元的输出到下一个单元输入的延时总和。PrimeTime 可
读取由专门提取工具得到的详细内部互联网络的寄生电容和电阻值,并基于此精
确地计算连线延时,以完成精确的版图时序分析。
PrimeTime 分析要求
静态时序分析的目的是保证设计中的以上四种类型路径可以满足建立时间和保
持时间的要求。即无论其起点是什么,信号都可以被及时地传递到该路径的终点,
并且在电路正常工作所必需的时间段内保持恒定。如果建立时间和保持时间不能
得到满足,触发器就无法采样到正确的数据。
对 FFT 处理器进行寄生参数提取和静态时序分析
对 FFT 处理器进行寄生参数提取
在 Calibre 中采用 flat 方式对 FFT 处理器进行 LVS,通过 LVS 后自动产生 SVDB
目录,并将配置 LVS 运行时设置的内容保存为 lvsset 文件。然后编写 query.cmd
文件,该文件指定基于 CCI 的 Star-RCXT 寄生参数提取所需文件的位置,如标注
的 GDSII 版图、层映射信息、顶层端口信息、理想版图网表、网络名信息、交互
表等。编写好 query.cmd 文件后,在 calibredrv 工具的命令行中执行命令:
Calibre-query svdb < query.cmd,会生成 Star-RCXT 寄生参数提取所需的文件,
如包含多边形和连通性信息的文件 xtalkdetailDRCLVS.agf、元件交互参考信息
的文件 xtalkdetailDRC LVS.ixf、网络交互参考信息的文件
xtalkdetailDRCLVS.nxf、理想版图网表文件 xtalkdetailDRCLVS.nl 和器件表文
件 xtalkdetailDRCLVS. devtab 等。
对 FFT 处理器进行静态时序分析
读入设计数据
约束时序
进行 Sign-off 静态时序分析时,由于现在的网表中已经包括了实际的时钟信息,
用 create_clock 命令来定义一个时钟的基本信息,如周期、波形等,将该时钟
信号在实际的时钟树中传播,进而得到实际的时钟延时和偏移。用
set_propagated_ clock 命令可以根据时钟树,自动计算出时钟信号到达终点的
延时和偏移。Sign-off 静态时序分析可不设置时钟的确定性,但有时为了提高
设计可靠性,用 set_clock_uncertainty 命令对建立时间和保持时间都设置一个
很小时间值。根据设计规范要求用 set_input_delay 命令直接设置输入延时值,
用 set_output_delay 命令直接设置输出延时值等。
设定环境和分析条件
检查设计数据和分析设置参数
在进行时序分析前要先检查设计数据,如层次、库、端口、单元等,以及分析设
置参数,如时钟、输入延迟约束、输出延迟约束等是否已经设置或设置是否正确。
如,用 check_timing 命令来检查是否存在未定义的时钟、未定义的输入到达时
间和未定义的输出约束等;用 report_design 命令输出当前设计的一系列属性,
如分析类型、所选的工作条件、线负载模型和设计规则等;用 report_port 命令
显示端口名、引脚电容、线电容和输入输出延迟等端口信息。
执行分析和检查结果
在设计数据和参数设置均正确的情况下进行时序分析,然后查看分析结果,获得
设计具体的时间信息。如用 report_timing 命令产生一条最大时延路径的详细报
告,包括路径信息(工作条件、线负载模型的模式、路径起点、路径终止点和路
径类型等)、路径延时、路径延时要求和总结部分。用
report_constraint-all_violator 命令报告所有的建立时间时序违规。为了准
确了解 FFT 处理器所有路径的建立时间情况,可执行菜单命令
Timing→Histogram→Endpoint Slack…弹出 Endpoint Slack 对话框,在 Delay
type 中选择 max 后按 OK 可得如图 3 所示的所有路径建立时间情况,从中可知建
立时间最小值为 0.13792,满足建立时间要求。再运行命令
report_analysis_coverage 得 PrimeTime 分析的路径条数为 45957,分析的覆盖
率为 100%,建立时间的违规率为 0%。
图 3 建立时间的分析结果
结语
静态时序分析已经成为数字集成电路设计必不可少的环节。本文应用寄生提取工
具 Star-RCXT 基于 CCI 流程对 FFT 处理器进行寄生参数提取,再用静态时序分析
工具 PrimeTime 读取由 Star-RCXT 抽取工具得到的内部互连网络的详细寄生电容
和电阻值,进行精确的版图时序分析。它不需要输入测试向量就能覆盖所有的路
径,且运行速度很快,占用内存较少,可以对芯片设计进行全面的时序验证。
IC 设计中的时钟类型约束
一个比较全的例子,不过还有比较多的特殊情况。
对于 Pclkx8 需要的约束如下:
以上是用 dc 的新命令来处理。不过用常规来处理也比较不错,不过要在综合以后分析其他
没有 case 的路径。
如下:
create_clock -name SCLK -p 20 [get_ports Sclk]
create_clock -name PCLK -p 8 [get_ports Pclk]
create_generated_clock -name PCLKX8 -multipy_by 8 -source [get_attribute [get_clock]
sources] [get_pins BUF2X2/Z]
create_generated_clock -name SCLK_DIV2 -devide_by 2 -source [get_attribute [get_clock]
sources] [get_pins DIV/clk_div2]
create_generated_clock -name SCLK_DIV8 -devide_by 8 -source [get_attribute [get_clock]
sources] [get_pins DIV/clk_div8]
set_case_analysis 0 [get_pins MUX2/S0]
set_case_analysis 1 [get_pins MUX1/S0]
set_ideal_network [get_pins MUX2/Y]
set_dont_touch_network [get_pins MUX2/Y]
set_ideal_network [get_pins MUX1/Y]
set_dont_touch_network [get_pins MUX1/Y]
上面的约束也不是最好的,如果想进一步精简约束和准确的话,需要仔细分析下时钟域。
如上图所示,pclkx8 和 sclk 以及分频时钟不是同时钟域的。
对于选择时钟,如果输入是同一个时钟域的话,可以在输出端 generated 出一个最高频率。
如果是异步时钟则不需要 set_case_analysis ,2 个时钟需要同时分析。
如果选择器不是用 MUX 来实现,而是用 AO 或者 AOI 实现,可能需要在 AO,AOI 的输出
端分别 generated 这 2 个时钟。
约束可以写成如下:
create_clock -name SCLK -p 20 [get_ports Sclk]
create_clock -name PCLK -p 8 [get_ports Pclk]
create_generated_clock -name PCLKX8 -multipy_by 8 -source [get_attribute [get_clock]
sources] [get_pins BUF2X2/Z]
create_generated_clock -name SCLK_DIV2 -devide_by 2 -source [get_attribute [get_clock]
sources] [get_pins DIV/clk_div2]
create_generated_clock -name MX2_CLK -devide_by 1 -source [get_attribute [get_clock]
sources] [get_pins MX2/Y]
set_ideal_network [get_clocks MX2_CLK]
set_dont_touch_network [get_attribute [get_clocks MX2_CLK] sources]
当然异步时钟之间要设置 false path
set_false_path -from [get_clocks PCLKX8] -to [get_clocks SCLK_DIV2]
set_false_path -from [get_clocks SCLK_DIV2] -to [get_clocks PCLKX8]
这种约束经济实惠,而且准确,所以推荐。当然例外情况也有可能比如加入 dft 测试时钟,
bist 时钟等等,以及 mux 是用 AO,AOI 搭建的。
IC 设计流程及工具
前端设计(也称逻辑设计)和后端设计(也称物理设计)并没有统一严格的界限,涉及到与工艺有关的设计就是后端设计。
1. 规格制定
芯片规格,也就像功能列表一样,是客户向芯片设计公司(称为 Fabless,无晶圆设计公司)提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。
2. 详细设计
Fabless 根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。
3. HDL 编码
使用硬件描述语言(VHDL,Verilog
4. 仿真验证
仿真验证就是检验编码设计的正确性,检验的标准就是第一步制定的规格。看设计是否精确地满足了规格中的所有要求。规格是设计正确与否的黄金标准,一切违反,不
符合规格要求的,就需要重新修改设计和编码。
设计和仿真验证是反复迭代的过程,直到验证结果显示完全符合规格标准。
仿真验证工具 Synopsys 的 VCS,还有 Cadence 的 NC-Verilog。
5. 逻辑综合――Design Compiler
目标参数上达到的标准。逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard
cell)的面积,时序参数是不一样的。所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。
一般来说,综合完成后需要再次做仿真验证(这个也称为后仿真,之前的称为前仿真)
6. STA
Static Timing
Analysis(STA)
,静态时序分析,这也属于验证范畴,它主要是在时序上对电路进行验证,检查电路是否存在建立时间(setup
time)和保持时间(hold
time)的违例(violation)。这个是数字电路基础知识,一个寄存器出现这两个时序违例时,是没有办法正确采样数据和输出数据的,所以以寄存器为基础的数字芯片功能
肯定会出现问题。
7. 形式验证
前端设计的流程暂时写到这里。从设计程度上来讲,前端设计的结果就是得到了芯片的门级网表电路。
1. DFT
Design For
存器)变为扫描单元。关于 DFT,有些书上有详细介绍,对照图片就好理解一点。
2. 布局规划(FloorPlan)
3. CTS
Clock Tree
Synthesis,时钟树综合,简单点说就是时钟的布线。由于时钟信号在数字芯片的全局指挥作用,它的分布应该是对称式的连到各个寄存器单元,从而使时钟从同一个时钟
源到达各个寄存器时,时钟延迟差异最小。这也是为什么时钟信号需要单独布线的原因。
工具 Synopsys 的 Astro
5. 寄生参数提取
由于导线本身存在的电阻,相邻导线之间的互感,耦合电容在芯片内部会产生信号噪声,串扰和反射。这些效应会产生信号完整性问题,导致信号电压波动和变化,如果严
重就会导致信号失真错误。提取寄生参数进行再次的分析验证,分析信号完整性问题是非常重要的。
工具 Synopsys 的 Star-RCXT
6. 版图物理验证
对完成布线的物理版图进行功能和时序上的验证,验证项目很多,如 LVS(Layout Vs
Schematic)验证,简单说,就是版图与逻辑综合后的门级电路图的对比验证;
实际的后端流程还包括电路功耗分析,以及随着制造工艺不断进步产生的 DFM(可制造性设计)问题,在此不说了。
物理版图验证完成也就是整个芯片设计阶段完成,下面的就是芯片制造了。物理版图以 GDS
II 的文件格式交给芯片代工厂(称为 Foundry)在晶圆硅片上做出实际的电路,再进行封装和测试,就得到了我们实际看见的芯片。