上次介紹了sdc的基本概念,那接下來幾期,我們來講解一些比較常用的sdc命令。雖然sdc大大小小有上百條命令,但實(shí)際常用的其實(shí)就那么10幾條。今天我們來介紹下與時(shí)鐘相關(guān)的命令。主要有以下命令:
create_clock
create_generated_clock
set_clock_uncertainty
set_clock_groups
任何sdc首先定義的都是時(shí)鐘,對于一個(gè)同步電路而言,緩存器和緩存器之間的路徑延遲時(shí)間必須小于一個(gè)Clock 周期(Period),也就是說,當(dāng)我們確認(rèn)了Clock 規(guī)格,所有緩存器間的路徑的Timing Constraint 就會(huì)自動(dòng)給定了。Clock規(guī)格主要包含Waveform、Uncertainty和Clock group的定義。我們把它們稱為時(shí)鐘的三要素,當(dāng)然創(chuàng)建任何時(shí)鐘都要檢查一下這三者有沒有正確定義。
create_clock
主要定義一個(gè)Clock的source源端、周期、占空比(時(shí)鐘高電平與周期的比例)及信號上升沿及下降沿的時(shí)間點(diǎn)。
來看一個(gè)最簡單的例子:
這個(gè)時(shí)鐘描述成sdc語句就是:
create_clock -name SYSCLK -period 20 \
-waveform {0 5} [get_ports2 SCLK]
waveform后面跟上升沿和下降沿的時(shí)間
-waveform {time_rise time_falltime_rise time_fall ...}
如果沒指定-period,默認(rèn)的waveform為{0, period/2}
create_generated_clock
generated clocks是另外一個(gè)重要的時(shí)鐘概念
generated clocks 是從master clock中取得的時(shí)鐘定義。master clock就是指create_clock命令指定的時(shí)鐘產(chǎn)生點(diǎn),如圖所示:
我們可以用如下命令來描述generated clocks:
#定義master clock
create_clock -name CLKP -period 10 \
-waveform {0 5} [get_pins UPLL0/CLKOUT]
#在Q點(diǎn)定義generated clock
create_generated_clock -name CLKPDIV2 \
-source UPLL0/CLKOUT \
-master_clockCLKP -divide_by 2 [get_pins UFF0/Q]
一般我們把時(shí)鐘的源頭會(huì)定義成create_clock,而分頻時(shí)鐘則會(huì)定義為create_generated_clock. 兩者的主要區(qū)別在于CTS步驟,generated clock并不會(huì)產(chǎn)生新的clock domain, 而且定義generated clock后,clock path的起點(diǎn)始終位于master clock, 這樣source latency并不會(huì)重新的計(jì)算。這是定義generated clock的優(yōu)點(diǎn)所在。
Virtual clock
這邊還有一個(gè)經(jīng)常用的概念就是Virtual Clock,虛擬時(shí)鐘。
前面介紹的create_clock,create_generated_clock都是real clock。而virtual clock則不掛在任何port或者pin上,只是虛擬創(chuàng)建出來的時(shí)鐘。如下所示:
#定義虛擬時(shí)鐘
create_clock -name VCLK -period 10 -waveform {0 5}
我們通常會(huì)把input/output delay掛在virtual clock上,因?yàn)閕nput/output delay約束本來就是指片外的時(shí)鐘,所以掛在虛擬時(shí)鐘上較為合理。當(dāng)然如果要省事情,直接掛在real clock上也是可以的。
set_clock_uncertainty
主要定義了Clock信號到時(shí)序器件的Clock端可能早到或晚到的時(shí)間。主要是用來降低jitter對有效時(shí)鐘周期的影響。值得注意的是,在setup check中,clock uncertainty是代表著降低了時(shí)鐘的有效周期;而在hold check中,clock uncertainty是代表著hold check所需要滿足的額外margin。
來看下面一條reg2reg path. 對照著如下時(shí)鐘波形圖??梢詫懗鱿旅娴募s束。
set_clock_uncertainty-from VIRTUAL_SYS_CLK \
-to SYS_CLK -hold 0.05set_clock_uncertainty -from VIRTUAL_SYS_CLK \
-to SYS_CLK -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
set_clock_groups
定義完時(shí)鐘后,我們也需要通過設(shè)置clock group來確認(rèn)各個(gè)時(shí)鐘之間的關(guān)系。這是很重要的一步,因?yàn)橥ǔN覀冞€需要做cross domain check,如果clock group設(shè)錯(cuò)了,會(huì)導(dǎo)致整個(gè)STA檢查錯(cuò)誤。一般有三個(gè)選項(xiàng):asynchronous,physically_exclusive和logically_exclusive。
asynchronous代表兩個(gè)異步的clock group
physically_exclusive代表兩個(gè)clock group在物理意義上相互排斥,比如在一個(gè)source pin上定義了兩個(gè)時(shí)鐘。
logically_exclusive代表兩個(gè)clock group在邏輯上相互排斥,比如兩個(gè)clock經(jīng)過MUX選擇器。一個(gè)簡單的例子:
set_clock_groups -physically_exclusive \
-group {CLK1 CLK2}-group {CLK3 CLK4}
clock group的定義異常謹(jǐn)慎,需要和前端再三確認(rèn)。
時(shí)鐘的定義就到此為止了,只是一些基礎(chǔ)的概念,具體命令還有很多延伸擴(kuò)展的內(nèi)容,大家要去翻doc,深入研究下!
-
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1747瀏覽量
131803 -
SDC
+關(guān)注
關(guān)注
0文章
49瀏覽量
15587
原文標(biāo)題:時(shí)序分析基本概念介紹——時(shí)鐘sdc
文章出處:【微信號:IC_Physical_Design,微信公眾號:數(shù)字后端IC芯片設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論