Я пытаюсь написать BCD-сумматор в Verilog, но у меня проблемы с одним из модулей. В частности, сумматор, который берет две цифры BCD и добавляет их. Итак, идея в том, что если сумма двух цифр меньше или равна девяти, то это правильно. Однако, если оно больше, то должно быть добавлено смещение 6. Вот мой код Verilog:
module DIGITADD(
input [3:0] IN_A,
input [3:0] IN_B,
input CIN,
output reg COUT,
output reg [3:0] SUM
);
wire s2, c2;
always @ ( * )
begin
assign {c2, s2} = IN_A + IN_B + CIN;
if(s2 <= 9 && c2 == 0) begin
assign {COUT, SUM} = {c2, s2};
end
else if({c2, s2} > 9) begin
assign {COUT, SUM} = {c2, s2 + 6};
end
end
endmodule
В любом случае, когда я пытаюсь синтезировать его в Xilinx, я получаю следующие ошибки:
ОШИБКА: HDLCompilers: 247 - Строка 33 "DIGITADD.v" Ссылка на скалярный провод 'c2' не является допустимым регистром или переменной lvalue
ОШИБКА: HDLCompilers: 247 - строка "DIGITADD.v" 33 Ссылка на скалярный провод 's2' не является допустимым регистром или переменной lvalue
ОШИБКА: Компиляторы HDLC: 42 - строка "DIGITADD.v" 33 Недопустимая левая часть процедурного присвоения
Я пытался изменить некоторые вещи, например, изменить провод на reg, но я все еще не могу заставить его работать. Любая помощь приветствуется.