デザインでいくつかのラッチとロジックをクロック ゲーティングしています。合成と配置配線の経験はあまりありません。RTL でクロック ゲーティングを実装する適切な方法は何ですか?
例1:
always_comb begin
gated_clk = clk & latch_update_en;
end
always_latch begin
if(gated_clk) begin
latch_data <= new_data;
end
end
例 2: RTL クロック ゲーティングの優れたプラクティスについて調査しているときに、RTL の例に出くわしました。この例では、上記のコードを次のように実装しました。
clock_gator cg_cell (.clk(clk), .en(latch_update_en), .scan_en(scan_en_in), .gated_clk(gated_clk));
always_latch begin
if(gated_clk) begin
latch_data <= new_data;
end
end
カスタム クロック ゲーティング セルを使用する目的は何ですか? 別のイネーブル信号を使用して always_comb ブロックで clk が直接「AND」されている場合、ツールは合成に苦労しますか? 特殊なクロック ゲーティング セルを使用することは、ゲーテッド クロック信号を生成するための標準的なアプローチであると感じています。なぜそうなのかを理解しようとしています。