0

RTL デザインでクロック ゲーティングがどのように機能するかを理解しようとしています。

ここに波の例があります:

ここに画像の説明を入力

説明:

1st signal is gated_clock
2nd signal is clock_enable
3rd signal is ungated_clock

したがって、この波には 3 つのサイクルがあります (サイクル 0、1、2 としましょう)。サイクル 0 では、clock_enable がローで、gated_clock がオフになりました。サイクル 1 で clock_enable が High になり、次のサイクル (サイクル 2) で gated_clock がオンになります。

ここで、シミュレーション中に、サイクル 1 で受信された入力データが、クロックによって (gated_clock を使用して) ゲートされるモジュールに正しく登録されている場合がいくつか見られます。私にはちょっと奇妙で、どうしてそれが可能なのかよくわかりません。

ロジックは次のようになります。

always_ff @(posedge gated_clock, negedge reset) begin
   if (~reset) begin
      some_val <= 1'b0;
   end else begin
      if (in_valid==1'b1 && in_ready==1'b1) begin
         some_val <= in_val;
      end else begin
         some_val <= 1'b0;
      end
   end
end

したがって、 ifin_validin_readywas high in cycle 1thensome_valが着信in_valデータを登録し、 で利用できるようになることがわかりましたcycle 2。しかし、cycle 1ではgated_clockゼロでした。では、in_val はどのようにここでサンプリングされたのでしょうか? 私の理解では、gated_clockフロップin_valcycle 1.

コア回路レベルのデジタル設計コンセプトが欠けている可能性があります。どんな助けでも本当に感謝します。

更新された波: ここに画像の説明を入力

1st signal is gated_clock
2nd signal is clock_enable
3rd signal is ungated_clock
4th signal is in_valid
5th signal is in_ready
6th signal is in_val
7th signal is some_val

ここではcycle 0gated_clockがオフですがin_valin_readyが高いことがわかります。入力データin_valも高いです。次のサイクルsome_valでハイになります。in_valだから、オフなのに取り込まれたcycle 0ように見えgated_clockます。

4

3 に答える 3

1

波形に表示されていないゲーテッド クロックにグリッチがある可能性があります。グリッチを記録および表示する方法については、使用しているツールのユーザー マニュアルを参照する必要があります。クロックをゲーティングするためのロジックを確認することも役立つ場合があります。NBA (<=) を使用して clock_enable が割り当てられていますか?

于 2016-08-23T23:57:21.027 に答える
0

新しい波形に基づいてsome_val、投稿された RTL に正しく生成されます。gated_clock信号の最初のエッジではin_valid、 とin_readyが両方ともハイであるためsome_val、そのサイクルでも がハイになります。次のエッジでは、ローになるため、ローに戻りますin_valid(ところでin_valも)

于 2016-08-24T18:58:49.010 に答える