一、主時鐘create_clock
1.1 定義
主時鐘是來自FPGA芯片外部的時鐘,通過時鐘輸入端口或高速收發器GT的輸出引腳進入FPGA內部。對于賽靈思7系列的器件,主時鐘必須手動定義到GT的輸出,對于Ultrascale和Ultrascale+系列的器件,定時器會自動地接入到GT的輸出。
1.2 約束設置格式
主時鐘約束使用命令create_clock進行創建,進入Timing Constraints窗口,clocks選擇Create Clock,單擊添加圖標或雙擊Create Clock,進入創建窗口
Create Clock窗口中,Clock name為時鐘約束命名,Source objects設置約束的對象類型,可以是ports,nets,pin,Waveform設置波形的形狀,Period為波形周期,Rise at設置時鐘的上升沿位置,Fall at設置時鐘的下降沿位置。command后面為根據上述的設置自動生成對應的約束命令。
1.3Add this clock to the existing clock
Add this clock to the existing clock勾選后,對于如果某個對象已創建時序約束,再次創建時將不會將之前的約束覆蓋。
下面兩條約束create_clk1和create_clk2的約束對象source objects都是clk1,約束內容不同,未勾選Add this clock to the existing clock時,約束如下
查看時序分析結果,只有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]
來自高速收發器GT的時鐘rxclk,周期為3.33ns,50%的占空比,經過時鐘管理單元MMCM,生成不同的分頻時鐘信號,分頻時鐘信號再傳輸到寄存器。
約束命令: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 定義
生成時鐘通常來源于設計內部的時鐘管理單元,如MMCM,PLL等,生成時鐘是與主時鐘相關,其來源來自主時鐘或其他生成時鐘。因此,需先定義主時鐘,再定義生成時鐘。優點是主時鐘變化時會同步進行變化。
生成時鐘與主時鐘關系可以是分頻,倍頻,非整數倍頻率,相移,占空比切換,以及上述關系的組合。
2.2 格式
在Timing Constraints中,左側選擇Create Generated Clock,
在Create Generated Clock可以看到生成時鐘的相關參數設置
clock name: 設置生成時鐘的名稱
Master pin(source):設置生成時鐘的來源,可以是IO ports或cells pin
Master clock:設置生成時鐘的源時鐘
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:設置生成時鐘波形與源時鐘的關系,有頻率相關和邊沿相關兩種方式,見2.2.1和2.2.2
2.2.1 by clock frequency
Multiply source clock frequency by:生成時鐘是源時鐘的倍頻關系,值大于或等于1
Divide source clock frequency by:生成時鐘是源時鐘的分頻關系,值大于或等于1
Duty cycle:設置生成時鐘的占空比
Invert the generated clock signal:勾選后對生成信號進行倒置,即高低電平互換,0變1,1變0
下圖設置的命令為: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
通過源時鐘的邊沿設置生成時鐘,以下圖為例。
對應的命令為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個上升沿位置分別對應源時鐘的第1,3,4個變化邊沿,-edge_shift的3個值為在源時鐘基礎上的偏移。假設源時鐘clk周期為10ns,占空比為50%,從0時刻開始,統計了邊沿變化的數目,-edge {1,3,4}如中間波形所示,對應了clk第1,3,4的邊沿;Generate clk即為各個邊沿的偏移值,分別是0+2,10+0,15+1,即為Generate clk的波形。
2.2.3 示例
a)二分頻的生成時鐘實現用寄存器實現
主時鐘周期為10ns,對應的約束命令為
create_clock -name clkin -period 10 [get_ports clkin] #創建主時鐘 create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 [get_pins REGA/Q] #創建生成時鐘
b)邊沿生成時鐘
時鐘邊沿設置生成時鐘,對應命令為,由波形可看出生成時鐘的3個邊沿剛好對應主時鐘的第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)非整數倍頻生成時鐘
通過同時設置倍頻和分頻可以設置非整數倍的生成時鐘頻率,如果需要生成一個4/3倍頻的生成時鐘,先用倍頻參數multiply_by 4,再用分頻參數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在某些場景下會根據已定義的主時鐘自動產生生成時鐘,將生成時鐘約束到時鐘修正塊(CMB:clock modifying blocks)中,CMB可以是MMCM,PLL,BUFR等,在UltraScale器件中,還包括GT_COMMON/GT_CHANNEL/IBUFDS_GTE3,ISERDESE3,BITSLICE_CONTROL / RX*_BITSLICE。
如果用戶在需自動產生生成時鐘的網表對象中設置了約束,則不會產生生成時鐘。自動產生的生成時鐘是以定義位置連接net的最頂層的部分名來命名。
以下圖連接示例,主時鐘clkin驅動MMCM實例化為clkip/mmcm0的CLKIN,自動產生的生成時鐘名稱為cpuclk,約束到clkip/mmcm0/CLKOUT
2.2.5重命名生成時鐘
對于自動生成的生成時鐘,可以使用約束對其進行重命名,命令格式如下
new_name:重命名的名稱
source_object:為自動生成時鐘的源對象
source/master_clock:在源對象source_object存在其他時鐘時,必須加上該參數,避免沖突或產生歧義
create_generated_clock -name new_name [-source master_pin] [-master_clock master_clk] source_object
并不是生成時鐘都可以重命名,自動生成時鐘重命名于來源的pin,例如MMCM/PLL的輸出端口,不能重命名于BUFG的輸出端口,并且用戶定義的生成時鐘不能重命名。
-
時序
+關注
關注
5文章
392瀏覽量
37428 -
主時鐘
+關注
關注
0文章
8瀏覽量
6023
原文標題:時序約束一主時鐘與生成時鐘
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
錯誤時鐘偏移計算導致錯誤時序收斂的解決方案
FPGA主時鐘約束詳解 Vivado添加時序約束方法
![FPGA<b class='flag-5'>主</b><b class='flag-5'>時鐘</b><b class='flag-5'>約束</b>詳解 Vivado添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>方法](https://file1.elecfans.com/web2/M00/89/44/wKgZomR-_LyAXydsAAC63BOnXvo730.jpg)
評論