sta時序約束(STA學習記錄-時鐘定義)
2023-04-21 16:31:38 3
#頭條創作挑戰賽#
STA的準備工作包括:設定時鐘、指定IO時序特性、指定false path和multicycle path
1 什麼是STA環境看下面這張圖,假定Design Under Analysis(DUA)會與其他同步設計交互,這意味著DUA會從前一級觸發器接收數據,並將數據發送到DUA後一級觸發器
為了對這種設計執行STA,需要指定觸發器的時鐘、進入DUA和退出DUA的所有路徑上的時序約束
2 指定時鐘定義時鐘時需要提供以下信息:
Clock source:可以是design的port,也可以是design內部的pinPeriod:時鐘周期Duty cycle:高電平持續時間和低電平持續時間Edge time:上升沿和下降沿出現的時刻通過時鐘定義,所有內部的timing path都將受到約束,表明所有的internal path都可以用時鐘路徑來分析
下面是一個基本的時鐘定義:
create_clock \ -name SYSCLK \ -period 20 \ -waveform {0 5} \ [get_ports SCLK]
在這個例子中,定義的時鐘名稱為SYSCLK,並且指定定義的時鐘是在埠 SCLK上定義的
SYSCLK的時鐘周期時20(如果沒有明確指定時間的單位,默認是ns)
在-waveform中,第一個變量是上升沿出現的時刻,第二個變量是下降沿出現的時刻,因此在這個例子中,上升沿出現在0ns,下降沿出現在5ns
這個例子對應的波形圖如下
-waveform中可以指定任意數量的邊沿,但是所有的邊沿必須在一個周期之內
邊沿時刻從0時刻之後的第一個上升沿開始,然後依次是下降沿、上升沿、下降沿……
-waveform {time_rise time_fall time_rise time_fall ...}
在-waveform中需要指定偶數個邊沿,並且-waveform指定的是一個周期內的波形,在後續周期中不斷重複
如果沒有指定-waveform,默認是
-waveform {0, period/2}
下面看一個不使用-waveform選項的時鐘定義
create_clock -period 5 [get_ports SCAN_CLK]
其對應的波形圖如下:
在這個例子中,由於沒有指定-name,因此定義時鐘名稱與埠名稱相同
再來看另一個例子
create_clock -name BDYCLK \ -period 15 \ -waveform {5 12} \ [get_ports GBLCLK]
其對應的波形圖如下:
在這個例子中,根據-waveform可以知道,第一個上升沿出現在5ns,第一下降沿出現在12ns
因為選項-waveform給出的上升沿和下降沿時刻會在每個cycle裡重複,又因為-period指定周期是15ns,
所以在第二個cycle中,上升沿應該出現在15 5=20ns處
下降沿出現在15 12=27ns處
再來看另外兩個例子:
# Figure (a) create_clock -period 10 \ -waveform {0 5} \ [get_ports FCLK] #Figure (b) create_clock -period 125 \ -waveform {100 150} \ [get_ports ARMCLK]
對應的波形圖如下:
對於圖(a),周期為10ns,上升沿出現在5ns,下降沿出現在10ns
在第二個cycle中,上升沿出現在10 5=15ns,下降沿出現在10 10=20ns
對於圖(b),周期為125ns,從選項-waveform {100 150}可以知道,上升沿出現在100ns處,並且 high duration = 150-100=50ns,那麼low duration = period - high duration,即low duration = 75ns
因為150ns的時刻已經超出了第一個cycle的時間範圍,並且low duration的時長小於上升沿出現的時刻,那麼可以推斷出 在第一個cycle中有一個下降沿,這個下降沿出現的時刻可以用100 - low duration得到(100 - 75 = 25ns)
出現這種情況的原因是:選項-waveform要從上升沿開始
根據下面的例子,再次理解一下選項-waveform
#Figure (a) create_clock -period 1.0 \ -waveform {0.5 1.375} \ [get_ports MAIN_CLK] #Figure (b) create_clock -period 1.2 \ -waveform {0.3 0.4 0.8 1.0} \ [get_ports JTAG_CLK]
對應的波形圖如下:
在這個例子中,圖(a)的分析方式與上一個例子相同
圖(b)由於選項-waveform中給出的上升沿和下降沿時刻都在第一個cycle時間範圍內,因此不需要進行額外的推斷
在某些情況下,比如在頂層的輸入埠或某些PLL的輸出埠,工具無法自動計算出過渡時間,此時在clock source出顯示指定過渡時間很有用,可以使用set_clock_transition來指定
set_clock_transition -rise 0.1 [get_clocks CLK_CONFIG]set_clock_transition -fall 0.12 [get_clocks CLK_CONFIG]# 這個約束僅適用於ideal clocks,一旦構建了時鐘樹就將其忽略
3 時鐘不確定度可以用set_clock_uncertainty來指定時鐘周期的timing uncertainty,用不確定度來建模那些會降低有效時鐘周期的因素
set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG]set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG]
setup check會減少可用的有效時鐘周期
對於hold check,clock uncertainty被用作需要滿足的額外時序裕量
這裡我的理解是,由於clock uncertainty的存在,減小了有效的時鐘周期,並且在clock uncertainty範圍內,我們無法預測clock是否有效,為了保證數據的正確性,在進行數據傳輸時,應當避開clock uncertainty的範圍
下面幾個command可以用來指定跨時鐘邊界path上的clock uncertainty,被稱為 inter-clock uncertainty
set_clock_uncertainty -from VIRTUAL-SYS_CLK -to SYSCLK -hold 0.05set_clock_uncertainty -from VIRTUAL-SYS_CLK -to SYSCLK -setup 0.3set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05set_clock_uncertainty -from SYS_CLK -to CFG_CLK -setup 0.1
從圖中可以看到,該電路為兩個不同的clock domain SYS_CLK和CFG_CLK之間的path,根據上面約束可知,setup check的uncertainty是100ps,hold check的uncertainty是50ps
4 時鐘延遲可以使用set_clock_latency來指定時鐘的延遲,用法如下:
set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]# MIN_CLK的上升沿延遲是1.8nsset_clock_latency 2.1 -fall [all_clocks]# 所有時鐘的下降沿延遲是2.1ns# -rise和-fall指的是 時鐘在DFF的clock pin上的延遲
時鐘延遲有兩種:network latency和source latency
network latency:從時鐘定義點(creat_clock)到DFF的clock pin上的延遲source latency:指的是從時鐘源到時鐘定義點的延遲下圖直觀地展示了這兩個延遲類型的位置
以下是一些指定源延遲和網絡延遲的示例
# 沒有給出 -source 選項,表明是 network latency# 沒有給出 -fall和-rise選項,表明fall和rise是相同的# 沒有給出 -min和-max選項,表明min和max是相同的set_clock_latency 0.8 [get_clocks CLK_CONFIG]set_clock_latency 1.9 -source [get_clocks SYS_CLK]set_clock_latency 0.851 -source -min [get_clocks CFG_CLK]set_clock_latency 1.322 -source -max [get_clocks CFG_CLK]
一個重要的區別:
當clock tree建立後,network latency可以忽略,source latency不可以忽略
這是因為network latency的作用是在clock tree綜合之前用來估算clock tree上的latency,當clock tree綜合之後,我們可以計算出clock tree上的實際的latency,因此不在需要network latency
當clock tree綜合後,總的clock latency = source latency clock tree上的實際latency
參考Static Timing Analysis for Nanometer Designs: A Practical Approach
,