¿BCD al decodificador binario? [RESOLVIÓ]

0

Todos conocemos el algoritmo Double Dabble, funciona muy bien para la conversión de Binary a BCD, pero ¿qué pasa con un algoritmo o decodificador de BCD a Binary? Estoy tratando de hacer una máquina de cálculo, pero no pude encontrar o encontrar algoritmos para la conversión de BCD a binario, necesito uno lo antes posible. La ayuda es muy apreciada.

Edit: Lo siento, no hice un buen trabajo al especificar los detalles de esta pregunta. Tendré esto en cuenta la próxima vez que pregunte. Gracias a todos por sus respuestas :)!

    
pregunta Konrad Zuse

4 respuestas

1

Está familiarizado con Double Dabble (shift-add-three):

Lobuenodeestealgoritmoesquees100%reversible.PuedeusarelmismoalgoritmoparaconvertirdeBCDabinarioinvirtiendolasoperaciones.

Lospasostípicosson:

  • Compruebacadagrupodedígitos:
    • Si>=5,acontinuación,agregue3
    • Delocontrario,permaneceigual
  • Izquierdadesplazalaentradaalosdígitos

Pararevertirestasoperaciones,lasrealizaenelordeninverso

  • Derechadesplazalosdígitosalasalida
  • Compruebacadagrupodedígitos:
    • Si>=8,entoncesMenos3
    • Delocontrario,permaneceigual

Entonceselejemploseconvierteen:

    
respondido por el Tom Carpenter
2

Para un solo dígito, BCD es binario; Puedes usarlo como está.

Para el dígito de las decenas, debe multiplicar la representación BCD por 1010b (10d) y agregarla al dígito de las unidades. Puedes hacer eso con dos sumadores. Dado que el valor máximo será 99, el resultado será de 7 bits de ancho, con el bit menos significativo que proviene directamente del dígito de las unidades; los sumadores tendrán un ancho de 4 y 6 bits.

Para los dígitos de cientos y más, podría proceder de forma análoga, multiplicando por la representación binaria de 100, 1000, etc. y sumando los parciales. Esto le dará un circuito puramente combinatorio, aunque no necesariamente muy rápido en términos de retrasos de compuerta.

Alternativamente, puede construir un circuito secuencial que opere un dígito a la vez, comenzando por el más significativo. En cada paso, multiplica el total acumulado por 1010b, luego agrega el siguiente dígito. Los agregadores deberán ser más anchos que en el ejemplo anterior de "decenas de dígitos", pero la cantidad total de hardware debería ser menor. Este es un método lógico para manejar la entrada del teclado de la calculadora, ya que los dígitos se proporcionarán en la secuencia correcta de todos modos.

    
respondido por el Chromatix
1

Sé que no sé qué es el algoritmo Double Dabble, pero después de buscarlo, llegué a la conclusión de que tiene que ver con el cambio de registros. De hecho, esto parece algo que aprendí recientemente en mi curso de posgrado en sistemas de comunicación digital: el codificador convolucional donde envías cada bit de izquierda a derecha.

Descomprimiendo ... De todos modos, si desea convertir BCD a binario, simplemente tome cada segmento del BCD, encuentre el valor decimal y conviértalo en binario.

Déjame mostrarte un ejemplo:

BCD Value: 0011 0110 0001

Take each segment an convert it to decimal: 0011 -> 3, 0110 -> 6, 0001 -> 1
The decimal value you get from the BCD value is: 361

Convert 361 to binary: 361 -> 0101101001

Esta es la forma más fácil de convertir BCD a binario. Existen otros algoritmos como la creación de su propia LUT (tabla de consulta) que podría ser más práctica para los propósitos de la máquina. También me topé con este interesante circuito integrado que convierte BCD a binario y viceversa. Intente ver esto y quizás le pueda dar una buena idea de cómo implementarlo con hardware.

    
respondido por el KingDuken
0

Desde que solicitaste hardware aquí hay algo de psuedo-verilog. Suponemos que la entrada viene de un dígito a la vez, el dígito más significativo primero.

always @posedge(clk) begin
  if (digitstrobe) begin
    if (firstdigit) begin
      result <= digit;
    end else begin
      result <= (result * 10) + digit;
    end
  end
end
    
respondido por el Peter Green

Lea otras preguntas en las etiquetas