时钟到达每一个时序型设备,并控制芯片内的数字事件。
时钟信号的设计两个阶段。
(1)时钟处于“ideal理想模式”(例如:RTL设计期间、合成期间和放置期间)。
一个“理想的”时钟没有物理分布树,它只是神奇地准时出现在所有的时钟针上。
(2)第二阶段是时钟树合成(CTS)将实际的缓冲器树插入设计中,该树将时钟信号从时钟源引脚传送到需要获得时钟信号的触发器。CTS是在放置之后和布线之前完成的。CTS完成后,时钟被称为“propagation传播模式”。
Clock_latency(时钟延迟)是理想模式下术语。
它指的是指定在时钟信号源和触发器时钟管脚之间存在的延迟。这是用户指定的延迟,而不是真正的测量对象。
当时钟实际被创建时,那么相同的延迟现在被称为“插入性延迟”。插入延迟(ID)是通过缓冲器树的真实的、可测量的延迟路径。
有时,clock_latency被解释为插入延迟的期望目标值。时钟延迟是时钟从时钟源到达信宿管脚所花费的时间。
它分为两个部分-时钟源延迟和时钟网络延迟。
时钟源延迟定义时钟波形原点到定义点之间的延迟。
时钟网络延迟是从时钟定义指向信宿管脚的延迟。
时钟延迟也称为时钟插入延迟。
请看下面的两张图片,以便更好地理解什么是时钟延迟。
create_clock [get_ports clk_phy ] -name clk_phase_0 -period 1.874 -waveform "0 0.5*1.874"
set_clock_uncertainty -setup $SKEW_MAX [get_clocks clk_phase_0]
set_clock_uncertainty -hold $SKEW_MIN [get_clocks clk_phase_0]
create_generated_clock -name slice_clk_ctlr_phase_0 -divide_by 2 -add \
-source [get_ports clk_phy] \
-master [get_clock clk_phase_0] \
[get_pin inst_clk_div/inst_clk_div_dff/hic_dnt_div_flop/Q]
set_clock_uncertainty -setup $SKEW_MAX [get_clock slice_clk_ctlr_phase_0]
set_clock_uncertainty -hold $SKEW_MIN [get_clock slice_clk_ctlr_phase_0]
create_clock dqs_ipad[0] -name read_mem_dqs_phase_0 -period 1.784 -waveform "0 0.5*1.784"
set_clock_uncertainty -setup $SKEW_READ_DQS_MAX [get_clock read_mem_dqs_phase_0]
set_clock_uncertainty -hold $SKEW_READ_DQS_MIN [get_clock read_mem_dqs_phase_0]
create_generated_clock -name delayed_dqs_phase_1 -source dqs_ipad[0] \
-edges {1 2 3} -edge_shift "0.25*1.874 0.25*1.874 0.25*1.874" \
-add -master_clock [get_clocks read_mem_dqs_phase_0] dll/dll_delay_line_rd_dqs/delay_0/r1/hic_dnt_dll_nand2/A1
delayed_dqs_phase_1 is dqs_ipad[0] shift 0.25 clock cycle
Path 1: MET Setup Check with Pin dfi_read_datablk/read_datablk_fifo/io_datain_l_reg_0_/CP
Endpoint: dfi_read_datablk/read_datablk_fifo/io_datain_l_reg_0_/D (v) checked with leading edge of 'clk_phase_0'
Beginpoint: dfi_read_datablk/read_datablk_fifo/dll_entry_flop_l_40/hic_dnt_dll_entry_flop/Q (v) triggered by leading edge of 'delayed_dqs_phase_1'
Path Groups: {reg2reg}
Other End Arrival Time 0.462
- Setup 0.099
+ Path Delay 0.901
+ Path Ideal Arrival 0.468
+ CPPR Adjustment 0.000
- Uncertainty 0.050
= Required Time 1.683
- Arrival Time 1.674
= Slack Time 0.009
Clock Rise Edge 0.000
= Beginpoint Arrival Time 0.000
dqs_ipad[0] dqs_ipad[0] ^ 0.000 0.150 0.004 2
...
dfi_dqs_in/hic_dll_dqs_mod_dqs0/hic_dnt_dll_dqs_not/ZN
I v -> ZN ^
CKND8BWP12T35P140 0.037 0.218 0.000 0.016 0.007 1.039
dll/dll_delay_line_rd_dqs/delay_0/r1/hic_dnt_dll_nand2/A1
CKND2D1BWP12T35P140
0.001 0.687 0.000 0.016 0.007 2 1.000 delayed_dqs_phase_1 Adj. = 0.468
...
dfi_read_datablk/read_datablk_fifo/dll_entry_flop_l_40/hic_dnt_dll_entry_flop/CP
EDFQD2BWP12T35P140
0.005 0.957 0.002 0.019 0.027 11 1.000
dfi_read_datablk/read_datablk_fifo/dll_entry_flop_l_40/hic_dnt_dll_entry_flop/Q
CP ^ -> Q v EDFQD2BWP12T35P140
0.112 1.069 0.000 0.012 0.002 1.077
...
时钟偏差
两个信宿管脚之间的时钟偏差是它们之间的时钟延迟的差异。
如果捕获时钟延迟大于启动时钟,则为正偏差。这有助于setup check建立检查。
如果捕获时钟延迟小于启动时钟,则为负偏差。这有助于hold check保持型检查。
设计中理想的时钟偏差是零,这是不可能实现的。构建时钟树以减少时钟偏差值。
时钟不确定量
时钟不确定性是时钟沿的实际到达时间相对于理想到达时间的偏差。
在理想模式下,时钟信号可以同时到达所有时钟引脚。
但事实上,完美是不可能实现的。而理想模式应该引入一些不确定的变量来包容真实的传播模式。
因此,为了预期(为了包容)时钟将在不同时钟管脚的不同时间到达这一事实,“理想模式”下时钟假定时钟不确定。
例如,具有100 ps时钟不确定性的1 ns时钟意味着下一个时钟滴答器将在1 ns加或减50ps内到达。
更深层次的问题是为什么时钟并不总是在一个时钟周期之后到达。
有几个可能的原因,但这里将列出三个主要的原因:
(A)发射触发器时钟引脚的插入延迟不同于捕获触发器时钟引脚的插入延迟(通过时钟树的一条路径可以比另一条路径长)。
这就是所谓的时钟偏差。
(B)时钟周期不恒定。
一些时钟周期以随机方式比其他时钟周期长或短。
这称为时钟抖动,可由PLL或晶体振荡器、电缆、发射机、接收器、PLL的内部电路、Osillator的热噪声等引起。在Pre CTS的情况下,由于时钟树未建立,所以不确定性=歪斜+抖动。
CTS后不确定性=抖动。
©即使发射时钟路径和捕获时钟路径完全相同,它们的路径延迟仍可能因芯片上的变化(OCV)而不同。
这就是芯片的延迟特性因工艺变化、温度变化或其他原因而在整个模具中变化的地方。
这实质上增加了时钟偏差。