\ $ (X_1, X_0) * (Y_1, Y_0) = > (S_0, S_1, S_2, S_3) \ $
¿Qué debo usar aquí? ¿Media Adders? ¿Adders completos? MUX? ¿Qué pasa?
\ $ (X_1, X_0) * (Y_1, Y_0) = > (S_0, S_1, S_2, S_3) \ $
¿Qué debo usar aquí? ¿Media Adders? ¿Adders completos? MUX? ¿Qué pasa?
Piensa. ¿Aprendió el método de multiplicación de decimales en varias filas en el papel? Solo transfiere eso a binario. Todo lo que necesita es suma (HA y FA) y multiplicación (AND, pero un MUX adecuadamente conectado funcionará bien). Su profesor fue moderado, en la siguiente tarea le pido un multiplicador de 4 x 4 :) El texto es holandés, pero podría darle algunos consejos. También muestra un diagrama de bloques de un multiplicador de 8 x 8.
<Para un requisito tan minimalista con solo 16 palabras de 4 bits, ya que es un 'espacio de solución' completo, una memoria de solo lectura de 16 x 4 bits o equivalente funcional es rápida y fácil.
Sin embargo, si esto es para una tarea o como un ejercicio de aprendizaje general, no sería una buena solución. Para saber cuál es la mejor solución, deberá contarnos más sobre la pregunta real. ¿Para qué sirve? ¿Por qué una gama tan pequeña? ¿Qué tan rápido quieres que sea y / o importa? etc.
Al igual que la multiplicación larga que aprendiste en la escuela primaria: multiplica el multiplicador X por el bit menos significativo del multiplicador Y. Desplace el multiplicador un bit hacia la izquierda y multiplíquelo por el siguiente bit del multiplicador. Y así sucesivamente, y añadir los productos parciales.
X1 X0 <-- Y0 term
X1 X0 <-- Y1 term
-----------
A
B1 B0 Half-adder
C1 C0 Half-adder
C1 C0 B0 A Result
Lo bueno de la multiplicación binaria es que puede ser tan simple como AND-ing: para la primera línea, AND X1 y X0 con Y0. Si Y0 = 0, entonces esa línea es cero, de lo contrario es X1, X0. Así que para los productos parciales necesitamos 4 y puertas.
El resto se está sumando. A = X0 desde la primera línea. Use un medio sumador para agregar X1 de la primera línea a X0 de la segunda, dando B1, B0, y agregue X1 de la segunda línea a B1, dando C1, C0.
Y la puerta, seguida del desplazamiento de bits a la izquierda y AÑADIR.
Y es el equivalente de una multiplicación de 1 bit. Usted Y cada bit de un argumento con cada bit del otro. Los cambias en consecuencia y los sumas todos al final. Es como multiplicar en papel.
Un método tradicional para familiarizarse es crear una tabla de verdad en código gris 2x2, separarla en una tabla separada para cada bit de la respuesta que le da la forma de un mapa de Karnaugh, rodear con un círculo las agrupaciones de 1 y exprese la recopilación para cada bit de respuesta como una suma de productos.
Por supuesto, hoy en día, la implementación real generalmente se deja a herramientas informáticas que tomarán una variedad de formas de expresión como entrada y ubicación o configurarán elementos lógicos de la tecnología elegida (FPGA, ASIC, etc.) según sea necesario.
Para dos bits, el resultado será cero, la entrada, la entrada desplazada a la izquierda un lugar o tres veces la entrada. Aunque uno podría usar un enfoque AND-SHIFT-ADD, eso sería excesivo cuando la entrada es solo de dos bits. Uno podría usar un mux de cuatro entradas para seleccionar entre las opciones; la única opción que es incluso ligeramente difícil es la última, y esa solo asigna [X: Y] = (00,01,10,11) a (0000,0011,0110,1001). Cada uno de los cuatro bits de salida de la función (entrada por tres) puede expresarse como una simple función booleana de las dos entradas.
Tenga en cuenta que si estuviera construyendo un multiplicador ligeramente mayor (por ejemplo, 4x4), es posible que desee utilizar el enfoque "AND / SHIFT / ADD" sugerido por wjin; si estuviera construyendo un multiplicador mucho más grande (p. ej., 32x32), seguramente querría usar un enfoque ligeramente diferente, probablemente combinando el algoritmo de Booth (que reescribe secuencias superpuestas de 3 bits en valores de -2 a +2, evitando así el caso 3x ) con sumadores carry-save (dados tres números que deben agregarse, calcular rápidamente un par de números que tienen la misma suma). Tenga en cuenta que agregar dos grandes números rápidamente requiere una gran cantidad de circuitos; duplicar el tamaño de los números duplicará con creces la cantidad de circuitos necesarios para la suma más rápida posible, y el cómputo seguirá siendo más lento que con los números más pequeños. Por el contrario, tanto el algoritmo de Booth como la adición carry-save operan en pequeñas porciones de un número sin necesidad de una cadena de acarreo rápida.
Lea otras preguntas en las etiquetas design