11

デザインでいくつかのラッチとロジックをクロック ゲーティングしています。合成と配置配線の経験はあまりありません。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」されている場合、ツールは合成に苦労しますか? 特殊なクロック ゲーティング セルを使用することは、ゲーテッド クロック信号を生成するための標準的なアプローチであると感じています。なぜそうなのかを理解しようとしています。

4

2 に答える 2