STA的準(zhǔn)備工作包括:設(shè)定時(shí)鐘、指定IO時(shí)序特性、指定false path和multicycle path
1 什么是STA環(huán)境
看下面這張圖,假定Design Under Analysis(DUA)會與其他同步設(shè)計(jì)交互,這意味著DUA會從前一級觸發(fā)器接收數(shù)據(jù),并將數(shù)據(jù)發(fā)送到DUA后一級觸發(fā)器
為了對這種設(shè)計(jì)執(zhí)行STA,需要指定觸發(fā)器的時(shí)鐘、進(jìn)入DUA和退出DUA的所有路徑上的時(shí)序約束
2 指定時(shí)鐘
定義時(shí)鐘時(shí)需要提供以下信息:
- Clock source:可以是design的port,也可以是design內(nèi)部的pin
- Period:時(shí)鐘周期
- Duty cycle:高電平持續(xù)時(shí)間和低電平持續(xù)時(shí)間
- Edge time:上升沿和下降沿出現(xiàn)的時(shí)刻
通過時(shí)鐘定義,所有內(nèi)部的timing path都將受到約束,表明所有的internal path都可以用時(shí)鐘路徑來分析
下面是一個(gè)基本的時(shí)鐘定義:
create_clock \\
-name SYSCLK \\
-period 20 \\
-waveform {0 5} \\
[get_ports SCLK]
在這個(gè)例子中,定義的時(shí)鐘名稱為SYSCLK,并且指定定義的時(shí)鐘是在端口 SCLK上定義的
SYSCLK的時(shí)鐘周期時(shí)20(如果沒有明確指定時(shí)間的單位,默認(rèn)是ns)
在-waveform
中,第一個(gè)變量是上升沿出現(xiàn)的時(shí)刻,第二個(gè)變量是下降沿出現(xiàn)的時(shí)刻,因此在這個(gè)例子中,上升沿出現(xiàn)在0ns,下降沿出現(xiàn)在5ns
這個(gè)例子對應(yīng)的波形圖如下
-waveform
中可以指定任意數(shù)量的邊沿,但是所有的邊沿必須在一個(gè)周期之內(nèi)
邊沿時(shí)刻從0時(shí)刻之后的第一個(gè)上升沿開始,然后依次是下降沿、上升沿、下降沿……
-waveform {time_rise time_fall time_rise time_fall ...}
在-waveform
中需要指定偶數(shù)個(gè)邊沿,并且-waveform
指定的是一個(gè)周期內(nèi)的波形,在后續(xù)周期中不斷重復(fù)
如果沒有指定-waveform
,默認(rèn)是
-waveform {0, period/2}
下面看一個(gè)不使用-waveform
選項(xiàng)的時(shí)鐘定義
create_clock -period 5 [get_ports SCAN_CLK]
其對應(yīng)的波形圖如下:
在這個(gè)例子中,由于沒有指定-name
,因此定義時(shí)鐘名稱與端口名稱相同
再來看另一個(gè)例子
create_clock -name BDYCLK \\
-period 15 \\
-waveform {5 12} \\
[get_ports GBLCLK]
其對應(yīng)的波形圖如下:
在這個(gè)例子中,根據(jù)-waveform
可以知道,第一個(gè)上升沿出現(xiàn)在5ns,第一下降沿出現(xiàn)在12ns
因?yàn)檫x項(xiàng)-waveform
給出的上升沿和下降沿時(shí)刻會在每個(gè)cycle里重復(fù),又因?yàn)?code>-period指定周期是15ns,
所以在第二個(gè)cycle中,上升沿應(yīng)該出現(xiàn)在15+5=20ns處
下降沿出現(xiàn)在15+12=27ns處
再來看另外兩個(gè)例子:
# Figure (a)
create_clock -period 10 \\
-waveform {0 5} \\
[get_ports FCLK]
#Figure (b)
create_clock -period 125 \\
-waveform {100 150} \\
[get_ports ARMCLK]
對應(yīng)的波形圖如下:
對于圖(a),周期為10ns,上升沿出現(xiàn)在5ns,下降沿出現(xiàn)在10ns
在第二個(gè)cycle中,上升沿出現(xiàn)在10+5=15ns,下降沿出現(xiàn)在10+10=20ns
對于圖(b),周期為125ns,從選項(xiàng)-waveform {100 150}
可以知道,上升沿出現(xiàn)在100ns處,并且 high duration = 150-100=50ns,那么low duration = period - high duration,即low duration = 75ns
因?yàn)?50ns的時(shí)刻已經(jīng)超出了第一個(gè)cycle的時(shí)間范圍,并且low duration的時(shí)長小于上升沿出現(xiàn)的時(shí)刻,那么可以推斷出 在第一個(gè)cycle中有一個(gè)下降沿 ,這個(gè)下降沿出現(xiàn)的時(shí)刻可以用100 - low duration得到(100 - 75 = 25ns)
出現(xiàn)這種情況的原因是:選項(xiàng)-waveform
要從上升沿開始
根據(jù)下面的例子,再次理解一下選項(xiàng)-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]
對應(yīng)的波形圖如下:
在這個(gè)例子中,圖(a)的分析方式與上一個(gè)例子相同
圖(b)由于選項(xiàng)-waveform
中給出的上升沿和下降沿時(shí)刻都在第一個(gè)cycle時(shí)間范圍內(nèi),因此不需要進(jìn)行額外的推斷
在某些情況下,比如在頂層的輸入端口或某些PLL的輸出端口,工具無法自動計(jì)算出過渡時(shí)間,此時(shí)在clock source出顯示指定過渡時(shí)間很有用,可以使用set_clock_transition
來指定
set_clock_transition -rise 0.1 [get_clocks CLK_CONFIG]
set_clock_transition -fall 0.12 [get_clocks CLK_CONFIG]
# 這個(gè)約束僅適用于ideal clocks,一旦構(gòu)建了時(shí)鐘樹就將其忽略
3 時(shí)鐘不確定度
可以用set_clock_uncertainty
來指定時(shí)鐘周期的timing uncertainty,用不確定度來建模那些會降低有效時(shí)鐘周期的因素
set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG]
set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG]
setup check會減少可用的有效時(shí)鐘周期
對于hold check,clock uncertainty被用作需要滿足的額外時(shí)序裕量
這里我的理解是,由于clock uncertainty的存在,減小了有效的時(shí)鐘周期,并且在clock uncertainty范圍內(nèi),我們無法預(yù)測clock是否有效,為了保證數(shù)據(jù)的正確性,在進(jìn)行數(shù)據(jù)傳輸時(shí),應(yīng)當(dāng)避開clock uncertainty的范圍
下面幾個(gè)command可以用來指定跨時(shí)鐘邊界path上的clock uncertainty,被稱為 inter-clock uncertainty
set_clock_uncertainty -from VIRTUAL-SYS_CLK -to SYSCLK -hold 0.05
set_clock_uncertainty -from VIRTUAL-SYS_CLK -to SYSCLK -setup 0.3
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -setup 0.1
從圖中可以看到,該電路為兩個(gè)不同的clock domain SYS_CLK和CFG_CLK之間的path,根據(jù)上面約束可知,setup check的uncertainty是100ps,hold check的uncertainty是50ps
4 時(shí)鐘延遲
可以使用set_clock_latency
來指定時(shí)鐘的延遲,用法如下:
set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]
# MIN_CLK的上升沿延遲是1.8ns
set_clock_latency 2.1 -fall [all_clocks]
# 所有時(shí)鐘的下降沿延遲是2.1ns
# -rise和-fall指的是 時(shí)鐘在DFF的clock pin上的延遲
時(shí)鐘延遲有兩種:network latency和source latency
- network latency:從時(shí)鐘定義點(diǎn)(creat_clock)到DFF的clock pin上的延遲
- source latency:指的是從時(shí)鐘源到時(shí)鐘定義點(diǎn)的延遲
下圖直觀的展示了這兩個(gè)延遲類型的位置
以下是一些指定源延遲和網(wǎng)絡(luò)延遲的示例
# 沒有給出 -source 選項(xiàng),表明是 network latency
# 沒有給出 -fall和-rise選項(xiàng),表明fall和rise是相同的
# 沒有給出 -min和-max選項(xiàng),表明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]
一個(gè)重要的區(qū)別:
當(dāng)clock tree建立后,network latency可以忽略,source latency不可以忽略
這是因?yàn)閚etwork latency的作用是在clock tree綜合之前用來估算clock tree上的latency,當(dāng)clock tree綜合之后,我們可以計(jì)算出clock tree上的實(shí)際的latency,因此不在需要network latency
當(dāng)clock tree綜合后,總的clock latency = source latency + clock tree上的實(shí)際latency
-
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61158 -
時(shí)鐘源
+關(guān)注
關(guān)注
0文章
93瀏覽量
15967 -
PLL電路
+關(guān)注
關(guān)注
0文章
92瀏覽量
6408 -
dff
+關(guān)注
關(guān)注
0文章
26瀏覽量
3418
發(fā)布評論請先 登錄
相關(guān)推薦
評論