1

1) ASIC では、既知の状態から開始するためにリセットが使用されることを理解しています。お気に入り

always @ (posedge clk or negedge reset)
begin 
if (reset)
//Initialize the signals
else 
//do something
end

しかし、これが事実なら、setシグナルを使用して、別の状態から開始し、最終的に回路が行うべきことになるのはなぜですか?それはばかげているように思えますが、私は興味があります。これ。

 always @ (posedge clk or negedge set)
    begin 
    if (set)
    //Initialize the signals
    else 
    //do something
    end

if/else2)また、条件にリセットを含むステートメントを使用してリセット信号をモデル化する必要があることを読みましたif。他の方法でそれを行う方法の例を誰か教えてもらえますか?

4

1 に答える 1

1

あなたの質問の例には、次のようなわずかな間違いがあります。

always @ (posedge clk or negedge reset) begin 
  if (~reset) begin //<-- Reset when rest low
    //Initialize the signals
  end
  else begin 
    //do something
  end
end

信号が低くなるとトリガーされるnegedge resetため、リセット条件を一致させる必要があります。これはアクティブ LOW リセットです。アクティブ ハイ リセット (次の場合にリセットreset == 1) の場合:

always @ (posedge clk or posedge reset) begin //<--Posedge trigger reset
  if (reset) begin //<-- Reset when rest high
    //Initialize the signals
  end
  else begin 
    //do something
  end
end

リセット条件は 0 である必要はありません。何でもかまいませんが、既知の静的な値でなければなりません。つまり、NOTnext_stateなどa+bです。フリップフロップのリセット ピンに接続されているため、名前をリセットしておきます。

ASIC では、電力が供給されていないときにリセット状態になるため、アクティブ LOW リセットが推奨されます。チップの起動時に、クロックのポーズエッジでリセットを同期的にリリースすることがよくあります。多くの場合、最低 2 つの posges が必要です。これにより、短時間のリセット グリッチが回避されます。

チップの電源投入時にアクティブ ロー リセットを適用する必要があるため、電源投入時にすべてが既知の状態になるため、非同期リセットを使用します。同期リセットでは、最初の状態がどうなるかわかりません。同期リセットは、多くの場合、データをクリアする必要があるステート マシンとフィルターによって使用されます。非同期リセットは、既知の値を設定するためのパワーオン リセット (POR) に使用されます。

このif (reset) else構造は、合成ツールがそれを非同期リセット付きのフリップフロップとして認識できるようにするために使用されます。別の構造を試してみると、うまくシミュレートでき、(誤って) 合成することさえできますが、シミュレーションの作成では表示されないハードウェアのバグが簡単に発生する可能性があります。デバッグは非常に困難です。

セットリセット フリップフロップ (SR Flip-Flop)について読むことに興味があるかもしれません。トグル機能のないただのJK。

以下を使用して暗示することができます。

always @ (posedge clk or negedge reset or posedge set) begin 
  if (~reset) begin 
    //reset the signals
  end
  else if (set) begin
    //set the signals
  end
  else begin 
    //do something
  end
end
于 2013-04-14T15:41:41.670 に答える