0

デジタル設計コースのラボで、部分的な ALU を設計しています。私はその演算を定義し、casez ステートメントを使用して、4 つの 2- sel のビット コンボ:

module eightbit_palu(input  wire[7:0] a, b,
                     input  wire[1:0] sel,
                     output wire[7:0] f,
                     output wire ovf);
                     
    wire[7:0] sum, bitInv, bitAnd, bitOr;
    wire sumOvf;
    
    assign sum = a + b;
    assign sumOvf = (a+b>127)||(a+b<-128) ? 1 : 0;
    assign bitInv = !b;
    assign bitAnd = a & b;
    assign bitOr = a | b;
    
    always @(a or b or sel) begin
        casez(sel)
            2'b00: f = sum; ovf = sumOvf;
            2'b01: f = bitInv; ovf = 0;
            2'b10: f = bitAnd; ovf = 0;
            2'b11: f = bitOr; ovf = 0;
        endcase
    end
    
endmodule

casez ステートメントを常に @ 内に埋め込んでいますが、出力がワイヤであることが原因であると思われる構文エラーが発生します。しかし、その一見単純な問題を回避する方法がわかりません。assignステートメントの前に宣言された変数をregに変換しようとしましたが、ワイヤに変換する際に問題が発生しました。Verilog がどのように機能するかについての洞察を本当に感謝します。残念ながら、私の教授は SystemVerilog で教えていますが、私たちのラボは Verilog である必要があります。

ありがとう。

4

1 に答える 1

1

はい、 (ブロックreg内で) 出力ワイヤにプロシージャルな割り当てを行っているため、出力ワイヤを に変更する必要があります。always

もう 1 つのエラーは、各項目begin/endの複数のステートメントの前後にキーワードを追加する必要があることです。caseこれは私のためにきれいにコンパイルされるコードです:

module eightbit_palu(input  wire[7:0] a, b,
                     input  wire[1:0] sel,
                     output reg [7:0] f,
                     output reg ovf);
                     
    wire[7:0] sum, bitInv, bitAnd, bitOr;
    wire sumOvf;
    
    assign sum = a + b;
    assign sumOvf = (a+b>127)||(a+b<-128) ? 1 : 0;
    assign bitInv = !b;
    assign bitAnd = a & b;
    assign bitOr = a | b;
    
    always @(a or b or sel) begin
        casez(sel)
            2'b00: begin f = sum;    ovf = sumOvf; end
            2'b01: begin f = bitInv; ovf = 0;      end
            2'b10: begin f = bitAnd; ovf = 0;      end
            2'b11: begin f = bitOr;  ovf = 0;      end
        endcase
    end
    
endmodule

次の行にも問題があります。

always @(a or b or sel) begin

センシティビティ リストには、ブロック内の割り当ての RHS の信号のみを含める必要があります。あなたのリストには と が誤って含まれてaおりb、 のような他のものが見落とされていsumます。適切なシグナルが自動的に含まれる暗黙の機密リストを使用する必要があります。

always @*
于 2020-10-05T15:41:50.187 に答える