2013-05-06 1 views
1

Это суммируемый суммирующийся ноль, который используется, однако, когда sub = 1 A = 4 B = 3, программа не возвращает переполнение, а сумма равна 1100 вместо 0110. Разве мы испортили поведение переноса?Как создать 2-х дополняющий сумматор в Verilog?

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 
+0

Почему invB не имеет нагрузки? В чем смысл «под»? Вы пытаетесь вычесть B из A? – Tim

+0

Ах, извините. В исходном коде строка RCL4bit RC4 (A, invB, sub, sum, C1, overflow); Я отредактирую это выше. Да, если sub = 1, то мы вычитаем B из A. В противном случае это просто сумматор. – user2297372

ответ

1

Ваш термин переполнения не имеет смысла для меня, я думаю, что перелив просто будет выполнять, я не знаю, почему вы xor'd его с переносом [2].

Другое, что я не вижу ничего плохого, я не вижу, как это может дать 1100 в качестве вывода, и я не понимаю, почему вы ожидаете, что ответ будет 0110 (6).

Если А 0100 и Ь 0011, чем invB 1100, плюс дополнительный Cin означает, что B у вас есть:

0100 (A) 
    1100 (invB) 
+ 0001 (Cin) 
_________ 
10001 

Переполнение является 1, а результат 0001 (4- 3 = 1).

Вы пробовали проверять через форму волны, чтобы увидеть, где ваши результаты расходятся?

+0

Переполнение может быть определено путем перехода к последним двум выводам. – ChiefTwoPencils

Смежные вопросы