0

Verilog で Hex から BCD に変換しようとしています。時計は一切使っていません。私のプログラムでは、一度に 1 つの入力を与え、それを変換して結果を表示します。しかし、私のプログラムは未定義の結果を出しています。どうすれば修正できますか?

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
4

2 に答える 2

1

あなたのモジュールにはいくつかの異常が見られます。

  1. num幅は 1 ビットですが、2 で除算しようとしています。

  2. に割り当てていinputます。

  3. 同じ割り当てをnum8 回行います。Verilog はそのようには機能しません。すべての連続代入は並行して評価されます。

于 2012-12-12T15:27:45.693 に答える
0

次のコードは、8ビットの2進数を同等のBCDに変換します。アルゴリズムの説明については、このリンクを参照してください。

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
于 2013-01-12T12:15:14.623 に答える