十六进制到BCD转换

时间:2012-12-12 13:58:08

标签: binary hex verilog

我正在尝试将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

此致

2 个答案:

答案 0 :(得分:1)

我看到你的模块有一些不寻常的东西。

  1. num是1位宽,但您要将其除以2。

  2. 您正在分配给input

  3. 您对num进行了8次相同的分配。 Verilog不是这样的;所有连续分配都是并行评估的。

答案 1 :(得分:0)

以下代码将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