在FPGA設(shè)計(jì)中,時(shí)序約束對(duì)于電路性能和可靠性非常重要。在上一篇的文章中,已經(jīng)詳細(xì)介紹了FPGA時(shí)序約束的主時(shí)鐘約束。
本文將重點(diǎn)講解衍生時(shí)鐘約束和時(shí)鐘分組約束設(shè)置,給出詳細(xì)的約束命令和示例介紹。
(相關(guān)資料圖)
衍生時(shí)鐘(Generated Clocks),也叫生成時(shí)鐘,是從FPGA的主時(shí)鐘信號(hào)派生出來的子時(shí)鐘信號(hào)。
這些子時(shí)鐘信號(hào)可以在FPGA內(nèi)部的不同區(qū)域使用,以滿足不同模塊的需求。通常是由MMCM或PLL或由組合邏輯生成的倍、分頻時(shí)鐘信號(hào)。
衍生時(shí)鐘與源時(shí)鐘的關(guān)系如下:
簡(jiǎn)單的頻率分頻簡(jiǎn)單的頻率倍頻頻率倍頻與分頻的組合,獲得一個(gè)非整數(shù)的比例相移或波形反相占空比改變上述所有關(guān)系的組合衍生時(shí)鐘的約束,需要可以在時(shí)鐘樹中加入生成的時(shí)鐘,可以使用create_generated_clock命令來定義衍生時(shí)鐘的時(shí)鐘約束。其語法如下:
create_generated_clock -name < generated_clock_name > \\ -source < master_clock_source_pin_or_port > \\ -multiply_by < mult_factor > \\ -divide_by
參數(shù) | 含義 |
---|---|
-name | 時(shí)鐘名稱 |
-source | 源時(shí)鐘 |
-multiply_by | 相對(duì)于源時(shí)鐘的倍頻系數(shù) |
-divide_by | 相對(duì)于源時(shí)鐘的分頻系數(shù) |
pin_or_port | 物理節(jié)點(diǎn) |
通過create_generated_clock命令,我們就可以非常靈活地定義衍生時(shí)鐘的時(shí)序約束,并將其與主時(shí)鐘相結(jié)合,保證電路的穩(wěn)定性和正確性。
創(chuàng)建時(shí)鐘示例:
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]
衍生時(shí)鐘通常有兩種情況:“FPGA開發(fā)軟件自動(dòng)推導(dǎo)的衍生時(shí)鐘”和“用戶自定義的衍生時(shí)鐘”
對(duì)于FPGA開發(fā)軟件自動(dòng)推導(dǎo)出來的衍生時(shí)鐘,比如MMCM和PLL分頻輸出來的時(shí)鐘,可以不用寫入時(shí)序約束,只需要對(duì)輸入MMCM和PLL的主時(shí)鐘做時(shí)序約束即可。
用戶自定義的衍生時(shí)鐘,通常指的是用戶通過組合邏輯構(gòu)建的分頻時(shí)鐘,這就需要我們自己來寫衍生時(shí)鐘約束。
FPGA電路中除了主時(shí)鐘以外,還有很多其他衍生時(shí)鐘,如DFF的時(shí)鐘、時(shí)鐘分頻器的時(shí)鐘等。
這些時(shí)鐘對(duì)于電路性能和可靠性非常重要。
所以需要將這些衍生時(shí)鐘和主時(shí)鐘分組,并定義它們之間的層次關(guān)系,以確保電路的穩(wěn)定運(yùn)行。
在Vivado中可以使用set_clock_groups命令來定義時(shí)鐘分組。其語法如下:
set_clock_groups -name < group_name > -group < group_type > < async_port_list > < sync_port_list\\ > [-logically\\_exclusive]
參數(shù) | 含義 |
---|---|
-name | 時(shí)鐘分組命名 |
-group | 時(shí)鐘分組的類型 |
aysnc_port_list | 異步端口列表 |
sync_port_list | 同步端口列表 |
-logically_exclusive | 用于指定是否為邏輯獨(dú)立分組 |
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生成有兩個(gè)時(shí)鐘輸入BUFGMUX時(shí),只有一個(gè)時(shí)鐘會(huì)被使用,這時(shí)設(shè)置的時(shí)序約束為:
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]]
本文詳細(xì)介紹了衍生時(shí)鐘約束和時(shí)鐘分組約束,這兩個(gè)是在時(shí)序約束中常見的寫法,大家在學(xué)習(xí)時(shí)序約束時(shí),可以對(duì)照著學(xué)習(xí)理解。
標(biāo)簽: