時(shí)鐘的基礎(chǔ)知識(shí)
數(shù)字設(shè)計(jì)中,“時(shí)鐘”表示在寄存器間可靠地傳輸數(shù)據(jù)所需的參考時(shí)間。Vivado的時(shí)序引擎通過(guò)時(shí)鐘特征來(lái)計(jì)算時(shí)序路徑需求,通過(guò)計(jì)算裕量(Slack)的方法報(bào)告設(shè)計(jì)時(shí)序空余。時(shí)鐘必須有合適的定義,包含如下特性:
-
定義時(shí)鐘樹(shù)的驅(qū)動(dòng)管腳或端口,通常稱(chēng)作根或源點(diǎn)。
-
通過(guò)周期和波形屬性來(lái)描述時(shí)鐘邊沿。
-
周期(period)以ns為單位進(jìn)行設(shè)定,與波形重復(fù)率相關(guān)。
-
波形(waveform)以列表的形式給出,表中包含上升沿和下降沿在周期中的絕對(duì)時(shí)間,以ns為單位。
如下圖給出了兩個(gè)時(shí)鐘Clk0: period=10, waveform={0 5}、Clk1: period=8, waveform = {2 8}。
上述給出的只是時(shí)鐘的理想特征。當(dāng)時(shí)鐘進(jìn)入了FPGA器件,通過(guò)時(shí)鐘樹(shù)傳遞時(shí),時(shí)鐘邊沿會(huì)有延時(shí),通常稱(chēng)作時(shí)鐘網(wǎng)絡(luò)延遲;噪聲或硬件表現(xiàn)會(huì)導(dǎo)致時(shí)鐘隨時(shí)可能發(fā)生變化,通常稱(chēng)作時(shí)鐘不確定性,包括時(shí)鐘抖動(dòng)、相位錯(cuò)位等等。Vivado在時(shí)序分析時(shí)會(huì)考慮這些非理想因素以得到精確的時(shí)序裕量。
Xilinx FPGA器件內(nèi)部有專(zhuān)用的硬件資源,支持大量設(shè)計(jì)時(shí)鐘的使用。通常板子上有一個(gè)外部組件(如有源晶振)產(chǎn)生時(shí)鐘信號(hào),通過(guò)輸入端口進(jìn)入器件內(nèi)部。外部時(shí)鐘可以通過(guò)MMCM、PLL、BUFR等特殊原語(yǔ)生成其它時(shí)鐘,也可以由LUT、寄存器等常規(guī)單元進(jìn)行轉(zhuǎn)換(通常稱(chēng)作門(mén)控時(shí)鐘)。本文將講述如何根據(jù)應(yīng)用情況定義時(shí)鐘。
主時(shí)鐘Primary Clock
主時(shí)鐘通常由兩個(gè)來(lái)源:(1).板級(jí)時(shí)鐘通過(guò)輸入端口進(jìn)入設(shè)計(jì);(2).GT收發(fā)器的輸出管腳(如恢復(fù)時(shí)鐘)。主時(shí)鐘必須與一個(gè)網(wǎng)表對(duì)象相連,該對(duì)象代表了所有時(shí)鐘邊沿的開(kāi)始點(diǎn),并且在時(shí)鐘樹(shù)中向下傳遞。也可以說(shuō),主時(shí)鐘的源點(diǎn)定義了0時(shí)刻,Vivado靠此來(lái)計(jì)算時(shí)鐘延遲和不確定性。
主時(shí)鐘只能通過(guò)create_clock命令來(lái)定義,且必須放在約束的開(kāi)始,這是因?yàn)槠渌鼤r(shí)序約束幾乎都要參考主時(shí)鐘。下面給出兩個(gè)主時(shí)鐘的例子。第一個(gè)例子如下圖所示,采用單端時(shí)鐘輸入:
板級(jí)時(shí)鐘通過(guò)sysclk端口進(jìn)入FPGA,通過(guò)一個(gè)輸入緩沖器和一個(gè)時(shí)鐘緩沖器后到達(dá)寄存器。使用如下命令定義:
-
create_clock -period 10 [get_ports sysclk] #10ns周期,50%占空比,無(wú)相移
-
create_clock -name devclk -period 10 -wavefor {2.5 5} [get_ports sysclk] #板級(jí)時(shí)鐘名稱(chēng)devclk,10ns周期,25%占空比,90°相移
第二個(gè)例子如下圖所示,采用差分時(shí)鐘輸入,這也是高速時(shí)鐘的輸入方式:
上圖中差分時(shí)鐘驅(qū)動(dòng)一個(gè)PLL,定義主時(shí)鐘時(shí)必須只創(chuàng)建差分緩沖器的正極輸入。如果同時(shí)創(chuàng)建了正極、負(fù)極輸入,將會(huì)導(dǎo)致錯(cuò)誤的CDC路徑。如“create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]”。
虛擬時(shí)鐘Virtual Clock
這種類(lèi)型的時(shí)鐘對(duì)于初學(xué)者來(lái)說(shuō)用的可能很少,虛擬時(shí)鐘通常用于設(shè)定輸入和輸出的延遲約束。之所以稱(chēng)為“虛擬”,是因?yàn)檫@種時(shí)鐘在物理上沒(méi)有與設(shè)計(jì)中的任何網(wǎng)表對(duì)象相連。定義時(shí)使用create_clock命令,但無(wú)需指定源對(duì)象。在下列情況需要用到虛擬時(shí)鐘:
-
所有設(shè)計(jì)時(shí)鐘都不是外部器件I/O的參考時(shí)鐘。
-
FPGA的I/O路徑與一個(gè)內(nèi)部生成的時(shí)鐘相關(guān),但是該時(shí)鐘不能合適地通過(guò)對(duì)板級(jí)時(shí)鐘計(jì)時(shí)來(lái)生成(如兩個(gè)周期的比不是整數(shù))。
-
希望為與I/O延遲約束相關(guān)的時(shí)鐘設(shè)定不同的抖動(dòng)和延遲,但是不希望修改內(nèi)部時(shí)鐘的特征。
比如時(shí)鐘clk_virt的周期為10ns,且不與任何網(wǎng)表對(duì)象相連,可以這樣定義“create_clock -name clk_virt –period 10”,沒(méi)有指定objects參數(shù)。注意,虛擬時(shí)鐘必須在使用之前便定義好。
生成時(shí)鐘Generated Clock
生成時(shí)鐘是指在設(shè)計(jì)內(nèi)部由特殊單元(如MMCM、PLL)或用戶(hù)邏輯驅(qū)動(dòng)的時(shí)鐘。生成時(shí)鐘與一個(gè)上級(jí)時(shí)鐘(注:官方稱(chēng)作master clock,為與primary clock作區(qū)分,這里稱(chēng)作上級(jí)時(shí)鐘)相關(guān),其屬性也是直接由上級(jí)時(shí)鐘派生而來(lái)。上級(jí)時(shí)鐘可以是一個(gè)主時(shí)鐘,也可以是另一個(gè)生成時(shí)鐘。
生成時(shí)鐘使用create_generated_clock命令定義,該命令不是設(shè)定周期或波形,而是描述時(shí)鐘電路如何對(duì)上級(jí)時(shí)鐘進(jìn)行轉(zhuǎn)換。這種轉(zhuǎn)換可以是下面的關(guān)系:
-
-
簡(jiǎn)單的頻率分頻
-
簡(jiǎn)單的頻率倍頻
-
頻率倍頻與分頻的組合,獲得一個(gè)非整數(shù)的比例,通常由MMCM或PLL完成
-
相移或波形反相
-
占空比改變
-
上述所有關(guān)系的組合
Vivado計(jì)算生成時(shí)鐘的延遲時(shí),會(huì)追蹤生成時(shí)鐘的源管腳與上級(jí)時(shí)鐘的源管腳之間的所有組合和時(shí)序路徑。某些情況下可能只希望考慮組合邏輯路徑,在命令行后添加-combinational選項(xiàng)即可。
這里先解釋一下本文甚至本系列大量使用的兩個(gè)詞,端口(Port)和管腳(Pin)。端口通常用get_ports命令獲取,管腳使用get_pins命令獲取。二者的含義是不同的,但管腳的范圍更廣泛,比如設(shè)計(jì)中用到的一個(gè)寄存器都有3個(gè)管腳:clk、D和Q。下面給出幾個(gè)定義生成時(shí)鐘的例子:
1.簡(jiǎn)單的2分頻
下圖中,主時(shí)鐘clkin通過(guò)端口進(jìn)入FPGA,使用一個(gè)寄存器REGA對(duì)其2分頻,得到的生成時(shí)鐘clkdiv2驅(qū)動(dòng)其它的寄存器管腳。
可以采用如下兩種方法對(duì)生成時(shí)鐘進(jìn)行約束:
-
#定義主時(shí)鐘,周期10ns,50%占空比
-
create_clock -name clkin -period 10 [get_ports clkin]
-
#約束方法1,主時(shí)鐘作為源點(diǎn)
-
create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 [get_pins REGA/Q]
-
#約束方法2,REGA的始終管腳作為源點(diǎn)
-
create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2 [get_pins REGA/Q]
約束命令中使用**-source選項(xiàng)來(lái)設(shè)定上級(jí)時(shí)鐘,但如上所示,該選項(xiàng)只能設(shè)定為一個(gè)端口或管腳類(lèi)型的網(wǎng)表對(duì)象,不能直接設(shè)置為時(shí)鐘類(lèi)型對(duì)象。上面約束使用-divide_by選項(xiàng)設(shè)置分頻系數(shù),此外還可以使用-edges**選項(xiàng),如下所示:
-
該約束與上面等效
-
create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -eedges {1 3 5} [get_pins REGA/Q]
-edges的參數(shù)為一個(gè)列表,該列表通過(guò)主時(shí)鐘的邊沿來(lái)描述生成時(shí)鐘的波形。列表中的值為主時(shí)鐘邊沿的序號(hào)(注意觀察上圖),由時(shí)鐘上升沿開(kāi)始,定義了生成時(shí)鐘邊沿的時(shí)間點(diǎn)。
2.改變占空比與相移
如果僅需要改變時(shí)鐘的相移,使用**-edge_shift**選項(xiàng)可以正向或反向設(shè)定每一個(gè)生成時(shí)鐘波形的相移量。注意,-edge_shift選項(xiàng)不能與-devide_by、-multiply_by、-invert選項(xiàng)同時(shí)使用。下圖中上級(jí)時(shí)鐘為clkin,進(jìn)入mmcm0單元,產(chǎn)生一個(gè)25%占空比、相移90°的時(shí)鐘:
可以采用如下方法對(duì)生成時(shí)鐘進(jìn)行約束。使用上級(jí)時(shí)鐘的1、2、3標(biāo)號(hào)邊沿(即0ns、5ns、10ns)定義生成時(shí)鐘,為了得到預(yù)期波形,1和3標(biāo)號(hào)邊沿要分別移動(dòng)2.5ns,得到2.5ns、5ns、12.5ns的波形。
-
#定義主時(shí)鐘,周期10ns,50%占空比
-
create_clock -name clkin -period 10 [get_ports clkin]
-
#定義生成時(shí)鐘,周期10ns,25%占空比,90°相移
-
create_generated_clock -name clkshifit -source [get_pins mmcm0/CLKIN] -edges {1 2 3} -edge_shift {2.5 0 2.5} [get_pins mmcm0/CLKOUT]
3.同時(shí)倍頻與分頻
這種情況通常用于定義MMCM或PLL的輸出,一般使用這些IP核時(shí)會(huì)自動(dòng)創(chuàng)建相應(yīng)約束。考慮上例中的圖,假設(shè)MMCM將上級(jí)時(shí)鐘倍頻到4/3倍,無(wú)法直接倍頻,需要同時(shí)使用-divede_by和-multiply_by選項(xiàng)來(lái)實(shí)現(xiàn):
-
create_clock -name clkin -period 10 [get_ports clkin] #定義主時(shí)鐘
-
#定義生成時(shí)鐘,4/3倍頻
-
create_generated_clock -name clk43 -source [get_pins mmcm0/CLKIN] -multiply_by 4 -divide_by 3 [get_pins mmcm0/CLKOUT]
4.僅通過(guò)組合路徑追蹤上級(jí)時(shí)鐘
前面簡(jiǎn)單介紹了-combinational選項(xiàng)的使用,為了更好理解,這里舉一個(gè)具體例子。下圖中,上級(jí)時(shí)鐘同時(shí)傳遞到寄存器和多路選擇器中,寄存器對(duì)時(shí)鐘進(jìn)行2分頻。多路選擇器從寄存器的2分頻時(shí)鐘和上級(jí)時(shí)鐘中選擇一個(gè)作為生成時(shí)鐘輸出。
顯而易見(jiàn),從上級(jí)時(shí)鐘到生成時(shí)鐘有兩條路徑,一條為時(shí)序路徑,一條為組合路徑。如果我們只希望考慮組合路徑上的延遲時(shí),定義生成時(shí)鐘時(shí)就需要使用-combinational選項(xiàng)。
自動(dòng)生成時(shí)鐘
這種類(lèi)型時(shí)鐘算是生成時(shí)鐘的一種特例,“自動(dòng)”是指在已經(jīng)定義了上級(jí)時(shí)鐘的情況下,Vivado會(huì)自動(dòng)為時(shí)鐘管理單元CMBs(Clock Modifying Blocks)的輸出管腳創(chuàng)建約束。官方稱(chēng)作Automatically Derived Clocks或Auto-generated Clock。
7系列FPGA的CMB單元包括MMCM、PLL、BUFR、PHASER;UltraScale系列FPGA的CMB單元種類(lèi)與數(shù)量更多,這里不陳列。如果約束中已經(jīng)存在用戶(hù)在某一網(wǎng)表對(duì)象上定義的時(shí)鐘,則不會(huì)創(chuàng)建相同對(duì)象上的自動(dòng)生成時(shí)鐘。
下面給出一個(gè)具體例子。下圖中上級(jí)時(shí)鐘clkin驅(qū)動(dòng)clkip/mmcm0單元的CLKIN輸入,該單元是一個(gè)MMCME2資源的實(shí)例。則自動(dòng)生成時(shí)鐘的定義源點(diǎn)為clkip/mmcm0/CLKOUT,頂層與此源點(diǎn)連接的網(wǎng)絡(luò)名為clkip/cpuClk,自動(dòng)生成時(shí)鐘的名字便是cpuClk。
如上所述,Vivado會(huì)自動(dòng)創(chuàng)建自動(dòng)生成時(shí)鐘的名稱(chēng)(Name),如果兩個(gè)名稱(chēng)發(fā)生沖突也會(huì)自動(dòng)添加后綴,如usrclk、usrclk_1等等。Vivado也支持對(duì)已經(jīng)創(chuàng)建好的自動(dòng)生成時(shí)鐘重新命名,但很少用到,這里不做介紹。
時(shí)鐘組Clock Group
很多初學(xué)者應(yīng)該也沒(méi)有接觸過(guò)時(shí)鐘組這個(gè)概念。默認(rèn)情況下,Vivado會(huì)測(cè)量設(shè)計(jì)中所有時(shí)鐘之間的路徑時(shí)序。添加如下兩種約束可以控制該功能:
-
set_clock_groups:建立時(shí)鐘組,Vivado不會(huì)對(duì)不同時(shí)鐘組的時(shí)鐘之間進(jìn)行時(shí)序分析。
-
set_false_path:將兩個(gè)時(shí)鐘之間的路徑設(shè)置為false path后,不會(huì)對(duì)該路徑進(jìn)行任何時(shí)序分析。
劃分時(shí)鐘組通常有兩個(gè)依據(jù):(1).原理圖或時(shí)鐘網(wǎng)絡(luò)報(bào)告中的時(shí)鐘樹(shù)拓?fù)鋱D,判斷哪些時(shí)鐘不應(yīng)該放在一起做時(shí)序分析;(2).時(shí)鐘交互報(bào)告查看兩個(gè)時(shí)鐘間存在的約束,判斷它們是否有共享的主時(shí)鐘(代表是否有已知的相位關(guān)系)或者是否有公共周期。
但要明白,我們?cè)O(shè)定時(shí)鐘組的目的還是為了保證設(shè)計(jì)在硬件中能正常工作,因此我們必須確保這些忽略了時(shí)序分析的路徑有合適的再同步電路或異步數(shù)據(jù)傳輸協(xié)議。根據(jù)時(shí)鐘間的關(guān)系,可以做如下分類(lèi):
-
同步時(shí)鐘:即兩個(gè)時(shí)鐘間有可預(yù)知的相對(duì)相位,通常它們的時(shí)鐘樹(shù)源自網(wǎng)表中的同一個(gè)根,且有一個(gè)公共周期。
-
異步時(shí)鐘:兩個(gè)時(shí)鐘間有無(wú)法預(yù)知的相對(duì)相位。比如兩個(gè)獨(dú)立的晶振信號(hào)通過(guò)兩個(gè)輸入端口進(jìn)入FPGA中,生成兩個(gè)時(shí)鐘。由于兩個(gè)主時(shí)鐘沒(méi)有明確的相位關(guān)系,兩個(gè)生成時(shí)鐘間便是異步的。
-
不可擴(kuò)展時(shí)鐘:官方稱(chēng)作Unexpandable Clocks,是指時(shí)序引擎在1000個(gè)周期內(nèi)無(wú)法判斷兩個(gè)時(shí)鐘是否有公共周期。這種情況通常發(fā)生在兩個(gè)時(shí)鐘周期比是一個(gè)特殊的分?jǐn)?shù),比如一個(gè)主時(shí)鐘通過(guò)MMCM生成一個(gè)周期為5.125ns的時(shí)鐘clk1和一個(gè)周期為6.666ns的時(shí)鐘clk2,盡管它們?cè)跁r(shí)鐘樹(shù)的根上有一個(gè)確定的相位關(guān)系,但是在1000個(gè)周期內(nèi)時(shí)鐘上升沿?zé)o法再次對(duì)齊。
1.異步時(shí)鐘組
同步時(shí)鐘可以安全地進(jìn)行時(shí)序分析。異步時(shí)鐘和不可擴(kuò)展時(shí)鐘雖然通過(guò)時(shí)序分析也會(huì)得到一個(gè)裕量值,但這個(gè)值不可作為可靠結(jié)果。從這個(gè)角度出發(fā),不可擴(kuò)展時(shí)鐘也可以視作一種特殊的異步時(shí)鐘。這就需要通過(guò)設(shè)置時(shí)鐘組來(lái)忽略異步時(shí)鐘的時(shí)序路徑上的時(shí)序分析。
這里舉個(gè)例子,一個(gè)主時(shí)鐘clk0通過(guò)MMCM生成兩個(gè)時(shí)鐘usrclk和itfclk;另一個(gè)主時(shí)鐘clk1通過(guò)另一個(gè)MMCM生成兩個(gè)時(shí)鐘clkrx和clktx。用如下命令創(chuàng)建異步時(shí)鐘組:
-
set_clock_groups -name async_clk0_clk1 -asynchronous -group {clk0 usrclk itfclk} -group {clk1 clkrx clktx}
-
#如果時(shí)鐘名稱(chēng)事先不知道,可以用如下寫(xiě)法
-
set_clock_groups -name async_clk0_clk1 -asynchronous -group [get_clocks -include_generated_clocks clk0] -group [get_clocks -include_generated_clocks clk1]
2.互斥時(shí)鐘組
下面再介紹另一種會(huì)用到時(shí)鐘組的情況。某些設(shè)計(jì)會(huì)有幾個(gè)操作模式,不同操作模式使用不同的時(shí)鐘。這些時(shí)鐘通常由專(zhuān)用的時(shí)鐘選擇器進(jìn)行選擇,如BUFGMUX和BUFGCTRL,最好不要用LUT作時(shí)鐘選擇器。
這些單元都是組合邏輯單元,Vivado會(huì)將所有輸入傳遞到輸出。在Vivado IDE中,幾個(gè)時(shí)序時(shí)鐘可以同時(shí)存在時(shí)鐘樹(shù)上,方便地同時(shí)報(bào)告所有操作模式。但是在硬件中這是不可能的,它們之間是互斥的,這些時(shí)鐘便稱(chēng)作互斥時(shí)鐘。
舉個(gè)例子,一個(gè)MMCM實(shí)例生成的兩個(gè)時(shí)鐘clk0和clk1,與一BUFGMUX實(shí)例clkmux相連,clkmux的輸出驅(qū)動(dòng)設(shè)計(jì)時(shí)鐘樹(shù)。默認(rèn)情況下,雖然clk0和clk1共享同一時(shí)鐘樹(shù),且不能同時(shí)存在,Vivado還是會(huì)分析clk0和clk1之間的路徑。這個(gè)問(wèn)題要通過(guò)設(shè)置互斥時(shí)鐘組來(lái)解決,達(dá)到禁止分析這兩個(gè)時(shí)鐘間路徑 的目的。約束如下:
set_clock_groups -name exclusive_clk0_clk1 -physically_exclusive -group clk0 -group clk1
在ASIC工藝中使用-physically_exclusive和-logically_exclusive代表不同的信號(hào)完整性分析模式,但對(duì)于Xilinx FPGA而言,二者是等價(jià)的,都可以使用。
時(shí)鐘延遲、抖動(dòng)與不確定性
本文的上述約束可以說(shuō)都是對(duì)時(shí)鐘的理想特征進(jìn)行約束,為了更精確地進(jìn)行時(shí)序分析,設(shè)計(jì)者還必須設(shè)定一些與運(yùn)行環(huán)境相關(guān)的可預(yù)測(cè)變量和隨機(jī)變量。這部分也稱(chēng)作時(shí)鐘的不確定性特征。
1.時(shí)鐘延遲latency
經(jīng)過(guò)板子上和FPGA器件內(nèi)部的傳輸,時(shí)鐘邊沿到達(dá)目的地后會(huì)有一個(gè)確定的延遲。這個(gè)延遲可以分為兩個(gè)部分看待:
網(wǎng)絡(luò)延遲:也稱(chēng)作插入延遲,指再FPGA內(nèi)部傳輸帶來(lái)的延遲。Vivado會(huì)自動(dòng)分析計(jì)算該延遲,布線(xiàn)過(guò)程前只是一個(gè)粗略的估計(jì),布線(xiàn)后便可以得到一個(gè)精確的值。對(duì)于生成時(shí)鐘,包含其本身的網(wǎng)絡(luò)延遲和上級(jí)時(shí)鐘的網(wǎng)絡(luò)延遲兩部分。
源端延遲:通常指FPGA器件外,時(shí)鐘進(jìn)入源點(diǎn)前的傳輸延遲,這部分延遲與PCB設(shè)計(jì)相關(guān),需要用set_clock_latency命令進(jìn)行約束。
下面給出一個(gè)約束源端時(shí)鐘延遲的例子:
#設(shè)定最小源端延遲值
set_clock_latency -source -early 0.2 [get_clocks sysclk]
#設(shè)定最大源端延遲值
set_clock_latency -source -late 0.5 [get_clocks sysclk]
2.時(shí)鐘抖動(dòng)jitter
對(duì)于ASIC器件來(lái)說(shuō),時(shí)鐘抖動(dòng)通常代表了時(shí)鐘不確定性特征;但對(duì)于Xilinx FPGA而言,抖動(dòng)屬性被當(dāng)作可預(yù)測(cè)變量看待。抖動(dòng)有的需要單獨(dú)設(shè)置,有的在時(shí)序分析過(guò)程中自動(dòng)計(jì)算。抖動(dòng)分為兩種:
輸入抖動(dòng):指實(shí)際時(shí)鐘邊沿與理想時(shí)鐘邊沿到達(dá)時(shí)刻之間的差值,使用set_iput_jitter命令為每個(gè)主時(shí)鐘單獨(dú)設(shè)置輸入抖動(dòng)。但是不能直接為生成時(shí)鐘設(shè)置輸入抖動(dòng),這部分由工具自動(dòng)計(jì)算,如果(1).生成時(shí)鐘由一個(gè)組合或時(shí)序單元?jiǎng)?chuàng)建,生成時(shí)鐘的抖動(dòng)與上級(jí)時(shí)鐘相同;(2).生成時(shí)鐘由 MMCM或PLL驅(qū)動(dòng),生成時(shí)鐘的抖動(dòng)為一個(gè)自動(dòng)計(jì)算的值。
系統(tǒng)抖動(dòng):指電源噪聲、板級(jí)噪聲或其它原因引起的整體的抖動(dòng),對(duì)于整個(gè)設(shè)計(jì),使用set_system_jitter命令設(shè)置一個(gè)值即可,會(huì)應(yīng)用到所有時(shí)鐘。
下面給出一個(gè)約束輸入抖動(dòng)的例子:
#主時(shí)鐘傳輸過(guò)程中有±100ps的抖動(dòng)
set_input_jitter [get_clocks -of_objects [get_clocks sysclk]] 0.1
不過(guò),時(shí)鐘抖動(dòng)對(duì)整個(gè)時(shí)鐘不確定性計(jì)算的影響不是太大。計(jì)算時(shí)鐘不確定性時(shí)對(duì)每條路徑都是獨(dú)立的,且主要依賴(lài)于時(shí)鐘拓?fù)浣Y(jié)構(gòu)、路徑上的時(shí)鐘對(duì)、時(shí)鐘樹(shù)上是否存在MMCM/PLL單元等其它因素。
3.附加的時(shí)鐘不確定性
使用set_clock_uncertainty命令可以根據(jù)需要為特定的時(shí)鐘關(guān)系定義附加的時(shí)鐘不確定性,這樣在時(shí)序分析時(shí),可以為設(shè)計(jì)中的某些部分增加額外裕量。
前面文章說(shuō)過(guò)XDC約束帶有順序性,后面的約束會(huì)重寫(xiě)前面的約束。但在這里,時(shí)鐘間的不確定性總是優(yōu)先于單個(gè)時(shí)鐘的不確定性,不管約束順序如何??聪旅娴睦樱?/span>
set_clock_uncertainty 2.0 -from [get_clocks clk1] -to [get_clocks clk2]
set_clock_uncertainty 1.0 [get_clocks clk1]
這里首先約束從clk1到clk2有一個(gè)2ns的時(shí)鐘不確定性,接著又約束clk1有1ns的時(shí)鐘不確定性,但是后面這條約束不會(huì)改動(dòng)從clk1到clk2之間的關(guān)系。
原文標(biāo)題:FPGA學(xué)習(xí)-Vivado時(shí)鐘的約束方法
文章出處:【微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603419 -
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1733瀏覽量
131483 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66539
原文標(biāo)題:FPGA學(xué)習(xí)-Vivado時(shí)鐘的約束方法
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論