我正在尝试用Verilog编写BCD加法器,但是其中一个模块出了问题。具体来说,这个加法器需要将两个BCD数字相加。如果这两个数字的和小于或等于9,则正确。但是,如果它大于9,则必须添加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中合成它时,会出现以下错误:
ERROR:HDLCompilers:247 - "DIGITADD.v" 第33行 引用标量线路'c2'不是合法的寄存器或变量lvalue ERROR:HDLCompilers:247 - "DIGITADD.v" 第33行 引用标量线路's2'不是合法的寄存器或变量lvalue ERROR:HDLCompilers:42 - "DIGITADD.v" 第33行 过程分配的左侧不合法
我尝试了一些更改,例如将wire更改为reg,但仍无法使其正常工作。任何帮助都将不胜感激。