Я реализую набор полных сумматоров в verilog, но когда дело доходит до вычитания, я никогда не получаю никаких ожидаемых результатов.
SW [9]: Ignored, SW [8]: Carry-in, SW [7: 4]: первый 4-битный вход, SW [3: 0]: второй 4-битный вход, LEDR [3: 0]: выход, LEDR [4]: окончательное выполнение
Напримерв моем случае установите значение переноса (SW [8]) равным 1 и выполните вычитание между 0101 и 1101, я должен получить 1000 с выносом 0, но на самом деле это 0011 с выносом 1.
module adder (SW, LEDR);
input [9:0] SW;
output [4:0] LEDR;
wire c1, c2, c3;
FullAdder adder_1(
.a(SW[4]),
.b(SW[0]),
.s(LEDR[0]),
.cin(SW[8]),
.cout(c1)
);
FullAdder adder_2(
.a(SW[5]),
.b(SW[1]),
.s(LEDR[1]),
.cin(c1),
.cout(c2)
);
FullAdder adder_3(
.a(SW[6]),
.b(SW[2]),
.s(LEDR[2]),
.cin(c2),
.cout(c3)
);
FullAdder adder_4(
.a(SW[7]),
.b(SW[3]),
.s(LEDR[3]),
.cin(c3),
.cout(LEDR[4])
);
endmodule
module FullAdder (a, b, s, cin, cout);
input a, b, cin;
output s, cout;
assign s = a ^ b ^ cin;
assign cout = a & b | (a ^ b) & cin;
endmodule