2016-04-25 639 views
0

我想製作一個基於fpga板的計算器(斯巴達3)。我有以下代碼如何將兩位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

您可以使用單獨的case語句將每個BCD數字解碼爲二進制數據,並只添加結果。例如,對於數百您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