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