2016-04-10 13 views
0

Verilogを初めて使用しました。有限状態機械のコードを書くとき。私が取得:Verilog構文エラーが常に近くにあります

  • [シンセ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ビットの入力(X)
  2. クロック入力(CLK)
  3. 2つの1ビット出力(S、およびV)

Xは4ビットのバイナリ数Nを表します。 4ビットの数値は一度に1桁を入力し、最下位ビット(LSB)から開始します。

Sは、第4ビットの入力が発生した場合にN + 3が大きすぎる最初

、V = 1 あることがLSB Sの出力されるN + 3に等しい4ビットの2進数を表します。 4ビットで表される。それ以外の場合、V = 0

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

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

私のコードに必要な結果が得られない場合は、指摘してください。ありがとう!

+0

"reg v"宣言(常に直前)の後にセミコロンはありませんか? – happydave

+0

@happydaveああ、この間違いを指摘してくれてありがとう!しかし、常に周囲には誤りがあります。 Vivado氏は、「[Synth 8-434]ミックスレベルセンシティブおよびエッジトリガーイベントコントロールは合成には対応していません」と述べています。常に@()ステートメント – Jiang

答えて

2

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

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

フリップフロップはエッジトリガーとレベルトリガーを同時に行うことができないため、レベルとエッジの混合された機密リストは合成できません。 このリンクを確認してください: Synthesis of `always` blocks