2012-12-12 101 views
-1

我正試圖從十六進制轉換爲verilog中的BCD。我沒有使用任何時鐘或其他東西。在我的程序中,我一次輸入一個輸入並將其轉換並顯示結果。但是我的程序給出了未定義的結果。我該如何解決它?任何解決方案十六進制到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 

問候

回答

1

我看到一些不尋常的事情與你的模塊。

  1. num是1個位寬,但你正在試圖通過2

  2. 您指派給input將其分攤。

  3. 您可以對num進行8次相同的作業。 Verilog不會那樣工作;並行評估所有連續分配。

+0

k。任何想法如何將十六進制轉換爲bcd。我將在Verilog中實現,但我不知道在編程語言中將十六進制轉換爲bcd的方法 – Alfred

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