2016-09-30 12 views
-1

現在、私はQuartus 16.0を使用しているALUに関する課題に取り組んでいます。 Verilogの初心者として、私は本当に関連する知識の欠如のために悪い時間を過ごしました。 コード内の問題を見つけるのは難しいですが、依然として助けが必要です。Verilogエラー:コロンが予想され、等号が必要です

エラー(10170):テキストの近くにLab3Part3.v(274)でのVerilog HDL構文エラー:

reg [7:0] ALUout; 
    [email protected](*) 
    begin 
    case(keys[2:0]) 
    3'b000: add plus(.a0(a0), .a1(a1), .a2(a2), .a3(a3), .b0(b0), .b1(b1), .b2(b2), .b3(b3), .s0(ALUout[0]), .s1(ALUout[1]), .s2(ALUout[2]), .s3(ALUout[3]), .cout(ALUout[4])); 
    3'b001: ALUout = A + B; 
    3'b010: ALUout = {A | B, A^B}; 
    3'b011: function3 u0(.a0(a0), .a1(a1), .a2(a2), .a3(a3), .b0(b0), .b1(b1), .b2(b2), .b3(b3), .Out(ALUout)); 
    3'b100: function4 u1(.a0(a0), .a1(a1), .a2(a2), .a3(a3), .b0(b0), .b1(b1), .b2(b2), .b3(b3), .Out(ALUout)); 
    endcase 
end 

ここでエラーメッセージだ "プラス"。 "< ="、または "="が必要です。

エラー(10170):Lab3Part3.v(274)のテキストの近くにVerilog HDL構文エラー: ";"; ":"、または "、"が必要です。

他の行と同じです。

これまでのところ、私は勉強していただけで、常にクラスの小さな文章をブロックしていました。どんな助けもありがとう。

答えて

0

手順ブロック内でモジュールをインスタンス化することはできません。モジュールのインスタンス化をalwaysブロックの外に移動し、モジュールの出力を適切な幅のワイヤに接続します。常時ブロックでは、ワイヤを参照してください。

また、ALUoutは、alwaysブロック内のすべての可能な組み合わせで既知の割り当てを持つ必要があります。さもなければ、複雑なラッチが推定され得る。 defaultは、値が5,6、または7であるkeys[2:0]の条件を処理するために使用する必要があります。

reg [7:0] ALUout; 
wire [4:0] add_out; 
wire [7:0] func3_out, func4_out; 
add plus(.a0(a0), .a1(a1), .a2(a2), .a3(a3), .b0(b0), .b1(b1), .b2(b2), .b3(b3), .s0(add_out[0]), .s1(add_out[1]), .s2(add_out[2]), .s3(add_out[3]), .cout(add_out[4])); 
function3 u0(.a0(a0), .a1(a1), .a2(a2), .a3(a3), .b0(b0), .b1(b1), .b2(b2), .b3(b3), .Out(func3_out)); 
function4 u1(.a0(a0), .a1(a1), .a2(a2), .a3(a3), .b0(b0), .b1(b1), .b2(b2), .b3(b3), .Out(func4_out)); 
[email protected](*) 
    begin 
    case(keys[2:0]) 
    3'b000: ALUout = {3'b0,add_out}; // leading zero padding 
    3'b001: ALUout = A + B; 
    3'b010: ALUout = {A | B, A^B}; 
    3'b011: ALUout = func3_out; 
    3'b100: ALUout = func4_out; 
    default: ALUout = 8'b0; // without this like ALUout would be an inferred latch 
    endcase 
end 
関連する問題