2016-04-25 15 views
0

Ich möchte einen Taschenrechner basierend auf FPGA Board (spartan 3) machen. Ich habe folgenden CodeWie zweistellige BCD in Binär konvertieren?

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 

Der Code zur Verfügung stellt jedoch Konvertierung nur für Binär in BCD. Ich suche nach einer Möglichkeit, diesen Algorithmus umzukehren. Gibt es eine bessere Möglichkeit, BCD in Binär zu konvertieren?

+0

Für 2 BCD-Ziffern gibt es nur 100 Werte. Sie können also eine case-Anweisung mit 100 Einträgen verwenden und den Compiler für sich arbeiten lassen. – aja

Antwort

0

Sie könnten jede BCD-Ziffer mit separaten case-Anweisungen in eine Binärdatei dekodieren und einfach die Ergebnisse hinzufügen. Für hunderte würde Ihre case-Anweisung beispielsweise wie folgt aussehen:

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