傳統(tǒng)上,使用門控時(shí)鐘是 ASIC 設(shè)計(jì)中降低系統(tǒng)功耗的常見方法。通過門控時(shí)鐘,可在非必要時(shí)阻止整組寄存器的狀態(tài)轉(zhuǎn)換。

圖 1:使用與門進(jìn)行時(shí)鐘門控
在圖 1 中,當(dāng)“gate”信號(hào)設(shè)為低電平時(shí),所有寄存器均關(guān)閉且不消耗動(dòng)態(tài)功耗。
此類編碼風(fēng)格并非總能有效適配 FPGA。原因在于 FPGA 具有先進(jìn)的專用時(shí)鐘資源,其設(shè)計(jì)旨在將時(shí)鐘結(jié)構(gòu)的時(shí)序設(shè)為最佳設(shè)置以避免時(shí)鐘偏差。在該結(jié)構(gòu)中插入門電路可能干擾這些資源。此外,這些時(shí)鐘資源并非無限,因此不同門控時(shí)鐘的數(shù)量過多可能導(dǎo)致 FPGA 設(shè)計(jì)出現(xiàn)問題。

圖 2:時(shí)鐘結(jié)構(gòu)內(nèi)的 LUT
解決這些問題的方法之一是重寫 RTL 代碼以移除門電路。但這涉及大量工作,且在 FPGA 中進(jìn)行原型設(shè)計(jì)時(shí),大多數(shù)情況下不允許更改 RTL 代碼。另一種解決方案是讓綜合工具轉(zhuǎn)換這些門電路,使時(shí)鐘直接驅(qū)動(dòng)寄存器時(shí)鐘管腳,而門控邏輯則轉(zhuǎn)至?xí)r鐘使能管腳。AMD Vivado Design Tool 支持此功能。

圖 3:相同電路完成門控時(shí)鐘轉(zhuǎn)換后的結(jié)果
有必要提醒設(shè)計(jì)者,執(zhí)行此項(xiàng)轉(zhuǎn)換雖有助于工具利用專用時(shí)鐘資源,但現(xiàn)在也會(huì)改用不同的時(shí)鐘使能信號(hào)。這意味著設(shè)計(jì)中將包含更多控制集,從而可能引發(fā)其他影響。
此外,仿真結(jié)果也可能受到影響。以圖 2 和圖 3 為例。在此示例中,時(shí)鐘和門控信號(hào)均為低電平,隨后門控信號(hào)在時(shí)鐘保持低電平期間產(chǎn)生高低脈沖。在圖 3 中這計(jì)為一次時(shí)鐘脈沖,但在圖 4 中則忽略此次脈沖。 應(yīng)謹(jǐn)慎處理,避免此類情況。
控制門控時(shí)鐘
門控時(shí)鐘轉(zhuǎn)換的控制是通過以下三項(xiàng)組合來完成的。XDC 文件中的時(shí)鐘約束、GATED_CLOCK 綜合屬性,以及 gated_clock_conversion 綜合設(shè)置。XDC 文件中的時(shí)鐘約束會(huì)將設(shè)計(jì)中時(shí)鐘的運(yùn)行頻率需求告知工具。其形式如下:
create_clock -period 5 [get_ports clk]
通過使用約束,該工具即可識(shí)別哪些信號(hào)可以轉(zhuǎn)換為直接時(shí)鐘。
GATED_CLOCK 屬性允許用戶直接告訴工具,門控邏輯中的哪個(gè)時(shí)鐘應(yīng)驅(qū)動(dòng)寄存器的時(shí)鐘輸入。 該屬性會(huì)被寫于 RTL 文件內(nèi)。
(* gated_clock = "yes" *) input clk;
gated_clock_conversion 選項(xiàng)用于對(duì)綜合執(zhí)行門控時(shí)鐘轉(zhuǎn)換的方式加以控制。若設(shè)為“off”,則永不轉(zhuǎn)換門控時(shí)鐘。若設(shè)為“on”,那么它將在具有 GATED_CLOCK 屬性的信號(hào)上執(zhí)行門控時(shí)鐘轉(zhuǎn)換。
若設(shè)為“auto”,那么當(dāng)該工具通過 XDC 文件識(shí)別出哪些信號(hào)是設(shè)計(jì)中的真實(shí)時(shí)鐘時(shí),它將執(zhí)行轉(zhuǎn)換。此外,若有多個(gè)可轉(zhuǎn)換的時(shí)鐘,則可使用 GATED_CLOCK 屬性將應(yīng)使用的特定時(shí)鐘告知工具。
當(dāng)該工具能檢測到門控時(shí)鐘并開啟轉(zhuǎn)換功能時(shí),它會(huì)嘗試將該時(shí)鐘與門電路中的邏輯其余部分分離。若能完成此操作,那么該時(shí)鐘將直接驅(qū)動(dòng)寄存器的 C 管腳,其余部分將被分配給寄存器的時(shí)鐘使能邏輯。
執(zhí)行門控時(shí)鐘轉(zhuǎn)換時(shí)需考慮的重點(diǎn)之一是層級(jí)。轉(zhuǎn)換門控時(shí)鐘時(shí),該工具會(huì)將時(shí)鐘與邏輯其余部分分離,并創(chuàng)建新時(shí)鐘和時(shí)鐘使能。若門控時(shí)鐘與新時(shí)鐘驅(qū)動(dòng)的寄存器在相同層級(jí)內(nèi)處于不同層次,且存在保持整個(gè)層級(jí)靜態(tài)的約束(如 DONT_TOUCH、KEEP_HIERARCHY 等),工具將無法轉(zhuǎn)換時(shí)鐘。

圖 4:層級(jí)內(nèi)不同層次的時(shí)鐘門控電路
基礎(chǔ)門電路
最常見的門控時(shí)鐘形式之一是通過基礎(chǔ)門電路(例如,與門)實(shí)現(xiàn)的時(shí)鐘門控。
RTL 代碼示例:
assign my_clk = clk1 & gate1 & gate2;
此代碼通過兩個(gè)不同使能信號(hào)對(duì)時(shí)鐘進(jìn)行門控,細(xì)化視圖如下:

圖 5:含與門的時(shí)鐘門控
綜合時(shí),如果開啟了門控時(shí)鐘轉(zhuǎn)換,并將 gated_clock_conversion 設(shè)置為 auto(自動(dòng)),clk1 占一個(gè)時(shí)鐘周期,或在 clk1 上將 GATED_CLOCK 屬性置位,那么該工具將把 clk1 信號(hào)連接到寄存器的 C 輸入,并把 gate1 和 gate2 信號(hào)連接到觸發(fā)器的 CE 輸入。

圖 6:前一電路的綜合后結(jié)果
或門轉(zhuǎn)換同樣適用。

圖 7:在時(shí)鐘電路中使用或門
上述電路轉(zhuǎn)換后如下所示:

圖8:或門轉(zhuǎn)換結(jié)果
Vivado 綜合工具還可轉(zhuǎn)換比與門及或門更復(fù)雜的門電路。
寄存的門電路
Vivado 還可轉(zhuǎn)換已寄存的門電路。例如,以下編碼風(fēng)格將創(chuàng)建一個(gè)寄存器,供另一個(gè)寄存器用作時(shí)鐘:

若首個(gè) clk 信號(hào)有適當(dāng)約束,那么該工具亦可轉(zhuǎn)換此類門電路。例如:
create_clock -period 5 [get_ports clk]

圖 9:用作時(shí)鐘的寄存器的細(xì)化視圖
轉(zhuǎn)換后如下所示:

圖 10:寄存的門電
時(shí)鐘分頻器(1 位)
Vivado 還可處理更復(fù)雜的門電路,例如,時(shí)鐘分頻器。
此時(shí)鐘的代碼如下所示:

該模塊會(huì)將輸入時(shí)鐘“clk_in”分頻,得到一個(gè)新時(shí)鐘“clk_out_div_2”,速度減半。
這兩個(gè)時(shí)鐘均被指定為模塊輸出。設(shè)計(jì)其余部分會(huì)使用這兩個(gè)時(shí)鐘來驅(qū)動(dòng)設(shè)計(jì)中的時(shí)序元件。

圖 11:時(shí)鐘分頻器
由于此類時(shí)鐘頻率不同,因此需使用生成時(shí)鐘約束。

這些約束會(huì)基于輸入 clk_in 創(chuàng)建另一個(gè)名為 clk_in 的時(shí)鐘,其周期為 2.5 ns。
隨后,它會(huì)創(chuàng)建另一個(gè)新時(shí)鐘,其頻率為 clk_in 一半,其時(shí)鐘源為 div_2_reg 觸發(fā)器的 Q 管腳。
若不轉(zhuǎn)換時(shí)鐘而直接綜合并檢查時(shí)序,會(huì)發(fā)現(xiàn)由 div_2_reg 時(shí)鐘驅(qū)動(dòng)的寄存器路徑的周期均為 5 ns。
命令示例:
report_timing -name timing -to out1_2_reg/D
該工具將返回:

圖 12:無時(shí)鐘門控的 2 分頻時(shí)鐘的時(shí)序報(bào)告
若以時(shí)鐘門控來運(yùn)行相同的設(shè)計(jì),會(huì)引發(fā)問題。
新網(wǎng)表如下所示:

圖 13:時(shí)鐘分頻器上的門控時(shí)鐘轉(zhuǎn)換
如您所見,所有寄存器現(xiàn)在均由原始時(shí)鐘驅(qū)動(dòng),但若在新寄存器上執(zhí)行 report_timing,那么其周期會(huì)從 5 ns 變?yōu)?2.5 ns。原因在于 div_2_reg/Q 的時(shí)鐘路徑不再驅(qū)動(dòng)寄存器時(shí)鐘管腳,導(dǎo)致生成時(shí)鐘命令不再影響時(shí)序分析。
為修復(fù)此問題,Vivado 綜合工具為您提供了錨點(diǎn)以創(chuàng)建新的生成時(shí)鐘約束。 在上圖中,請(qǐng)注意時(shí)鐘線產(chǎn)生分叉,并穿過一個(gè)新的層次,該層次只驅(qū)動(dòng)完成時(shí)鐘轉(zhuǎn)換的寄存器。 此外,綜合 log 日志文件將為您提供該錨點(diǎn)名稱以及需置于 XDC 文件內(nèi)的新命令,以確保輸出的時(shí)序正確無誤。

圖 14:時(shí)鐘分頻器的日志文件
時(shí)鐘分頻器(多個(gè)位使用同一計(jì)數(shù)器)
除時(shí)鐘分頻器外,計(jì)數(shù)器也可用作時(shí)鐘。 例如,一個(gè) 4 位計(jì)數(shù)器可生成 4 個(gè)不同時(shí)鐘。 即,2 分頻、4 分頻、8 分頻和 16 分頻。

這些計(jì)數(shù)器可用于創(chuàng)建時(shí)鐘,具體用法如下:

圖 15:使用計(jì)數(shù)器作為時(shí)鐘生成器
開啟門控時(shí)鐘轉(zhuǎn)換后的運(yùn)行結(jié)果如下:

圖 16:含計(jì)數(shù)器的門控時(shí)鐘轉(zhuǎn)換
請(qǐng)注意,這樣會(huì)為每個(gè)新時(shí)鐘創(chuàng)建饋通錨點(diǎn)。
在 log 日志中也提供了相關(guān)報(bào)告以供后續(xù)運(yùn)行使用。

圖 17:計(jì)數(shù)器充當(dāng)門控時(shí)鐘的日志文件
-
FPGA
+關(guān)注
關(guān)注
1660文章
22411瀏覽量
636280 -
amd
+關(guān)注
關(guān)注
25文章
5684瀏覽量
139947 -
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129969 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1971瀏覽量
134989 -
Vivado
+關(guān)注
關(guān)注
19文章
857瀏覽量
71107
原文標(biāo)題:開發(fā)者分享|AMD Vivado? Design Tool 綜合中的門控時(shí)鐘轉(zhuǎn)換
文章出處:【微信號(hào):gh_2d1c7e2d540e,微信公眾號(hào):XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何使用One Spin檢查AMD Vivado Design Suite Synth的結(jié)果
《電子發(fā)燒友電子設(shè)計(jì)周報(bào)》聚焦硬科技領(lǐng)域核心價(jià)值 第11期:2025.05.12--2025.05.16
來自vivado hls的RTL可以由Design Compiler進(jìn)行綜合嗎?
當(dāng)邏輯門控無法映射到Vivado中的一個(gè)時(shí)鐘區(qū)域時(shí),BUFHCTRL能夠復(fù)制自身并將邏輯映射到多個(gè)時(shí)鐘區(qū)域嗎?
什么是門控時(shí)鐘 門控時(shí)鐘降低功耗的原理
FPGA原型平臺(tái)門控時(shí)鐘自動(dòng)轉(zhuǎn)換
Vivado Design Suite用戶指南:綜合
Vivado Design Suite用戶指南:I/O和時(shí)鐘規(guī)劃
如何在AMD Vivado? Design Tool中用工程模式使用DFX流程?
AMD Vivado Design Suite 2024.1全新推出
U50的AMD Vivado Design Tool flow設(shè)置
AMD Vivado Design Suite 2024.2全新推出
AMD Vivado Design Suite IDE中的設(shè)計(jì)分析簡介
AMD Vivado Design Tool綜合中的門控時(shí)鐘轉(zhuǎn)換
評(píng)論