門控時鐘
當(dāng)寄存器組的輸出端沒有驅(qū)動或沒有變化時,可以關(guān)掉寄存器組的時鐘來減少動態(tài)功耗,此謂門控時鐘 (Clock Gating, CG) 技術(shù)。
最簡單的一個帶 EN 端的 D 觸發(fā)器的 Verilog 邏輯描述如下:
always @(posedge CLK)
if (EN)
Q <= D ;
當(dāng)不采用門控時鐘結(jié)構(gòu)時,DC 綜合時會在觸發(fā)器的輸入端增加為帶反饋端的多路選擇器電路,如下圖 (1) 所示。
當(dāng)采用門控時鐘結(jié)構(gòu)時,DC 綜合時僅會在觸發(fā)器的時鐘端增加一個時鐘門控單元 (CG cell),而沒有多路選擇器結(jié)構(gòu),如下圖 (2) 所示。
當(dāng)多個寄存器組共用一個控制端時,結(jié)構(gòu)上的優(yōu)化尤為明顯,如下圖所示:
綜上所述,門控時鐘的優(yōu)點(diǎn)有:
(1) 寄存器時鐘端翻轉(zhuǎn)率降低,動態(tài)功耗降低。
(2) 時鐘樹網(wǎng)絡(luò)開關(guān)率降低,動態(tài)功耗降低。
(3) CG 扇出越大,結(jié)構(gòu)上節(jié)省的選擇器越多,硬件資源消耗越少。
(4) 相比于 PG (Power Gating),CG 結(jié)構(gòu)相對簡單,在綜合時可自動插入。
產(chǎn)生門控時鐘
產(chǎn)生門控時鐘的條件為:
寄存器組共用同一個時鐘;
寄存器組的控制端都是同步的;
寄存器組都是由同一個變量中推斷而來的。
自動插入 CG
DC 綜合時,使用以下命令與參數(shù),設(shè)計中符合要求的寄存器便會被綜合成帶 CG 結(jié)構(gòu)的觸發(fā)器。
compile_ultra -gate_clk
DC 綜合時插入的 CG 又分為離散的 CG cell 與集成的 CG cell (ICG)。離散的 CG cell 使用 Latch 與基本邏輯門單元組合而成,集成的 CG cell 是工藝廠家提供的一個帶有時鐘門控功能的特殊單元。
DC 中插入離散的 CG 命令為:
# 使用帶 latch 結(jié)構(gòu)的離散的 CG
set_clock_gating_style -sequential_cell latch
# 離散的 CG 中指定具體的 latch cell "lib_cell"
set_clock_gating_style -sequential_cell latch:lib_cell
DC 中插入沒有 Latch 結(jié)構(gòu)的離散 CG 時,命令如下:
# 使用或門邏輯,生成上升沿工作的寄存器的時鐘門控
set_clock_gating_style -sequential_cell none -pos {or}
因?yàn)槭褂门c門生成 CG 時在時鐘上升沿容易出現(xiàn)毛刺,使用或門生成 CG 時在時鐘下降沿容易出現(xiàn)毛刺,所以參數(shù) -pos 一般配合 {or} 使用,-neg 一般配合 {and} 使用。
# 使用與門邏輯,生成下升沿工作的寄存器的時鐘門控
set_clock_gating_style -sequential_cell none -neg {and}
假如 -sequential_cell 與 -pos/-neg 選項(xiàng)同時使用,那么兩個選項(xiàng)指定的 CG 電路結(jié)構(gòu)應(yīng)該保持一致,例如:
set_clock_gating_style -sequential_cell latch -neg {latch and}
set_clock_gating_style -sequential_cell none -neg {and}
DC 中插入 ICG 時,命令如下:
# 使用集成的 CG cell
set_clock_gating_style -negative_edge_logic {integrated}
# 指定使用具體的集成 CG cell "lib_cell"
set_clock_gating_style -negative_edge_logic {integrated:lib_cell}
手動插入 CG
如果設(shè)置了自動產(chǎn)生時鐘門控(-gate_clk),DC 綜合時會對 RTL 設(shè)計中符合要求的寄存器進(jìn)行時鐘門控。但如果在 RTL 設(shè)計中,人為的編寫時鐘門控邏輯,DC 對此不會插入 CG ,如以下 Verilog 描述。
assign gated_clk = clk & en ;
always @(posedge gated_clk or negedge rstn) begin
if (!rstn)
data_out <= 8'b0 ;
else
data_out <= data_out + 1'b1;
end
人為編寫的時鐘門控邏輯中,時鐘很容易出現(xiàn)毛刺,增加了設(shè)計的不穩(wěn)定性。
為了消除人為編寫時鐘門控邏輯帶來的隱患,DC 中需要使用以下命令對手動編寫的 CG 進(jìn)行識別與替換。
replace_clock_gates
此命令實(shí)現(xiàn)的優(yōu)化結(jié)果示意圖如下:
禁止使用 CG
由于面積、時序等原因,需要禁止使用 lib 中的某一種 CG cell 時,可以使用以下命令:
#禁止使用指定的 CG cell:"lib_cell",
set_dont_use -power {lib_cell}
其中,-power 選項(xiàng)不可或缺,否則 ICG cell 的 dont_use 屬性會被忽略。
門控時鐘報告
可以使用以下命令,查看時鐘門控單元的插入情況,以便確認(rèn)是否需要對電路進(jìn)行修改。
report_clock_gating
但是如果 RTL 設(shè)計中,存在人為例化的 CG cell,命令 report_clock_gating 是不能識別的,需要設(shè)置以下命令:
set power_cg_auto_identify true
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110074 -
功耗
+關(guān)注
關(guān)注
1文章
810瀏覽量
31936 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61132 -
門控時鐘
+關(guān)注
關(guān)注
0文章
27瀏覽量
8948
發(fā)布評論請先 登錄
相關(guān)推薦
評論