Вот мой код:Почему Cout только учитываются в процессе добавления и не вычитание в моем сумматоре/вычитателе (Verilog)
module Adder_8b_df (A, B, opcode, S, Cout);
input [7:0] A, B;
input [3:0] opcode;
output [7:0] S;
output Cout;
wire [8:0] tmp;
assign tmp = (opcode[0] == 0) ? (A + B) : (A + (~B + 8'b1));
assign S = tmp [7:0];
assign Cout = tmp [8];
endmodule
Сложения выполняется, когда первые бит опкод является 0, в противном случае вычитание через два дополнения. Рассматривая форму волны, обе операции выполняются правильно. Однако, когда выполняется добавление, выполняется только выполнение (Cout).
Например, при попытке вычесть 0110_0011 с 1100_0110. Операция должна быть 1100_0110 + 1001_1101, что приводит к переполнению. Форма сигнала покажет правильный ответ: 0110_0011. Но Cout невысока. Есть идеи, почему это так?