Si eres un estudiante de EE/CPE y estás empezando a aprender lógica, tal vez no hayas aprendido esto todavía, pero lo harás.
Las funciones aritméticas y lógicas se realizan esencialmente en forma de circuito partiendo de una tabla de verdad y rellenando los valores que implementan la función deseada. Para la multiplicación de 2x2 bits, ésta es la tabla de verdad:
Del programa Viernes de lógica
Repasa cada fila y verás cómo lo implementa. Está en la forma A0,A1 * B0,B1 \= F0,F1,F2,F3
Lo siento, es al revés ya que normalmente el LSB es A0 o B0, lo numeré mal. De todos modos, tome por ejemplo la última fila. Dice 11 * 11 = 1001. En decimal, eso es sólo 3 * 3 = 9
Una vez completada la tabla de verdad, podría rellenarla en un _mapa de karnaugh_ y derivar las ecuaciones para cada salida del circuito. En este caso, dejé que este práctico programa lo hiciera por mí.
El resultado fue el siguiente.
En este punto, puedes ver que tengo una ecuación para F0 a F3 basada en las entradas. Ahora sólo tengo que tirar en las puertas lógicas para que coincida con esas ecuaciones. Y voila, tienes un circuito que realiza la multiplicación binaria.
Este es el lado simplista del asunto. Los procesadores reales y las ALUs dentro de ellos no lo hacen exactamente así. Por ejemplo, en un ordenador de 64 bits, la cantidad de lógica combinacional necesaria para realizar una multiplicación de 64x64 bits sería una locura. En su lugar, como dice el artículo de la wikipedia que has leído, multiplican uno de los operandos de 64 bits por cada bit individual del segundo operando, desplazando cada vez el resultado. Finalmente, suman todas las sumas parciales. Este es el método más sencillo de realizar la multiplicación secuencialmente. Sin embargo, algunos procesadores tienen implementaciones de multiplicación aún más rápidas que hacen uso de árboles wallace
Además, si quieres saber un poco más sobre el multiplicador de tipo secuencial, aquí tienes. Esto puede ser un poco más difícil, así que no te preocupes por entender cómo funciona cada uno de los componentes por debajo, porque lo aprenderás pronto. Yo aprendí registros de desplazamiento, ALUs, y todo eso al final de mi primer curso de lógica digital.
Esta imagen procede de http://faculty.kfupm.edu.sa/COE/mimam/files/COE200experiment13.pdf
Esta es una versión simplificada de 4x4 bits, y va más o menos así:
1) El multiplicador de 4 bits se carga y almacena en el registro de desplazamiento P, concretamente en Pl. Además, el multiplicando de 4 bits se almacena en el registro B. Ph es todo 0's
2) En cada ciclo de reloj, el registro P se desplaza a la derecha, y el bit más a la derecha, P0, se extiende con signo (no se muestra, para hacerlo de 4 bits), y se une con el multiplicando en el registro B. Si vuelves a la página del multiplicador binario en la wikipedia, en los fundamentos de la multiplicación, la segunda área gris, puedes ver que esto sucede con cada fila escalonada, es una operación AND que esencialmente hace la multiplicación ya que cada vez es multiplicador x 0 o multiplicador x 1 .
Como la ALU está realizando la operación de suma, el resultado de la multiplicación de 1 bit se suma a la suma parcial anterior, en este caso 0 por ser el primer paso, y se almacena en Ph.
3) En el siguiente ciclo, el registro P se desplaza de nuevo, y así puedes ver cómo la salida de Ph se desplaza y se añade de nuevo al resultado de la multiplicación de 1 bit.
4) Al final, tienes un resultado de 8 bits almacenado en el registro p.
0 votos
Qué parte de no entiendes del ejemplo dado en < es.wikipedia.org/wiki/ >?
0 votos
Creo que casi todo. Lo sigo leyendo pero sin poder procesarlo. Probablemente porque soy completamente nuevo en la lógica digital y no conozco la terminología.
3 votos
Si eres nuevo en la lógica digital, quizás debas intentar comprender cómo funciona un circuito sumador binario antes que un multiplicador binario.
0 votos
@krb686 Puede ser una buena idea, lo haré.