時鐘是每個 FPGA 設計的核心。如果我們正確地設計時鐘架構、沒有 CDC 問題并正確進行約束設計,就可以減少與工具斗爭的時間。
但對于某些應用,我們希望能夠更改某些IP中的時鐘頻率。其中一個例子是在圖像處理管道中,輸出分辨率可以動態(tài)變化,從而需要改變像素時鐘。
眾所周知,我們可以在 Zynq SoC 和 Zynq MPSoC 中使用結構時鐘并在運行時更改結構時鐘的頻率。但是,如果我們在 Zynq 或 ZYNQ MPSoC 中使用 FPGA 或 PL,我們?nèi)匀豢梢允褂脛討B(tài)配置的時鐘向?qū)г谶\行時更改頻率。
動態(tài)配置時鐘允許我們使用 AXI 接口在運行時更改時鐘頻率。

為了創(chuàng)建一個簡單的示例,我們將實例化PS并將動態(tài)配置時鐘IP連接到主 AXI 接口。我們將輸出時鐘連接到 IO 引腳,以便我們可以對其進行觀察并查看頻率的變化。

上面的時鐘是我們打算使用的最大頻率,這樣可以確保時序約束和時序性能正確。下圖是我們這次demo的最終設計。

接下來我們將在 Vitis 中開發(fā)軟件,并且將在設計中的 IP 下看到相關驅(qū)動及文檔。
開發(fā)這個IP的驅(qū)動和其他 AXI Lite 接口一樣,需要對IP寄存器空間進行寫入和讀取。
要更改時鐘頻率輸出,我們有兩種選擇。如果只生成一個時鐘,我們可以使用名為 SetRate 的函數(shù)。該函數(shù)將通過AXI Lite總線傳遞到IP中,IP會給出我們所需的頻率輸出,并計算必要的分頻器、乘法器和相位參數(shù)實現(xiàn)所需的輸出頻率。
然而,如果我們有多個時鐘,那么我們需要分別計算這些寄存器的值并單獨更新時鐘寄存器(每個時鐘有兩個寄存器)。
這里有個注意點就是在進行時鐘更改前最好等待IP鎖定到之前的頻率后再進行新操作。
更改頻率的代碼還是比較簡單的,如下:
#include#include"platform.h" #include"xil_printf.h" #include"xclk_wiz.h" XClk_WizClkWiz_Dynamic; XClk_Wiz_Config*CfgPtr_Dynamic; #defineXCLK_WIZARD_DEVICE_IDXPAR_CLK_WIZ_0_DEVICE_ID #defineXCLK_US_WIZ_RECONFIG_OFFSET0x0000025C #defineCLK_LOCK1 intmain() { init_platform(); intStatus; print("HelloWorld "); CfgPtr_Dynamic=XClk_Wiz_LookupConfig(XCLK_WIZARD_DEVICE_ID); XClk_Wiz_CfgInitialize(&ClkWiz_Dynamic,CfgPtr_Dynamic, CfgPtr_Dynamic->BaseAddr); while(1){ XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, XCLK_WIZ_REG25_OFFSET,0); XClk_Wiz_SetRate(&ClkWiz_Dynamic,10); XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, XCLK_US_WIZ_RECONFIG_OFFSET, (XCLK_WIZ_RECONFIG_LOAD| XCLK_WIZ_RECONFIG_SADDR)); Status=XClk_Wiz_WaitForLock(&ClkWiz_Dynamic); usleep(10000000); XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, XCLK_WIZ_REG25_OFFSET,0); XClk_Wiz_SetRate(&ClkWiz_Dynamic,14); XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, XCLK_US_WIZ_RECONFIG_OFFSET, (XCLK_WIZ_RECONFIG_LOAD| XCLK_WIZ_RECONFIG_SADDR)); Status=XClk_Wiz_WaitForLock(&ClkWiz_Dynamic); usleep(10000000); } cleanup_platform(); return0; }
當然,我們也可以使用類似的方法,通過將時鐘頻率降低來實現(xiàn)不同功耗模式下 FPGA 的功耗,從而實現(xiàn)降低功耗的功能。


審核編輯:劉清
-
FPGA設計
+關注
關注
9文章
429瀏覽量
28010 -
寄存器
+關注
關注
31文章
5590瀏覽量
129100 -
CDC
+關注
關注
0文章
58瀏覽量
18512 -
AXI總線
+關注
關注
0文章
68瀏覽量
14719 -
動態(tài)時鐘
+關注
關注
0文章
5瀏覽量
7063
原文標題:【Vivado那些事兒】動態(tài)時鐘的使用
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
動態(tài)時鐘配置下的SoC低功耗管理詳解
12864帶字庫串口怎么顯示時鐘
TMS320C2809 SPI 動態(tài)時鐘速率是多少?
請問怎樣平滑無誤地實現(xiàn)時鐘切換?
動態(tài)時鐘配置下的SoC低功耗管理 電子資料
低功耗MCU動態(tài)時鐘分析與應用
動態(tài)時鐘停止重啟太快,可通過編程LPDDR2控制器解決
Linux時間子系統(tǒng)之一:動態(tài)時鐘框架(CONFIG_NO_HZ、tickless)
基于51單片機數(shù)碼管動態(tài)時鐘電路圖原理圖
藍橋杯51單片機之數(shù)碼管從點亮到動態(tài)時鐘的實現(xiàn)【單片機開發(fā)初學者必掌握】
FPGA設計中動態(tài)時鐘的使用方法

動態(tài)時鐘的使用
評論