4

チップのクロックリセットを理解しようとしています。設計において、リセット中にフロップに値 (通常はゼロ) を割り当てるかどうかを決定するために使用される基準は何ですか?

always_ff @(posedge clk or negedge reset) begin : process_w_reset
   if(~reset) begin
      flop1 <= '0;
      ....
   end else begin
      if (condition) begin
         flop1 <= something ;
         .... 
      end
   end
end

always_ff @(posedge clk) begin : process_wo_reset
      if (condition) begin
         flop1 <= something ;
         .... 
      end
end

後でくし形ロジックで制御信号として使用されるフロップをリセットしないのは悪い習慣ですか? 櫛形ロジック ブロック (つまり、if ステートメントまたは FSM 櫛形ロジック) で使用される前に、フロップに有効な値 (0 または 1) が割り当てられるように設計されている場合はどうなるでしょうか。

デザインのすべてのフロップを常にリセットする方が良いと思います。そうすれば、リセット後にチップに X が表示されることはありません。ただし、データパス ロジックの場合、フロップのリセットは単なるパイプ ステージであるため、大したことではないかもしれません。ただし、フロップが制御パス (つまり、FSM の次の状態のコーム ロジック) にある場合は、デフォルト値にリセットする必要があります。私の理解は正しいですか?私はDFTについてあまり知りませんし、それが他の意味を持っているかどうかもわかりません.

4

4 に答える 4

4

コード例のように、リセットは非同期リセットを意味すると仮定します。

最小数のフリップフロップ (FF) とすべての FF のリセットで動作するように設計できるため、答えは部分的に意見に基づいています。

最小数の FF をリセットすることをお勧めします。これにより、通常、制御パスのほとんどの FF がリセットされ、データ パスの FF はリセットされません。このアプローチの利点を以下に概説します。

シミュレーションは、Verilog と VHDL の両方で、初期化されていない値の伝播に関して保守的であることが多いため、値が初期化されていない場合、シミュレーションが 0 と 1 の両方の値を一度にチェックできるようになっています。

したがって、リセットされていない FF によるバグは、シミュレーションによる検証の早い段階で示される可能性が高く、設計者はそれによって間違った設計仮定に関する貴重なフィードバックを得ることができ、他のバグを修正する設計の修正につながる可能性があります。すべての FF をリセットするだけで、このようなバグが隠れる可能性があります。

制御パスとデータ パスの両方ですべての FF をリセットすると、デザイン内の「煩わしい」X 伝播がすべて修正されるため、デザインと検証が簡単に思えるかもしれません。ただし、X の伝播がリセットによって抑制される場合、すべての値の組み合わせを検証するために、より多くのテストが必要になります。

インプリメンテーションによってリセット信号の負荷が小さくなるため、チップ全体でリセット ネットのタイミングを満たすことが容易になります。

一般にDFT (Design For Test) の場合、FF にリセットを追加しても、DFT がリセット値でスタックしているネットを見つけるのに役立ちません。すべての FF がスキャン チェーンを介してロードされる DFT スキャン チェーン アプローチでは、一部の FF でのリセットの欠如は、より多くのベクトルを必要としません。

于 2015-04-11T05:17:59.530 に答える
1

私のバックグラウンドは ASIC よりも FPGA の方が多いですが、リセットが必要なフロップのみをリセットする必要があるという Morten Zilmer の意見に同意します。

Verilog / SystemVerilog には落とし穴があることを指摘する価値があります。リセットされたレジスタとリセットされていないレジスタを駆動するクロック処理されたプロセスがある場合フリップの入力でクロック イネーブルまたは追加のマルチプレクサを推論することになります。フロップ。

state.b での意図しないクロック イネーブル

これは通常、意図したものではありません。

この回答には、より詳細な説明があります。また、同期/非同期およびアクティブな高/低リセットを抽象化するメカニズムの概要を説明するブログ投稿も書きました。

于 2015-04-16T09:09:52.233 に答える
1

一般的な経験則として、おそらく常に制御信号をリセットする必要があります。

データ フロップの場合、リセットはエリアを消費する可能性があるため、エリアを気にするかどうかに大きく依存します。

近年、シミュレーターは X 伝搬モードのサポートを開始しました。これにより、X の問題の一部を (ゲート レベルのシミュレーションではなく) RTL で検出できます。これらを実行して、初期化されていない sram またはフロップでリセットの問題が発生しないようにすることをお勧めします。

于 2016-05-06T09:32:25.153 に答える