Altera University Program 1 Práctica 6 Circuitos sumadores, restadores, y multiplicadores El proposito de esta práctica es examinar los circuitos aritméticos que implementan las operaciones de suma, resta y mutiplicación. Cada circuito será descrito en VHDL e implementado en la tarjeta de desarrollo DE-2 de Altera. Parte I Considere el circuito sumador en cascada usado en la práctica 2, cuyo diagrama se muestra en la Figura 1. Figura 1: Sumador en cascada de cuatro bits. Este circuito puede implementarse usando el operador ’+’ en VHDL. Por ejemplo, el siguiente fragmento de código suma dos números binarios de n bits A y B, y coloca el resultado de la suma en sum: library ieee; use ieee.std logic 1164.all; use ieee.std logic arith.all; use ieee.std logic signed.all; ... signal sum : std logic vector(n-1 downto 0); ... sum <= A + B; Use la estructura mostrada anteriormente para diseñar un circuito como el de la Figura 2. Siga los pasos que a continuación se listan para implementar su diseño: 1. Cree un nuevo proyecto en el IDE Quartus II. Identifique la matricula del circuito integrado reconfigurable en su tarjeta DE-2; indique al compilador que su diseño debe ser optimizado para esta arquitectura. 2. Escriba un programa en VHDL que describa el circuito mostrado en la Figura 2. 3. Importe el archivo de asignación de patillas especı́fico para la tarjeta DE-2. 4. Conecte la entrada A a los interruptores SW7−0 ; use el botón KEY0 como una entrada de reinicialización activa en bajo y el botón KEY1 como una entrada manual de reloj. Despliegue la salida resultado en los LEDs LEDR7−0 y la bandera de sobrefuljo en el LED LEDR8 . 5. Compile su diseño y use simulación temporal para verificar la operación correcta de su circuito. Una ves que su simulación muestre los resultados deseados, programe la tarjeta DE-2 con su diseño. Verifique que la bandera de sobreflujo solo se activa cuando el acumulador se desborda. Traducido por Eduardo Rodrı́guez Martı́nez Altera University Program 2 6. Abra el reporte de la compilación de su proyecto y examine los resultados reportados por la herramienta Timing Analyzer. Cuál es la frecuencia máxima de operación de su circuito? Cuál es la trayectoria en su circuito que presenta el máximo retardo? Figura 2: Circuito acumulador de 8 bits. Parte II Expanda el circuito mostrado en la Figura 2 para que sea capáz de sumar y restar. Modifique su diseño y añada la entrada suma resta de tal forma que cuando esta entrada sea 1 su circuito debe restar A de resultado, y cuando sea 0 su circuito debe sumar A a resultado. Parte III La Figura 3a muestra un ejemplo de como se realiza una multiplicación de dos números en sistema decimal A = 11 y B = 12. Figura 3: Multiplicación de numeros binarios. El producto P = A × B se calcula como una suma. El primer sumando es A multiplicado por el digito de las unidades en B. El segundo sumado es la version desplazada una posicion a la izquierda del resultado de A multiplicado por el digito en las decenas en B. La 3b muestra el mismo ejemplo pero usando números binarios de cuatro bits. En este caso, los sumandos son versiones desplazadas de A ó del número ”0000”, porque cada dı́gito en B es 1 ó 0. La Figura 3c muestra como cada sumando puede ser construdio a partir de funciones AND entre A y el correspondiente digito en B. Traducido por Eduardo Rodrı́guez Martı́nez Altera University Program 3 En la Figura 4 se ilustra un circuito de cuatro bits que implementa el producto P = A×B. Este tipo de circuito es llamado multiplicador en malla ya que presenta una estructura regular que asemeja una malla. Las secciones sombreadas en la Figura 4 corresponden a las columnas sombreadas en la Figura 3c. En cada fila del multiplicador se usan compuertas AND para producir los sumandos, y también se usan sumadores completos para producir las sumas parciales. Figura 4: Multiplicador en malla. Siga los pasos que se listan a continuación para implementar el sumador en malla: 1. Cree un nuevo proyecto en el IDE Quartus II. 2. Escriba el programa en VHDL que implemente el circuito mostrado en la Figura 4, incluyalo en su proyecto y compilelo. 3. Use la simulación funcional para verificar el funcionamiento de su diseño. 4. Expanda su diseño de forma que use los interruptores SW11−8 , en la tarjeta DE-2, para introducir el numero A, y los interruptores SW3−0 para introducir el numero B. Despliegue el valor hexadecimal de A y B en los visualizadores de siete segmentos HEX6 and HEX4, respectivamente. El producto P = A × B debe ser desplegado usando los visualizadores de siete segmentos HEX1 y HEX0. Los demas visualizadores deben de estar apagados. Traducido por Eduardo Rodrı́guez Martı́nez Altera University Program 4 5. Recompile su circuito y programe la tarjeta DE-2 con él. 6. Pruebe el funcionamiento correcto de su diseño con distintos valores para A y B. Parte IV En la Parte III usted implementó un multiplicador en malla usando sumadores completos. Remplazando cada fila de sumadores completos por un sumador de n bits, el multiplicador en malla puede representarse como se muestra en la Figura 5. Figura 5: Multiplicador en malla usando sumadores de n bits. Cada sumador de n bits opera sobre una version de A desplazada a la izquierda y la suma parcial proveniente de la fila anterior. Esta descomposición en sumas parciales nos permite construir multiplicadores mas grandes. Use este método para diseñar un multiplicador de 8 bits como el mostrado en la Figura 6. Este circuito contiene elementos de memoria en las entradas y salidas que nos permite retener su valor para posterior uso. Traducido por Eduardo Rodrı́guez Martı́nez Altera University Program 5 Figura 6: A registered multiplier circuit. Siga los pasos que a continuación se listan: 1. Cree un nuevo proyecto en el IDE Quartus II. 2. Escriba el programa en VHDL que implemente el circuito en la Figura 6, incluya lo en su proyecto y sintentice el circuito. 3. Use simulación funcional para verificar su diseño. 4. Expanda su diseño de forma que use los interruptores SW15−8 , en la tarjeta DE-2, para introducir el valor de A, y los interruptores SW7−0 para insertar el valor de B. Despliegue el valor hexadecimal de A y B en los visualizadores de siete segmentos HEX7-6 y HEX5-4, respectivamente. El producto P = A × B debe ser desplegado usando los visualizadores de siete segmentos HEX3-0. 5. Recompile su circuito y programe la tarjeta DE-2 con él. 6. Pruebe el funcionamiento correcto de su diseño con distintos valores para A y B. 7. Cuantos elementos lógicos ocupó su diseño para ser implementado? 8. Cuál es la frecuencia máxima de operación de su circuito? Parte V En la Parte IV usted implementó un multiplicador como un conjunto de sumas consecutivas, que acumulaban versiones desplazadas de A. Otra forma de implementar las sumas consecutivas es mediante el uso de sumas en árbol. Las sumas en árbol es un método para sumar varios numeros en forma paralela. Esta idea es ilustrada en la Figura 7, donde los números A, B, C, D, E, F , G, y H son sumados en paralelo. Las sumas A + B, C + D, E + F y G + H se ejecutan de forma simultanea. Los resultados de estas operaciones son sumados de nuevo en paralelo hasta obtener el resultado final P . Traducido por Eduardo Rodrı́guez Martı́nez Altera University Program 6 Figura 7: Ejemplo que muestra la suma de ocho cantidades usando sumas en árbol. Implemente un multiplicador en malla de 8 bits usando el método de sumas en árbol para implementar las sumas concecutivas. Tanto las entradas A y B, como la salida P deben de contener elementos de memoria para almacenar su estado como lo hizo en la Parte IV. Cuál es la frecuencia máxima de operación de su circuito? Traducido por Eduardo Rodrı́guez Martı́nez