時鐘是每個 FPGA 設計的核心。如果我們正確地設計時鐘架構、沒有 CDC 問題并正確進行約束設計,就可以減少與工具斗爭的時間。
但對于某些應用,我們希望能夠更改某些IP中的時鐘頻率。其中一個例子是在圖像處理管道中,輸出分辨率可以動態變化,從而需要改變像素時鐘。
眾所周知,我們可以在 Zynq SoC 和 Zynq MPSoC 中使用結構時鐘并在運行時更改結構時鐘的頻率。但是,如果我們在 Zynq 或 ZYNQ MPSoC 中使用 FPGA 或 PL,我們仍然可以使用動態配置的時鐘向導在運行時更改頻率。
動態配置時鐘允許我們使用 AXI 接口在運行時更改時鐘頻率。
為了創建一個簡單的示例,我們將實例化PS并將動態配置時鐘IP連接到主 AXI 接口。我們將輸出時鐘連接到 IO 引腳,以便我們可以對其進行觀察并查看頻率的變化。
上面的時鐘是我們打算使用的最大頻率,這樣可以確保時序約束和時序性能正確。下圖是我們這次demo的最終設計。
接下來我們將在 Vitis 中開發軟件,并且將在設計中的 IP 下看到相關驅動及文檔。
開發這個IP的驅動和其他 AXI Lite 接口一樣,需要對IP寄存器空間進行寫入和讀取。
要更改時鐘頻率輸出,我們有兩種選擇。如果只生成一個時鐘,我們可以使用名為 SetRate 的函數。該函數將通過AXI Lite總線傳遞到IP中,IP會給出我們所需的頻率輸出,并計算必要的分頻器、乘法器和相位參數實現所需的輸出頻率。
然而,如果我們有多個時鐘,那么我們需要分別計算這些寄存器的值并單獨更新時鐘寄存器(每個時鐘有兩個寄存器)。
這里有個注意點就是在進行時鐘更改前最好等待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; }
當然,我們也可以使用類似的方法,通過將時鐘頻率降低來實現不同功耗模式下 FPGA 的功耗,從而實現降低功耗的功能。
審核編輯:劉清
-
FPGA設計
+關注
關注
9文章
428瀏覽量
26632 -
寄存器
+關注
關注
31文章
5363瀏覽量
121194 -
CDC
+關注
關注
0文章
57瀏覽量
17857 -
AXI總線
+關注
關注
0文章
66瀏覽量
14315 -
動態時鐘
+關注
關注
0文章
5瀏覽量
6970
原文標題:【Vivado那些事兒】動態時鐘的使用
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
動態時鐘配置下的SoC低功耗管理詳解
![<b class='flag-5'>動態</b><b class='flag-5'>時鐘</b>配置下的SoC低功耗管理詳解](https://file.elecfans.com/web1/M00/45/FF/o4YBAFqBXxiAIXH5AAAWGmpzyxE194.gif)
12864帶字庫串口怎么顯示時鐘
TMS320C2809 SPI 動態時鐘速率是多少?
動態時鐘配置下的SoC低功耗管理 電子資料
低功耗MCU動態時鐘分析與應用
![低功耗MCU<b class='flag-5'>動態</b><b class='flag-5'>時鐘</b>分析與應用](https://file1.elecfans.com//web2/M00/A7/01/wKgZomUMQcGAPF6XAAARwub7kQ4624.jpg)
動態時鐘停止重啟太快,可通過編程LPDDR2控制器解決
Linux時間子系統之一:動態時鐘框架(CONFIG_NO_HZ、tickless)
基于51單片機數碼管動態時鐘電路圖原理圖
Flash淘汰導致Fliqlo崩潰的修復方法
藍橋杯51單片機之數碼管從點亮到動態時鐘的實現【單片機開發初學者必掌握】
![藍橋杯51單片機之數碼管從點亮到<b class='flag-5'>動態</b><b class='flag-5'>時鐘</b>的實現【單片機開發初學者必掌握】](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FPGA設計中動態時鐘的使用方法
![FPGA設計中<b class='flag-5'>動態</b><b class='flag-5'>時鐘</b>的使用方法](https://file1.elecfans.com/web2/M00/8C/8C/wKgaomSuGzSAAKe8AAPXXjMMe_g111.jpg)
評論