2016-04-25 22 views
0

私はfpgaボード(スパルタン3)に基づいて電卓を作ってみたいです。私はこの次のコードを持っています2桁のBCDをバイナリに変換するには?

module bcd_converter(
input [7:0] R, 
output reg [3:0] Hundreds, 
output reg [3:0] Tens, 
output reg [3:0] Ones 
); 
integer i; 
always @ (R) 
begin 
    Hundreds = 4'd0; 
    Tens = 4'd0; 
    Ones = 4'd0; 
    for(i=7;i>=0;i = i-1) begin 
     if(Hundreds >= 5) 
       Hundreds = Hundreds + 3; 
     if(Tens >= 5) 
       Tens = Tens + 3; 
     if(Ones >= 5) 
       Ones = Ones + 3; 

     Hundreds = Hundreds<<1; 
     Hundreds[0] = Tens[3]; 
     Tens = Tens << 1; 
     Tens[0] = Ones[3]; 
     Ones = Ones<<1; 
     Ones[0] = R[i]; 


    end 
end 
endmodule 

ただし、提供されるコードはバイナリのみBCDに変換します。私はこのアルゴリズムを逆にする方法を探しています。 BCDをバイナリに変換する方法はありますか?

+0

2 BCD桁の場合はそこだけ100の値であるので、あなたは100のエントリでcase文を使用すると、コンパイラがあなたのために仕事をさせことができます。 – aja

答えて

0

それぞれのBCD桁を別々のcase文でバイナリにデコードし、結果を追加するだけで済みます。例えば、数百人のためにあなたのcase文は次のようになります。

case(hundreds) 
    4'd0 : hundreds_bin = 9'd0; 
    4'd1 : hundreds_bin = 9'd100; 
    4'd2 : hundreds_bin = 9'd200; 
    4'd3 : hundreds_bin = 9'd300; 
//..etc etc 
関連する問題