我正在尝试在Verilog中从Hex转换为BCD。我没有使用任何时钟。在我的程序中,我一次给出一个输入并将其转换并显示结果。但是,我的程序给出了不确定的结果。我该如何解决?
module HexToBCD(num,result);
input num;
output [7:0]result;
assign result[0]=num%2;
assign num=num/2;
assign result[1]=num%2;
assign num=num/2;
assign result[2]=num%2;
assign num=num/2;
assign result[3]=num%2;
assign num=num/2;
assign result[4]=num%2;
assign num=num/2;
assign result[5]=num%2;
assign num=num/2;
assign result[6]=num%2;
assign num=num/2;
assign result[7]=num%2;
assign num=num/2;
endmodule
我发现您的模块有一些异常之处。
num
的宽度为1位,但是您尝试将其除以2。
您正在分配给input
。
您对num
进行了8次相同的分配。 Verilog不能那样工作。所有连续的作业都将并行评估。
以下代码将8位二进制数转换为等效的BCD。有关算法的说明,请参考this link。
module bcd (
input [7:0] binary,
output reg [3:0] hundreds,
output reg [3:0] tens,
output reg [3:0] ones);
integer i;
always @(binary) begin
// set 100's, 10's, and 1's to zero
hundreds = 4'd0;
tens = 4'd0;
ones = 4'd0;
for (i=7; i>=0; i=i-1) begin
// add 3 to columns >= 5
if (hundreds >= 5)
hundreds = hundreds + 3;
if (tens >= 5)
tens = tens + 3;
if (ones >= 5)
ones = ones + 3;
// shift left one
hundreds = hundreds << 1;
hundreds[0] = tens[3];
tens = tens << 1;
tens[0] = ones[3];
ones = ones << 1;
ones[0] = binary[i];
end
end
endmodule