Verilog 2 的补码 adder/subtractor
Verilog 2's complement adder/subtractor
在Verilog中设计一个四位adder/subtractor并在七段显示器上显示
我的大部分代码都在运行,但是当我需要一个涉及负数的减法时,它会产生错误的结果。
例如,
5 - 7 应该得到 2 但我收到 E
下面是我的代码:
module fullAdder (a0,a1,carry_in,s,carry_out);
input a0,a1,carry_in;
output s, carry_out;
assign s = (a0 ^ a1) ^ carry_in;
assign carry_out = (a0 & a1 & carry_in)|(a0 & a1 & ~carry_in)|(a0 & ~a1 & carry_in)|(~a0 & a1 & carry_in);
endmodule
module Lab3(a0,a1,s,cout);
input s;
input [3:0] a0, a1;
output [3:0] cout;
wire c,d,e,f;
wire input1, input2, input3, input4;
xor(input1, s, a1[0]);
xor(input2, s, a1[1]);
xor(input3, s, a1[2]);
xor(input4, s, a1[3]);
//a0,a1,carry_in,s,carry_out
fullAdder fa0(a0[0],input1,s,cout[0],c);
fullAdder fa1(a0[1],input2,c,cout[1],d);
fullAdder fa2(a0[2],input3,d,cout[2],e);
fullAdder fa3(a0[3],input4,e,cout[3],f);
endmodule
E 是这里的正确结果,因为它是 4 位二进制补码中的 -2。
从负的二进制补码值变为正值的技巧是反转并加一。
E在二进制中是1110
1110倒过来就是0001
0001加1为0010(2)
在Verilog中设计一个四位adder/subtractor并在七段显示器上显示
我的大部分代码都在运行,但是当我需要一个涉及负数的减法时,它会产生错误的结果。
例如, 5 - 7 应该得到 2 但我收到 E
下面是我的代码:
module fullAdder (a0,a1,carry_in,s,carry_out);
input a0,a1,carry_in;
output s, carry_out;
assign s = (a0 ^ a1) ^ carry_in;
assign carry_out = (a0 & a1 & carry_in)|(a0 & a1 & ~carry_in)|(a0 & ~a1 & carry_in)|(~a0 & a1 & carry_in);
endmodule
module Lab3(a0,a1,s,cout);
input s;
input [3:0] a0, a1;
output [3:0] cout;
wire c,d,e,f;
wire input1, input2, input3, input4;
xor(input1, s, a1[0]);
xor(input2, s, a1[1]);
xor(input3, s, a1[2]);
xor(input4, s, a1[3]);
//a0,a1,carry_in,s,carry_out
fullAdder fa0(a0[0],input1,s,cout[0],c);
fullAdder fa1(a0[1],input2,c,cout[1],d);
fullAdder fa2(a0[2],input3,d,cout[2],e);
fullAdder fa3(a0[3],input4,e,cout[3],f);
endmodule
E 是这里的正确结果,因为它是 4 位二进制补码中的 -2。
从负的二进制补码值变为正值的技巧是反转并加一。
E在二进制中是1110
1110倒过来就是0001
0001加1为0010(2)