0

私はVerilogが初めてです。有限状態マシンのコードを書こうとしたとき。私は得る:

  • [Synth 8-434] 混合レベル センシティブおよびエッジ トリガー イベント コントロールは、合成ではサポートされていません。

これが私のコードです:

module controller1(x, clk, s, v);
    input x;
    input clk;
    output s;
    output v;

    reg [2:0] state;
    reg s;
    reg v;

    always @ (negedge clk or x) begin
      case (state)
          3'b0 : begin
                  state <= x ? 3'b1 : 3'b10;
                  s = x ? 0 : 1;
                  v = 0;
                 end
          3'b10 : begin
                   state <= x ? 3'b11 : 3'b101;
                   s = x ? 0 : 1;
                   v = 0;
                  end    
          3'b1 : begin
                  state <= 3'b11;
                  s = x ? 1 : 0;
                  v = 0;
                 end
          3'b101 : begin
                    state <= 3'b100;
                    s = x ? 1 : 0;
                    v = 0;
                   end
          3'b11 : begin
                   state <= x ? 3'b111 : 3'b100;
                   s = x ? 0 : 1;
                   v = 0;
            end
          3'b100 : begin
                    state <= 3'b0;
                    s = x ? 1 : 0;
                    v = 0;
                   end
          3'b111 : begin
                    state <= 3'b0;
                    s = x ? 0 : 1;
                    v = x ? 1 : 0;
                   end
      endcase      
    end
endmodule

質問は:

順序回路は

  1. 1 つの 1 ビット入力 (X)
  2. クロック入力 (CLK)
  3. 2 つの 1 ビット出力 (S および V)

X は 4 ビットの 2 進数 N を表します。4 ビットの数値は、一度に 1 桁ずつ入力され、最下位ビット (LSB) から始まります。

S は、N + 3 に等しい 4 ビットの 2 進数を表します。S の LSB が最初に出力されます。

4 番目のビット入力が発生すると、N + 3 が大きすぎて 4 ビットで表現できない場合は V = 1 になります。それ以外の場合、V = 0 です。

X の 4 番目のビットが受信されると、回路は常にリセットされます。順序回路が次の状態テーブルで実装されていると仮定します。

出力は (S,V) です。すべての状態変化は、クロック パルスの立ち下がりエッジで発生します。

私のコードに必要な結果を得るのに問題がある場合は、指摘してください。ありがとう!</p>

4

1 に答える 1

2

基本的にすべての常にブロックは、フリップフロップのグループ、ラッチのグループ、または組み合わせ回路のブロックを記述しています。

あなたのコードでは、「negedge クロック」と「x」を使用して、エッジとレベルの感度が混在しています。FSM がクロックの立ち下がりエッジのみに敏感な場合は、常にブロックの感度リストから「x」を削除します。

フリップフロップはエッジ トリガーとレベル トリガーを同時に実行できないため、レベルとエッジの混合センシティブ リストは合成できません。このリンクを確認してください: `always` ブロックの合成

于 2016-04-10T03:19:19.233 に答える