Muxes, sumadores, comparadores y puertas

2

Esta pregunta es en realidad de una de mis discusiones anteriores, que todavía no entiendo cómo implementar. El objetivo es usar la abstracción para diseñar un circuito, que convierte los números decimales ASCII de dos dígitos en la representación de complemento de 2.

"Recuerde que los caracteres en ASCII se representan con siete bits y que los dígitos decimales son 0x30 (el dígito 0) hasta 0x39 (el dígito 9)".

Además del comparador y el sumador, se deben usar una o más unidades de extensión cero, uno o más muxes, y puertas y cables.

Básicamente, ¿cuáles son los pasos y conceptos clave que debo conocer para llegar a una solución a este problema de diseño? Soy un poco consciente de cómo funciona un sumador, ya que he hecho algunos problemas de división de bits con las unidades de control para implementar diferentes funciones, pero no sé cómo reunir todo esto.

    
pregunta Omar Ayala

2 respuestas

2

Los pasos que suelo seguir para encontrar la solución se explican aquí. (Descargo de responsabilidad: No soy un experto aquí).

1. Derive la relación de entrada-salida

El primer paso es comprender y expresar la relación entrada-salida de alguna forma. Puede expresar esta relación en una forma conveniente. Algunas de las formas estándar son

  • expresión matemática
  • tabla de verdad
  • expresión lógica
  • cualquier combinación de arriba

Tomando tu pregunta como ejemplo,

Si 011xxxx y 011yyyy son los dígitos ingresados. Los últimos cuatro bits de estos dígitos representan sus valores binarios. Entonces xxxxyyyy es la representación BCD del número. La conversión de este BCD a binario es la operación requerida aquí. Y esto se puede hacer agregando un dígito BCD más bajo con diez veces el dígito superior. es decir,

$$ \ mathtt {output = 1010 \ times xxxx + yyyy} $$

Así que hemos obtenido la relación de salida de entrada aquí. Pero no tenemos un multiplicador para implementar esta relación.

2. Re-formule la relación en términos de hardware disponible

Se puede multiplicar con \ $ 1010 \ $ cambiando y agregando como se indica a continuación:

$$ \ mathtt {1010 \ times xxxx = xxxx000 + xxxx0} $$

O

$$ \ mathtt {output = xxxx000 + xxxx0 + yyyy} $$

Así que aquí hemos obtenido la relación de entrada y salida en términos de hardware disponible. Un sumador de 7 bits puede hacer la adición. Las unidades de extensión cero pueden hacer el relleno cero.

Ponga un cero delante de la respuesta para hacerlo en forma de complemento a 2.

3. Diagrama de circuito / diagrama de bloques

Una vez que tengamos la relación de entrada-salida, luego reemplazar los operadores en la expresión con el correspondiente bloque / módulo le dará el diagrama del circuito.

    
respondido por el nidhin
0

Nidhin usó la multiplicación, voy a usar justo lo contrario (división), pero en realidad será solo un grupo de restas, fácil de hacer con un sumador.

Primero, asumiré que todos los dígitos ASCII se han convertido a BCD (decimal codificado en binario) al desactivar el 0x30 (lo que hace que cada uno de los dígitos sea de 4 bits en lugar de 8).

Tomemos un par de ejemplos. Convertir 26 (decimal) a 1A (hex)

0010 0110 => 0001 1010

El dígito más a la derecha de nuestra respuesta tiene un "peso" de 1, y el dígito izquierdo un "peso" de 16. Esto se debe a que hay dos "nibbles" de cuatro bits en la respuesta y el peso del quinto bit es 16 :

128   64   32   16       8   4   2   1

Entonces restaremos 16 repetidamente y usaremos el número de sustracciones exitosas como el dígito izquierdo de la respuesta. Lo que queda se convierte en el dígito correcto.

Si restamos 16 de 26, obtenemos diez. Como solo podemos hacer esto una vez (sin que se vuelva negativo), el dígito izquierdo se convierte en 1 y el dígito derecho es A (10).

     26
    -16 -> 1 (since we did this once)
     ---
     10 -> A     so the answer is 1A or 0001 1010

(done because 10 < 16)

Un ejemplo más largo:

Convierta 92 (decimal) a 5C (hex).

1001 0010 => 0101 1100

     92
    -16
    ---
     76
    -16
    ---
     60
    -16
    ---
     44
    -16
    ---
     28
    -16 -> 5 (since we subtracted 5 times, this is where the counter would be useful)
    ---
     12 -> C      so the answer is 5C or 0101 1100

(done because 12 < 16)

Tenga en cuenta que aunque estoy mostrando aritmética decimal (por ejemplo, 92 - 16), esto se está haciendo realmente en BCD, un mordisco de 4 bits para cada dígito ASCII.

Por lo tanto, restar 16 de 92 en realidad debe hacerse usando un sumador BCD. No es tan complicado como parece, aquí hay un ejemplo:

   1001 0010    92
 - 0001 0110    16
  ----------
   1000 1100    80 + -4  because it's negative, we'll add 10 back and propagate the carry
   0001 1010
  ----------
   0111 0110    76, which is the correct answer (see above)
    
respondido por el tcrosley

Lea otras preguntas en las etiquetas