
在FPGA設計中,時序約束對于電路性能和可靠性非常重要。在上一篇的文章中,已經詳細介紹了FPGA時序約束的主時鐘約束。
本文將重點講解衍生時鐘約束和時鐘分組約束設置,給出詳細的約束命令和示例介紹。
(相關資料圖)
衍生時鐘(Generated Clocks),也叫生成時鐘,是從FPGA的主時鐘信號派生出來的子時鐘信號。
這些子時鐘信號可以在FPGA內部的不同區域使用,以滿足不同模塊的需求。通常是由MMCM或PLL或由組合邏輯生成的倍、分頻時鐘信號。
衍生時鐘與源時鐘的關系如下:
簡單的頻率分頻簡單的頻率倍頻頻率倍頻與分頻的組合,獲得一個非整數的比例相移或波形反相占空比改變上述所有關系的組合衍生時鐘的約束,需要可以在時鐘樹中加入生成的時鐘,可以使用create_generated_clock命令來定義衍生時鐘的時鐘約束。其語法如下:
create_generated_clock -name < generated_clock_name > \\ -source < master_clock_source_pin_or_port > \\ -multiply_by < mult_factor > \\ -divide_by
參數 | 含義 |
---|---|
-name | 時鐘名稱 |
-source | 源時鐘 |
-multiply_by | 相對于源時鐘的倍頻系數 |
-divide_by | 相對于源時鐘的分頻系數 |
pin_or_port | 物理節點 |
通過create_generated_clock命令,我們就可以非常靈活地定義衍生時鐘的時序約束,并將其與主時鐘相結合,保證電路的穩定性和正確性。
創建時鐘示例:
create_clock -name clk_24m -period 10 [get_ports sys_clk]create_generated_clock -name clkdiv2 -source [get_ports clk_24m] -divide_by 2 \\ [get_pins REGA/Q]
衍生時鐘通常有兩種情況:“FPGA開發軟件自動推導的衍生時鐘”和“用戶自定義的衍生時鐘”
對于FPGA開發軟件自動推導出來的衍生時鐘,比如MMCM和PLL分頻輸出來的時鐘,可以不用寫入時序約束,只需要對輸入MMCM和PLL的主時鐘做時序約束即可。
用戶自定義的衍生時鐘,通常指的是用戶通過組合邏輯構建的分頻時鐘,這就需要我們自己來寫衍生時鐘約束。
FPGA電路中除了主時鐘以外,還有很多其他衍生時鐘,如DFF的時鐘、時鐘分頻器的時鐘等。
這些時鐘對于電路性能和可靠性非常重要。
所以需要將這些衍生時鐘和主時鐘分組,并定義它們之間的層次關系,以確保電路的穩定運行。
在Vivado中可以使用set_clock_groups命令來定義時鐘分組。其語法如下:
set_clock_groups -name < group_name > -group < group_type > < async_port_list > < sync_port_list\\ > [-logically\\_exclusive]
參數 | 含義 |
---|---|
-name | 時鐘分組命名 |
-group | 時鐘分組的類型 |
aysnc_port_list | 異步端口列表 |
sync_port_list | 同步端口列表 |
-logically_exclusive | 用于指定是否為邏輯獨立分組 |
create_clock -period 12 -name clk1 [get_ports clk1]create_clock -period 6 -name clk2 [get_ports clk2]set_clock_groups -asynchronous -group clk1 -group clk2
create_clock -name clk1A -period 20.0 [get_ports clk1]create_clock -name clk1B -period 10.0 [get_ports clk1] -addcreate_clock -name clk1C -period 5.0 [get_ports clk1] -add create_clock -name clk2 -period 10.0 [get_ports clk2]set_clock_groups -physically_exclusive -group clk1A -group clk1B -group clk1Cset_clock_groups -asynchronous -group "clk1A clk1B clk1C" -group clk2
通過MMCM生成有兩個時鐘輸入BUFGMUX時,只有一個時鐘會被使用,這時設置的時序約束為:
set_clock_groups -logically_exclusive \\-group [get_clocks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT0]] \\-group [get_clocks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT1]]
本文詳細介紹了衍生時鐘約束和時鐘分組約束,這兩個是在時序約束中常見的寫法,大家在學習時序約束時,可以對照著學習理解。
標簽: