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