【发布时间】:2021-08-12 16:31:40
【问题描述】:
我是 Verilog 的新手,基本上是在尝试自学一个用于大学的数字逻辑设计模块。我正在尝试使用两个全加器在 Verilog 中编写 BCD 加法器,中间有一些逻辑,以便在需要时转换为 BCD。
这是我的代码:
module binary_adder (
output [3:0] Sum,
output C_out,
input [3:0] A, B,
input C_in
);
assign {C_out, Sum} = A || B || C_in;
endmodule
module BCD_Adder (
output [3:0] Sum,
output Carry_out,
input [3:0] Addend, Augend,
input Carry_in
);
wire [3:0] Z, correction;
wire adder1C_out, carryInAdder2, adder2C_out;
binary_adder adder1 (.Sum(Z), .C_out(adder1C_out), .A(Addend), .B(Augend), .C_in(Carry_in));
assign Carry_out = (adder1C_out || (Z[3] && Z[1]) || (Z[3] && Z[2]));
assign correction = (Carry_out) ? (4'b0110) : (4'b0000);
assign carryInAdder2 = (1'b0);
binary_adder adder2 (.Sum(Sum), .C_out(adder2C_out), .A(correction), .B(Z), .C_in(carryInAdder2));
endmodule
出于某种原因,我不断收到以下输出:
已提交:A = 0000,B = 0010,进位 = 0,总和 = 0001,进位 = 0
预期:A = 0000,B = 0010,进位 = 0,总和 = 0010,进位 = 0
已提交:A = 0000,B = 0011,进位 = 0,总和 = 0001,进位 = 0
预期:A = 0000,B = 0011,进位 = 0,总和 = 0011,进位 = 0
已提交:A = 0000,B = 0100,进位 = 0,总和 = 0001,进位 = 0
预期:A = 0000,B = 0100,进位 = 0,总和 = 0100,进位 = 0
对于所有值,它基本上都是这样继续的。我的 A、B、进位和进位值始终匹配,但由于某种原因,输出总和始终为 0001。我不确定我哪里出错了,逻辑对我来说似乎没问题。我对此很陌生,只知道基础知识,因此将不胜感激!
谢谢, 韦斯
【问题讨论】:
标签: binary verilog add digital-logic bcd