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