STA學(xué)習(xí)記錄-時鐘定義 (qq.com)
1 generated clock的定義
generated clock是有master clock衍生而來,master clock指的是由create_clock
定義的clock
當(dāng)基于master clock生成一個新的clock時哑舒,可以將這個新的clock定義為generated clock
舉個栗子植榕,如下圖所示,UFF0的功能是將時鐘CLKP進行二分頻庇配,那么便可以在UFF0的輸出端UFF0/Q定義一個generated clock
CLKP在經(jīng)過UFF0后斩跌,后續(xù)電路的時鐘周期發(fā)生了更改,但STA并不知道后續(xù)電路的時鐘發(fā)生了變化捞慌,更不知道新的clock的周期是多少耀鸦,因此需要定義generated clock,讓STA知道后續(xù)電路的clock已經(jīng)發(fā)生了更改以及新的clock周期是多少
# 創(chuàng)建一個master clock
create_clock -name CLKP 10 \
[get_pins UPLL0/CLKOUT]
# 新的clock被命名為CLKDIV2
# 它的master clock 在UPLL0/CLKOUT處定義
# 新的clock是master clock的二分頻
# 新的clock在UFF0/Q處定義
create_generated_clock \
-name CLKPDIV2 \
-source UPPL0/CLKOUT \
-divide_by 2 \
[get_pins UFF0/Q]
2 generated clock與master clock的區(qū)別
從上面一張圖中可以看到,master clock是由電路推出的袖订,generated clock也是由電路推出的氮帐,也就是說,其實我們是可以在UFF0/Q定義一個master clock的
那為什么我們要將這個clock定義為generated clock而不是master clock
定義master clock會創(chuàng)建一個新的clock domain洛姑,而定義generated clock則不會創(chuàng)建新的clock domain
generated clock與master clock同相上沐,并且不需要進行額外的約束,所以應(yīng)當(dāng)盡量將內(nèi)部的新clock定義為generated clock
master clock的source是時鐘定義點楞艾,generated clock的source是master clock参咙,因此在report中,clock path的起點是master clock的定義點
此外硫眯,master clock的latency也會直接作用于generated clock(也就是說在定義generated clock時不需要再指定latency)
先看一個例子
SYS_CLK由觸發(fā)器的輸出進行門控昂勒,由于觸發(fā)器的輸出可能并不是恒定的,因此處理這種情況的一種方式是在UAND1的輸出端定義一個generated clock舟铜,并且讓新的clock與SYS_CLK相同
created_clock 0.1 [get_ports SYS_CLK]
#創(chuàng)建一個generated clock
#周期與master clock相同
created_generated_clock \
-name CORE_CLK \
-divide_by 1 \
-source SYS_CLK \
[get_pins UAND1/Z]
在來看一個generated clock比master clock頻率高的例子
#定義master clock
create_clock -period 10 \
-waveform {0 5} \
[get_port PCLK]
#定義generated clock
create_generated_clock \
-name PCLKx2 \
-source PCLK \
-multiply_by 2 \
[get_pins UCLKMULTREG/Q]
3 門控單元輸出端的master clock
來看這個例子
UAND2的兩個輸入端分別是兩個不同的clock戈盈,此時我們可以在UAND2的輸出端定義一個master clock,因為UAND2的輸出與這個輸入的clock不大可能具有相位關(guān)系
定義方式如下:
create_clock -name SYS_CLK \
-period 4 \
-waveform {0 2} \
[get_pins UFFSYS/Q]
create_clock -name CORE_CLK \
-period 12 \
-waveform {0 4} \
[get_pins UFFCORE/Q]
create_clock -name MAIN_CLK \
-period 12 \
-waveform {0 2} \
[get_pins UAND2/Z]
4 使用Edge和Edge_shift 定義generated clock
在定義generated clock時谆刨,也可以用-edge
和-edge_shift
的方式定義
先來看一下 什么是edge
看紅色方框框住的內(nèi)容塘娶,edge指的是DCLK的每一個邊沿(既包括posedge,也包括negedge)痊夭,從1開始刁岸,每遇到一個邊沿,增加1
與-waveform{}
相似她我,-edge{}
和-edge_shift{}
中的內(nèi)容也是以上升沿開始的虹曙,即-edge{posedge negedge posedge}
在-edge{}
中,我們給出三個邊沿即可番舆,因為通過這三個邊沿我們就可以確定generated clock的high duration和low duration
-edge {} 和 -edge_shift {}有一個最大的不同點
在-edge {}中酝碳,三個參數(shù)指的是上圖紅色框中的邊沿數(shù)
而在-edge_shift {}中,三個參數(shù)指的是藍色框框柱的內(nèi)容恨狈,也就是時間
接下來看幾個例子
#創(chuàng)建master clock
create_clock 2 [get_ports DCLK]
#創(chuàng)建一個generated clock
#DCLKDIV2的posedge在DCLK的第2個邊沿
#DCLKDIV2的negedge在DCLK的第4個邊沿
#DCLKDIV2的下一個posedge在DCLK的第6個邊沿
create_generated_clock \
-name DCLKDIV2 \
-edges {2 4 6} \
-source DCLK \
[get_pins UBUF2/Z]
#與上面相似
create_generated_clock \
-name PH0CLK \
-edges {3 4 7} \
-source DCLK \
[get_pins UAND0/Z]
create_generated_clock \
-name PH1CLK \
-edges {1 2 5} \
-source DCLK \
[get_pins UAND1/Z]
對應(yīng)的波形圖如下
前面提到疏哗,-edge {}中的第一個參數(shù)是上升沿,那么如果generated clock的第一個邊沿是下降沿禾怠,那么則需要進行推斷
比如下面定義的generated clock
create_generated_clock \
-name G3CLK \
-edges {5 7 10} \
-source DCLK \
[get_pins UAND0/Z]
在這個例子中返奉,可以推斷到,high duration有兩個邊沿的時間吗氏,low duration有3個邊沿時間
那么可以推斷在邊沿5之前有一個negedge芽偏,并且這個negedge出現(xiàn)在邊沿2
波形圖如下
下面我們引入-edge_shift {}
# master clock
create_clock -period 10 \
-waveform {0 5} \
[get_ports MIICLK]
# 只有 -edge {}
create_generated_clock \
-name MIICLKDIV2 \
-source MIICLK \
-edges {1 3 5} \
[get_pins UMIICLKREG/Q]
# 帶有 -edge_shift {}
create_generated_clock \
-name MIIDIV2 \
-source MIICLK \
-edges {1 1 5} \
-edge_shift {0 5 0} \
[get_pins UMIIDIV/Q]
只有-edge {}
的分析與上面一致
在前文提到,-edge_shift {}
中的三個參數(shù)弦讽,單位是時間
那么在這個例子中-edge_shift {0 5 0}
意思是污尉,generated clock的第一個posedge便宜0ns,第一個negedge偏移5ns,第二個posedge偏移0ns
結(jié)合-edge {}
的設(shè)置和master clock的定義十厢,可以推斷generated clock的第一個posedge出現(xiàn)在0ns捂齐,第一個negedge出現(xiàn)在5ns蛮放,第二個posedge出現(xiàn)在20ns
如下圖所示
5 invert選項
-invert
選項就是給generated clock加一個反相器,電路圖如下圖所示
對應(yīng)的generated clock波形也是進行取反奠宜,比如下面這個例子
create_clock -period 10 [get_ports CLK]
create_generated_clock \
-name NCLKDIV2 \
-divide_by 2 \
-invert \
-source CLK \
[get_pins UINVQ/Z]
對應(yīng)波形如下