(編集)私はVerilog算術プロジェクトで作業していますが、これは問題であると仮定して符号拡張部に固執しました。私は4ビット入力A、Bを持っていて、8ビット出力を持っているはずです。いくつかのプロセス(合計、サブ...)私は8ビット出力を作るために符号拡張を使用する必要があります。演算の本体のために、私はこのコードを持っています。これはコードの半分です。それだけで長いですcuzを私は..Verilogでの算術演算(符号拡張)
module arithmetic(A, B, AN0, DP, sum, sub, mult, div, comp, shiftLeft,
shiftRight, signExtend);
input signed [3:0] A, B;
output [7:0] sum, sub, mult, div, comp, shiftLeft, shiftRight,
signExtend;
output AN0, DP;
//sum
reg [4:0] qsum;
[email protected] (A, B)
qsum = A+B;
assign sum = {{3{qsum[4]}},qsum};
//sub
reg [4:0] qsub;
[email protected] (A, B)
qsub = A-B;
assign sub = {{3{qsub[4]}},qsub};
//mult
reg [7:0] qmult;
[email protected] (A, B)
qmult = A * B;
assign mult = qmult;
を半分の部分が含まれていなかったと私は私のシミュレーションをチェックすると、それはすべての値が、Z、及びXを持っていません。入力値も表示されません。なぜそれが起こっているのですか?ありがとう
(編集済み)これは私のテストベンチコードです。 8つの操作(和、乗算、減算、除算、比較、shiftleft、右シフト、符号拡張)
module lap3_top_tb();
reg signed [3:0] A, B;
reg [2:0] Operation;
wire [7:0] Result;
wire DP, AN0;
lab3_top ulap3_top(
.A(A),
.B(B),
.Operation(Operation),
.Result(Result),
.DP(DP),
.AN0(AN0)
);
initial begin
A = 6; B = 7; Operation = 0;
#20;
A = -6; B = -7; Operation = 0;
#20;
A = 6; B = 7; Operation = 1;
#20;
A = -6; B = -7; Operation = 1;
#20;
A = 6; B = 7; Operation = 2;
#20;
A = -6; B = 7; Operation = 2;
#20;
A = 7; B = 4; Operation = 3;
#20;
A = 7; B = 0; Operation = 3;
#20;
A = 6; B = 7; Operation = 4;
#20;
A = -6; B = -7; Operation = 4;
#20;
A = 1; B = 6; Operation = 5;
#20;
A = 1; B = -6; Operation = 5;
#20;
A = 1; B = 6; Operation = 6;
#20;
A = 1; B = -6; Operation = 6;
#20;
A = 6; B = 0; Operation = 7;
#20;
A = -5; B = 0; Operation = 7;
#20;
end
endmodule
lap3_topファイルがここにあります。 (mux_8_1は出力を選択し、実行結果スルー。あなたは、コードが必要な場合、私に知らせて!しかし、私は、マルチプレクサが正常に動作だと思います)
module lap3_top(A, B, Operation, Result, AN0, DP);
input signed [3:0] A, B;
input [2:0] Operation;
output AN0, DP;
output [7:0] Result;
wire a, b, c, d, e, f, g, h;
arithmetic uarithmetic(
.A(A),
.B(B),
.AN0(AN0),
.DP(DP),
.sum(a),
.sub(b),
.mult(c),
.div(d),
.comp(e),
.shiftLeft(f),
.shiftRight(g),
.signExtend(h)
);
mux_8_1 umux8_1(
.A(a),
.B(b),
.C(c),
.D(d),
.E(e),
.F(f),
.G(g),
.H(h),
.Operation(Operation),
.Result(Result)
);
endmodule
そんなにみんなに感謝!
こんにちはJakeさん、あなたのテストベンチコードを共有できますか? –
'testbench'から' sum'モジュールへのすべての接続を見る 'lab3_top'モジュールを投稿することもできますか? – Roman