Последовательные полные сумматоры не смогли обработать вычитание - PullRequest
0 голосов
/ 01 июня 2019

Я реализую набор полных сумматоров в 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
...