Input-to-Reg 約束
設(shè)置 Input-to-Reg 時序路徑的約束時,不僅需要創(chuàng)建時鐘模型,還需要設(shè)置輸入延時 (input delay)。 設(shè)置 input delay 時,需要假設(shè)輸入 port 信號是與時鐘相關(guān)聯(lián)的,且 port 信號是在時鐘上升沿到來之后延遲了一小段時間到達(dá)的 port 端。 這一小段延遲時間稱為 input delay。
假設(shè)上圖中 port A 信號是在時鐘到來之后的 0.6ns 達(dá)到,時鐘周期為 2ns,clock uncertainty 為 0.3ns,建立時間為 0.2ns,則約束語句為:
create_clock -period 2 [get_ports Clk]
set_clock_uncertainty -setup 0.3 [get_clocks Clk]
set_input_delay -max 0.6 -clock Clk [get_ports A]
則 port A 到寄存器 FF2 的 D 端的 N 路徑延時為:
Tmax = 2-0.3-0.6-0.2 = 0.9ns
只要 port A 到寄存器 FF2 的 D 端的延時小于 0.9ns,時序就能滿足要求。
當(dāng)所有輸入端口延遲相同時,可利用以下語句進(jìn)行時序約束:
set_input_delay -max 0.6 -clock Clk \\
[remove_from_collection [all_inputs] [get_ports Clk]]
當(dāng)僅有一兩個信號的輸入延遲不同時,可以使用分別設(shè)置的方法,也可以使用覆蓋設(shè)置的方法:
# 首先設(shè)置所有 input delay 為 0.6ns
set_input_delay -max 0.6 -clock Clk [all_inputs]
# port A 的輸入延時設(shè)為 0.7ns,則上一句 A 的輸入延時屬性會被覆蓋
set_input_delay -max 0.7 -clock Clk [get_ports A]
# 去除掉 clock 端的輸入延時設(shè)置
remove_input_delay [get_ports Clk]
Reg-to-Output 約束
設(shè)置 Reg-to-Output 時序路徑的約束時,也需要設(shè)置輸出延時 (output delay)。
設(shè)置 output delay 時,也需要假設(shè)輸出 port 信號是與時鐘相關(guān)聯(lián)的,且 port 端信號在延遲了一小段時間后可以到達(dá)可能存在的 ”下一級寄存器的 D 端“,并被時鐘捕獲。 這一小段延遲時間稱為 output delay。
假設(shè)上圖中 port B 信號輸出后到達(dá)下一級的 output delay (Tt + Tsetup) 為 0.8ns,時鐘周期為 2ns,clock uncertainty 為 0.3ns,則約束語句描述為:
create_clock -period 2 [get_ports Clk]
set_clock_uncertainty -setup 0.3 [get_clocks Clk]
set_output_delay -max 0.8 -clock Clk [get_ports B]
寄存器 FF3 的 clock 端到 port B 的最大延時為:
Tmax = 2-0.3-0.8 = 0.9ns
只要寄存器 FF3 的 clock 端到 port B 的延時小于 0.9ns,時序就能滿足要求。
當(dāng)所有輸出端口延遲相同時,也可以同時對所有輸出端進(jìn)行 output delay 的設(shè)置。 當(dāng)僅有一兩個信號的輸出延時不同時,可以使用分別設(shè)置的方法,也可以使用覆蓋設(shè)置的方法。
Input-to-Output 約束
當(dāng)輸入端和輸出端之間只存在組合邏輯時,就需要在 DC 中創(chuàng)建虛擬時鐘來約束時序。 虛擬時鐘沒有連接到設(shè)計中的任何端口,只為方便分析 input delay 與 output delay。
例如某個設(shè)計示意圖如下所示,估算虛擬時鐘的頻率為 2ns, uncertainty 為 0.3ns,則 Input-to-Output 的約束語句描述如下:
# 創(chuàng)建虛擬時鐘時無需指定 clock 源,且不可省略 -name 選項
create_clock -name VCLK -period 2
set_clock_uncertainty -setup 0.3 [get_clocks VCLK]
set_input_delay -max 0.4 -clock VCLK [get_ports A]
set_output_delay -max 0.3 -clock VCLK [get_ports B]
此時 port A 與 port B 之間的組合邏輯最大延時要求為:
Tcomb = 2-0.3-0.4-0.3 = 1ns
Latency/Uncertainty 對 Input/Output Delay 的影響
上一個寄存器的時鐘端到下一個寄存器的數(shù)據(jù)端的路徑,可以稱為數(shù)據(jù)路徑 (data path)。 而時鐘周期的傳輸可以稱為時鐘路徑 (clock path)。
clock 建模時,如果設(shè)置了 Uncertainty/Latency,則會對 data path 和 clock path 產(chǎn)生影響,從而對 Input/Output Delay 的相關(guān)時序可能也會產(chǎn)生影響。
某一設(shè)計示意圖及時序約束語句描述如下,圖中也簡單計算了數(shù)據(jù)到來時刻、數(shù)據(jù)捕獲時刻、時鐘到來時刻等信息。
首先分析 Input-to-Reg path:
考慮 clock latency,時鐘延時為 source latency 與 network latency 的總和:
clock latency = 0.3+0.12 = 0.42 ns
FF2 時鐘端的 clock launch 包含了 clock latency 和 uncertainty,到達(dá)時刻為:
clk launch = 2+0.42-2 = 2.22ns
數(shù)據(jù)到達(dá) port 端口的時間為 clock latency 與 input delay 的總和:
input arrival = 0.42+0.6 = 1.02ns
所以,內(nèi)部路徑 N 的最大延時為:
Npath_Tmax = clk launch - input arrival = 2.22-1.02 = 1.2ns
不考慮 clock latency,則內(nèi)部路徑 N 的最大延時為:
Npath_Tmax = 2 - 0.2 - 0.6 = 1.2ns
可見,clock latency 對 Input-to-Reg 路徑時序沒有影響,clock uncertainty 有影響。
分析 Reg-to-Output 路徑:
考慮 clock latency,則 clock launch 時間不變,仍然為 2.22ns。
clock latency 與內(nèi)部路徑 S 的延時時間和為:
clock latency + Spath_Tmax
= clock launch - output_delay
=2.22 - 0.8 = 1.42ns
內(nèi)部路徑 S 的最大延時為:
Spath_Tmax = 1.42 -0.42 = 1ns
不考慮 clock latency,則內(nèi)部路徑 S 的最大延時為:
Spath_Tmax = 2 - 0.2 - 0.8 = 1ns
可見,clock latency 對 Reg-to-Output 路徑時序沒有影響,clock uncertainty 有影響。
小結(jié)
clock latency 同時作用于 data_path 與 clock path,所以對 Input-to-Reg 與 Reg-to-Output path 的時序分析不會產(chǎn)生影響。
clock Uncertainty 只作用于clock path,所以對 Input-to-Reg 與 Reg-to-Output path 的時序分析會產(chǎn)生影響。
時序預(yù)算 (Timing Budget)
因為應(yīng)用場景的差異,更多時候 input/output delay 的具體值是無法精確得到的,這就需要對相關(guān)的延時值進(jìn)行估計,并應(yīng)用到約束設(shè)置中,即為時間預(yù)算 (timing budget)。
Timing Budget 的方式主要有兩種:按時鐘百分比估算和按寄存器輸出估算。
按時鐘百分比估算
一般建議使用時鐘周期的 40% 時長來約束 port 端到寄存器 D 的延時 (上圖中 MY_BLOCK 的 N path) ,即 input delay 可以設(shè)置為時鐘周期的 60% 時長。 output delay 同理。
假如上一級 Q 端到輸出端的延時 (上圖中 X_BLOCK 的 S path) 也取 40%,那么 Input-to-Reg path 將有 20% 的裕量,裕量中包括 FF1 的 CQ 延時 (FF1 時鐘端到輸出端) 和 FF2 的建立時間。 所以,實際設(shè)置 60% 的 input delay 是有些偏大的。
假設(shè)上述設(shè)計中,時鐘周期為 10ns,則 timing bugdet 方案可以描述如下:
create_clock -period 10 [get_ports CLK]
set_input_delay -max 6 -clock CLK \\
[remove_from_collection [all_inputs] [get_ports CLK]]
set_output_delay -max 6 -clock CLK [all_outputs]
按寄存器輸出估算
假設(shè)所有的輸出 port 都是由寄存器驅(qū)動的 (見上圖中的 X_BLOCK 和 Y_BLOCK 設(shè)計),那么 input delay 可以由上一級寄存器的延時特性估算,output delay 可以由下一級寄存器的延時特性估算。
例如通過查找 library 得到觸發(fā)器的 CQ 延時 (時鐘端到輸出端) 最大為 1.5ns,最小為 0.2ns,那么 input/output delay 的約束語句可以描述如下:
set C2Q_MAX 1.5
set C2Q_MIN 0.2
set PERIOD 10
create_clock -period $PERIOD [get_ports CLK]
set_input_delay -max $C2Q_MAX -clock CLK \\
[remove_from_collection [all_inputs] [get_ports CLK]]
set_output_delay -max [expr 10-$C2Q_MIN] -clock CLK [all_outputs]
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120385 -
時鐘
+關(guān)注
關(guān)注
11文章
1734瀏覽量
131490 -
約束
+關(guān)注
關(guān)注
0文章
82瀏覽量
12733 -
時序約束
+關(guān)注
關(guān)注
1文章
115瀏覽量
13425 -
時序路徑
+關(guān)注
關(guān)注
0文章
12瀏覽量
1400
發(fā)布評論請先 登錄
相關(guān)推薦
評論