2016-04-25 9 views
0

Я хочу сделать калькулятор на основе платы fpga (spartan 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 записями, и пусть компилятор сделать работу для вас. – aja

ответ

0

Вы можете декодировать каждую цифру 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 

 Смежные вопросы

  • Нет связанных вопросов^_^