デジタル設計コースのラボで、部分的な 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 である必要があります。
ありがとう。