一、主時鐘create_clock
1.1 定義
主時鐘是來自FPGA芯片外部的時鐘,通過時鐘輸入端口或高速收發(fā)器GT的輸出引腳進入FPGA內(nèi)部。對于賽靈思7系列的器件,主時鐘必須手動定義到GT的輸出,對于Ultrascale和Ultrascale+系列的器件,定時器會自動地接入到GT的輸出。
1.2 約束設(shè)置格式
主時鐘約束使用命令create_clock進行創(chuàng)建,進入Timing Constraints窗口,clocks選擇Create Clock,單擊添加圖標或雙擊Create Clock,進入創(chuàng)建窗口
Create Clock窗口中,Clock name為時鐘約束命名,Source objects設(shè)置約束的對象類型,可以是ports,nets,pin,Waveform設(shè)置波形的形狀,Period為波形周期,Rise at設(shè)置時鐘的上升沿位置,F(xiàn)all at設(shè)置時鐘的下降沿位置。command后面為根據(jù)上述的設(shè)置自動生成對應(yīng)的約束命令。
1.3Add this clock to the existing clock
Add this clock to the existing clock勾選后,對于如果某個對象已創(chuàng)建時序約束,再次創(chuàng)建時將不會將之前的約束覆蓋。
下面兩條約束create_clk1和create_clk2的約束對象source objects都是clk1,約束內(nèi)容不同,未勾選Add this clock to the existing clock時,約束如下
查看時序分析結(jié)果,只有create_clk2的信號,create_clk1已被覆蓋
勾選Add this clock to the existing clock
時序分析報告中,create_clk1和create_clk2都存在
1.4 示例
以時鐘輸入端口為例,時鐘信號周期為10ns,占空比為50%,通過輸入緩沖器和全局時鐘緩沖器BUFG到達寄存器的時鐘輸入端口。
約束命令:create_clock -period 10 [get_ports sysclk]
來自高速收發(fā)器GT的時鐘rxclk,周期為3.33ns,50%的占空比,經(jīng)過時鐘管理單元MMCM,生成不同的分頻時鐘信號,分頻時鐘信號再傳輸?shù)郊拇嫫鳌?/p>
約束命令:create_clock -name rxclk -period 3.33 [get_pins gt0/RXOUTCLK]
1.5 差分信號
約束命令:create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]
差分信號作為主時鐘輸入時,以一個差分信號輸入到PLL的時鐘輸入端口CLKIN1為例,主時鐘必須約束到差分端口的輸入正極(sys_clk_clk_p)
二、生成時鐘generate_clock
2.1 定義
生成時鐘通常來源于設(shè)計內(nèi)部的時鐘管理單元,如MMCM,PLL等,生成時鐘是與主時鐘相關(guān),其來源來自主時鐘或其他生成時鐘。因此,需先定義主時鐘,再定義生成時鐘。優(yōu)點是主時鐘變化時會同步進行變化。
生成時鐘與主時鐘關(guān)系可以是分頻,倍頻,非整數(shù)倍頻率,相移,占空比切換,以及上述關(guān)系的組合。
2.2 格式
在Timing Constraints中,左側(cè)選擇Create Generated Clock,
在Create Generated Clock可以看到生成時鐘的相關(guān)參數(shù)設(shè)置
clock name: 設(shè)置生成時鐘的名稱
Master pin(source):設(shè)置生成時鐘的來源,可以是IO ports或cells pin
Master clock:設(shè)置生成時鐘的源時鐘
Source objects:指定指定生成時鐘的實際對象,可以是I/O ports,cell pins或nets.
Do not override clocks already defined on the same Source object:勾選后,如果Source objects上有其他時鐘約束,將不會被覆蓋,不勾選,則覆蓋原先的約束信息
Derive from source clock waveform:設(shè)置生成時鐘波形與源時鐘的關(guān)系,有頻率相關(guān)和邊沿相關(guān)兩種方式,見2.2.1和2.2.2
2.2.1 by clock frequency
Multiply source clock frequency by:生成時鐘是源時鐘的倍頻關(guān)系,值大于或等于1
Divide source clock frequency by:生成時鐘是源時鐘的分頻關(guān)系,值大于或等于1
Duty cycle:設(shè)置生成時鐘的占空比
Invert the generated clock signal:勾選后對生成信號進行倒置,即高低電平互換,0變1,1變0
下圖設(shè)置的命令為:create_generated_clock -name gen_clk -source [get_ports clk1] -multiply_by 2 -invert -master_clock [get_clocks create_clk1]
2.2.2by clock edges
通過源時鐘的邊沿設(shè)置生成時鐘,以下圖為例。
對應(yīng)的命令為create_generated_clock -name gen_clk -source [get_pins clk_IBUF_BUFG_inst/O] -edges {1 3 4} -edge_shift {2.0 0.0 1.0} -add -master_clock [get_clocks "*"] [get_pins {shiftr_reg[13]/C}]
含義解釋:-edge {1,3,4}即生成時鐘的第1個上升沿位置,第1個下降沿位置,第2個上升沿位置分別對應(yīng)源時鐘的第1,3,4個變化邊沿,-edge_shift的3個值為在源時鐘基礎(chǔ)上的偏移。假設(shè)源時鐘clk周期為10ns,占空比為50%,從0時刻開始,統(tǒng)計了邊沿變化的數(shù)目,-edge {1,3,4}如中間波形所示,對應(yīng)了clk第1,3,4的邊沿;Generate clk即為各個邊沿的偏移值,分別是0+2,10+0,15+1,即為Generate clk的波形。
2.2.3 示例
a)二分頻的生成時鐘實現(xiàn)用寄存器實現(xiàn)
主時鐘周期為10ns,對應(yīng)的約束命令為
create_clock -name clkin -period 10 [get_ports clkin] #創(chuàng)建主時鐘 create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 [get_pins REGA/Q] #創(chuàng)建生成時鐘
b)邊沿生成時鐘
時鐘邊沿設(shè)置生成時鐘,對應(yīng)命令為,由波形可看出生成時鐘的3個邊沿剛好對應(yīng)主時鐘的第1,3,5,因為無偏移,故不需要-edge_shift,
create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -edges {1 3 5} [get_pins REGA/Q]
生成時鐘的波形clkdiv2如下圖所示
c)非整數(shù)倍頻生成時鐘
通過同時設(shè)置倍頻和分頻可以設(shè)置非整數(shù)倍的生成時鐘頻率,如果需要生成一個4/3倍頻的生成時鐘,先用倍頻參數(shù)multiply_by 4,再用分頻參數(shù)divide_by 3。
create_generated_clock -name clk43 -source [get_pins mmcm0/CLKIN] -multiply_by 4 -divide_by 3 [get_pins mmcm0/CLKOUT]
2.2.4 自動生成時鐘
Vivado在某些場景下會根據(jù)已定義的主時鐘自動產(chǎn)生生成時鐘,將生成時鐘約束到時鐘修正塊(CMB:clock modifying blocks)中,CMB可以是MMCM,PLL,BUFR等,在UltraScale器件中,還包括GT_COMMON/GT_CHANNEL/IBUFDS_GTE3,ISERDESE3,BITSLICE_CONTROL / RX*_BITSLICE。
如果用戶在需自動產(chǎn)生生成時鐘的網(wǎng)表對象中設(shè)置了約束,則不會產(chǎn)生生成時鐘。自動產(chǎn)生的生成時鐘是以定義位置連接net的最頂層的部分名來命名。
以下圖連接示例,主時鐘clkin驅(qū)動MMCM實例化為clkip/mmcm0的CLKIN,自動產(chǎn)生的生成時鐘名稱為cpuclk,約束到clkip/mmcm0/CLKOUT
2.2.5重命名生成時鐘
對于自動生成的生成時鐘,可以使用約束對其進行重命名,命令格式如下
new_name:重命名的名稱
source_object:為自動生成時鐘的源對象
source/master_clock:在源對象source_object存在其他時鐘時,必須加上該參數(shù),避免沖突或產(chǎn)生歧義
create_generated_clock -name new_name [-source master_pin] [-master_clock master_clk] source_object
并不是生成時鐘都可以重命名,自動生成時鐘重命名于來源的pin,例如MMCM/PLL的輸出端口,不能重命名于BUFG的輸出端口,并且用戶定義的生成時鐘不能重命名。
-
時序
+關(guān)注
關(guān)注
5文章
389瀏覽量
37353 -
主時鐘
+關(guān)注
關(guān)注
0文章
8瀏覽量
6008
原文標題:時序約束一主時鐘與生成時鐘
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論