xilinx FPGA時鐘二選一

2021-08-21 18:55:48 字數 1322 閱讀 3187

通常xilinx fpga時鐘二選一用如下原語實現,其中s為時鐘選擇輸入,i0和i1為兩路時鐘輸入,o為一路時鐘輸出。

bufgmux #(

)bufgmux_inst (

.o(o),   // 1-bit output: clock output

.i0(i0), // 1-bit input: clock input (s=0)

.i1(i1), // 1-bit input: clock input (s=1)

.s(s)    // 1-bit input: clock select

);bufgmux類似assign clkout = sel ? clkin1 : clkin0;這樣乙個功能,但是為什麼不直接用assign語句呢?

因為用assign作二選一的話,會用到邏輯資源裡的選擇器,時鐘訊號會偏離全域性時鐘樹進入選擇器,這樣可能會造成一些問題。

對於低速時鐘可以考慮使用assign作切換,但是不建議這麼做。高速時鐘切換需要使用原語。在vivado開發環境下,如果使用到時鐘二選一的場景,如何對時鐘進行約束有如下說明。

通常來講,時鐘二選一之後會驅動部分時序元件,也就是兩個時鐘具有重複時鐘路徑。如下圖的例子。

clk125 和 clk250 是 clkcore_buf 的兩個輸入時鐘,這兩個時鐘經過bufgctrl(在xilinx 7系列fpga中,直接使用bufgmux會消耗乙個bufgctrl資源)後有重複時鐘路徑,針對這兩個時鐘做如下約束:

create_generated_clock -name clk125_bufgctrl \

-divide_by 1 [get_pins bufgctrl_i/o] \

-source [get_ports bufgctrl_i/i0]

create_generated_clock -name clk250_bufgctrl \

-divide_by 1 [get_pins bufgctrl_i/o] \

-source [get_ports bufgctrl_i/i1] \

-add -master_clock clk250

set_clock_groups –physically_exclusive \

–group clk125_bufgctrl \

–group clk250_bufgctrl

在clkcore_buf 的輸出端上建立兩個重疊的衍生鐘,並將其時鐘關係約束為-physically_exclusive表示不可能同時

通過。按照我的理解,頻率稍高的一路時鐘需要約束為-master_clock

vue iview 表單二選一必填校驗

formquery model formquery rules rulequery inline label width 110 8 商品2編碼 prop jdskuid text v model.trim formquery.jdskuid placeholder 根據商品2編號查詢 input ...

C OS 的中斷和時鐘(二)

3.2 c os 的時鐘 週期性訊號 用硬體定時器產生乙個週期為毫秒級的週期性中斷來實現系統時鐘。產生的中斷的中斷服務程式為 ostickisr 組合語言 通過呼叫 時鐘節拍服務函式 ostimetick 來完成系統在每個時鐘節拍需要的工作。最小的時鐘單位 是兩次中斷之間相間隔的時間,稱之為 時鐘節...

Quartus二選一多路選擇器

一 資料選擇器的基本原理 資料選擇器是指經過選擇,把多個通道的資料傳送到唯一的公共資料通道上去,實現資料選擇功能的邏輯電路稱為資料選擇器。它的示意圖如下 資料選擇器傳送資料過程中,能夠根據需要將其中任意一路選擇出來的電路,叫做資料選擇器 下圖所示為二選一資料選擇器原理圖,a,b為輸入端,sel為控制...