這是正在使用的紋波進位加法器,但是,當sub = 1 A = 4 B = 3時,程序沒有返回溢出,總和是1100而不是0110。我們搞亂了進位行爲嗎?如何在Verilog中創建2的補碼加法器?
module fullAdder(A, B, Cin, sum, Cout);
input A, B, Cin;
output sum, Cout;
assign sum = A^B^Cin;
assign Cout = (Cin&A) | (Cin&B) |(A&B);
endmodule
module RCA4bit(A, B, C0, sum, C1, overflow);
input [3:0] A;
input [3:0] B;
output [3:0] sum;
input C0;
output C1;
output overflow;
wire [2:0] carry;
fullAdder RCA1(A[0], B[0], C0, sum[0], carry[0]);
fullAdder RCA2(A[1], B[1], carry[0], sum[1], carry[1]);
fullAdder RCA3(A[2], B[2], carry[1], sum[2], carry[2]);
fullAdder RCA4(A[3], B[3], carry[2], sum[3], C1);
assign overflow = C1^carry[2];
endmodule
module RCA4bit2cmp(A, B, sub, sum, C1, overflow);
input [3:0] A;
input [3:0] B;
output [3:0] sum;
input sub;
output C1;
output overflow;
wire [3:0]invB;
assign invB = sub?~B:B;
RCL4bit RC4(A, invB, sub, sum, C1, overflow);
endmodule
爲什麼invB沒有負載? 'sub'是什麼意思?你想從A中減去B嗎? – Tim 2013-05-06 01:59:58
啊,對不起。在原始代碼中,該行是RCL4bit RC4(A,invB,sub,sum,C1,overflow);我會編輯上面的內容。 是的,如果sub = 1,那麼我們將從A中減去B,否則它只是一個加法器。 – user2297372 2013-05-06 02:12:31