Cuaderno de prácticas de la asignatura Laboratorio de Tecnologı́a de Computadores José Luis Risco Martı́n José Miguel Montanana ii Índice general 1. Sumador/Restador 1 1.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.4. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Conversor de código 3 2.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.4. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.5. Anexo: Código Gray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Reconocedor de secuencias 5 3.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.4. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4. Generador de secuencias 7 4.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5. Ascensor 9 iii ÍNDICE GENERAL iv 5.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.4. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 6. Números primos y múltiplos de siete 11 6.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.4. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 7. Generador de secuencias 13 7.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 7.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 7.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 7.4. Módulos disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 8. Máquina tragaperras 15 8.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 8.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 8.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 8.4. Módulos disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 9. Algorı́tmico 17 9.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 9.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 9.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 9.4. Módulos disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 9.5. Algoritmos necesarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 10.Circuito ası́ncrono 21 10.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 10.2. Realización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ÍNDICE GENERAL 10.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v 21 vi ÍNDICE GENERAL Práctica 1 Sumador/Restador 1.1. Objetivos 1. Diseñar una red iterativa combinacional que realice la suma de 2 números de 2 bits en binario. 2. Diseñar un sumador/restador para números de 4 bits en complemento a 2 usando un sumador binario. 1.2. Realización 1. El diseño constará de 2 celdas iguales, cada una para realizar la suma de uno de los bits. Para realizar el circuito vamos a utilizar puertas lógicas: XOR (7486) y NAND (7400, 7410). 2. Usaremos un sumador binario de 4 bits (7483) y puertas lógicas para la función de complemento en caso de resta y para el desbordamiento: XOR, NAND, NOT (7404). 1.3. Simulación Hacer el diseño en papel y luego implementarlo utilizando Xilinx para ejecutar varias simulaciones. En el caso del apartado a), diseñar primero un elemento de la red iterativa, generar un sı́mbolo a partir de este, y diseñar entonces el sumador final combinando dos sı́mbolos. Cuando se obtenga el resultado esperado, realizar el diseño en el entrenador. Los sı́mbolos necesarios para diseñar los esquemáticos son: XOR: XOR2 NAND: NAND2, NAND3 NOT: INV 1 2 PRÁCTICA 1. SUMADOR/RESTADOR Sumador de 4 bits: ADD4. El sumador ADD4 incorpora, al contrario que el CI 7483, una salida de desbordamiento llamada OFL. Ignorar esta salida. 1.4. Pruebas Realizar las siguientes pruebas, tanto en el simulador como en el entrenador, para verificar que todo funciona correctamente: 1. Verificar primero un elemento de la red iterativa (el sı́mbolo generado en el caso de Xilinx), para todos los posibles valores de las entradas. Finalmente, verificar el diseño completo, con los siguientes valores: 1 + 1 = 2, 1 + 2 = 3, 3 + 3 = 2 (acarreo de salida) 2. Verificar el diseño con las siguientes pruebas: 3 + 4 = 7, 5 + (-2) = 3, (-3) + (-4) = -7, 3 - (-4) = 7, 5 - 2 = 3, (-3) - 4 = -7 6 + 3 = 9 (Desbordamiento), (-7) + (-7) = -14 (Desbordamiento) 6 - (-3) = 9 (Desbordamiento), (-7) - 7 = -14 (Desbordamiento) Práctica 2 Conversor de código 2.1. Objetivo Diseñar un sistema combinacional que realice la conversión de código Gray de 4 bits a binario. Y 4 Conversor codigo Gray 4 Z a binario 2.2. Realización Para realizar el circuito utilizaremos multiplexores 4 a 1 (74153) y puertas NAND (7400). 2.3. Simulación Los sı́mbolos necesarios para diseñar el esquemático son: Multiplexores 4 a 1: M4 1E Entradas constantes: VCC, GND El resto de sı́mbolos están enumerados en prácticas anteriores. 2.4. Pruebas Comprobar las 16 conversiones, tanto en el simulador como en el entrenador, para verificar que todo funciona correctamente. Por ejemplo: 3 4 PRÁCTICA 2. CONVERSOR DE CÓDIGO Entrada 0100 1000 1100 2.5. Salida 0111 1111 1000 Anexo: Código Gray El Código Gray es un caso particular de código binario (patentado por Frank Gray en 1953). Consiste en una ordenación de 2n números binarios de tal forma que cada número sólo tenga un dı́gito binario distinto a su predecesor. Un código Gray de 2 bits serı́a: 00 01 11 10 Una forma sencilla de construir un código Gray de n bits es utilizar un código Gray de n − 1 bits y añadirle un cero por la izquierda. A continuación para completar el código Gray añadiremos un 1 por la izquierda al código Gray de n − 1 bits empezando por el último elemento. De este modo, podremos obtener un código Gray de 3 bits a partir del código de 2 bits definido arriba. 0 0 0 0 1 1 1 1 00 01 11 10 10 11 01 00 Esta técnica de codificación se originó cuando los circuitos lógicos digitales se realizaban con válvulas de vacı́o y dispositivos electromecánicos. Los contadores necesitaban potencias muy elevadas a la entrada y generaban picos de ruido cuando varios bits cambiaban simultáneamente. El uso de código Gray garantizó que en cualquier transición variarı́a tan sólo un bit. En la actualidad, el código Gray se sigue empleando para el diseño de cualquier circuito electrónico combinacional mediante el uso de un Mapa de Karnaugh, ya que el principio de diseño de buscar transiciones más simples y rápidas entre estados sigue vigente, a pesar de que los problemas de ruido y potencia se hayan reducido. Práctica 3 Reconocedor de secuencias 3.1. Objetivo Diseñar un reconocedor de números de 4 bits que pertenezcan al intervalo 0100-1011. reset Reconocedor estado 0100−1011 salida bit clk 3.2. Realización Se trata de diseñar un circuito secuencial capaz de reconocer si la entrada (un número de 4 bits que se recibe a través de una lı́nea serie durante 4 ciclos consecutivos) está en el intervalo 0100-1011. Para realizar el diseño se estudiarán dos posibilidades según el orden de llegada de los bits: que el primer bit sea el más significativo o que sea el menos significativo. Se realizarán las máquinas de estados de cada caso y se seleccionará la más sencilla para realizar la implementación final. La llegada de los bits está sincronizada por una señal de reloj. La salida será 1 cuando se produzca la llegada del cuarto bit y el número esté en el intervalo especificado. En todos los demás casos será cero. 5 6 PRÁCTICA 3. RECONOCEDOR DE SECUENCIAS Cada cuatro pulsos de reloj el circuito volverá automáticamente al estado inicial. El circuito debe tener una entrada ası́ncrona (reset) que permita llevarlo al estado inicial. El estado del circuito se podrá visualizar en los leds para facilitar la depuración. Para la práctica se pueden utilizar cualquier tipo de puertas de 2 y 3 entradas, biestables tipo D (7474) e inversores. Para las entradas tanto la serie, como la de reloj, como la de reset se deben utilizar los conmutadores. Los pulsos de reloj también se introducirán utilizando un conmutador. 3.3. Simulación Hacer el diseño en papel y luego implementarlo utilizando Xilinx para ejecutar varias simulaciones. Cuando se obtenga el resultado esperado, realizar el diseño en el entrenador. Los sı́mbolos necesarios para diseñar los esquemáticos son: Biestable D, con clear y preset: FDCP Puertas AND, OR, NOT, ...: AND2, AND3, OR2, OR3, INV, ... El resto de sı́mbolos están enumerados en prácticas anteriores. 3.4. Pruebas Realizar cuatro pruebas al azar, de forma que dos de ellas pertenezcan al intervalo y las otras dos no. Práctica 4 Generador de secuencias 4.1. Objetivo Diseñar un generador de secuencia sı́ncrono. 4.2. Realización Utilizando biestables JK (7476), diseñar un contador sı́ncrono descendente módulo 10 con entrada reset que genere la cuenta (en binario) 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, . . . La salida deberá coincidir con el estado, es decir, que si el estado actual es S7 , la salida será 0111. Al pulsar reset, el contador volverá a 9. Utilizando el contador anterior y añadiendo las puertas lógicas necesarias, realice un generador de secuencia sı́ncrono que produzca, de forma cı́clica, la siguiente secuencia de salida Z = 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, . . . 4.3. Simulación Hacer el diseño en papel y luego implementarlo utilizando Xilinx para ejecutar una simulación. Cuando se obtenga el resultado esperado, realizar el diseño en el entrenador. Los sı́mbolos necesarios para diseñar los esquemáticos son: Biestable JK: El CI 7476 contiene JKs con señales clear y preset ası́ncronas. Por ello, en Xilinx habrá que combinar el uso de FJKC y FJKP, dependiendo de si el JK se quiere poner a 0 al pulsar reset (FJKC) o si se quiere poner a 1 (FJKP). El resto de sı́mbolos están enumerados en prácticas anteriores. 7 8 PRÁCTICA 4. GENERADOR DE SECUENCIAS Práctica 5 Ascensor 5.1. Objetivo Diseño modular de un sistema secuencial sı́ncrono que funciona como un ascensor. 5.2. Realización Utilizando un contador ascendente/descendente (74169) y puertas lógicas habrá que construir un circuito secuencial que actúe como un ascensor. El bloque básico del sistema será el contador, cuya salida S coincide con la salida del circuito. El ascensor constará, además, de una entrada externa A de 3 bits. En todo momento la entrada es comparada con la salida, de modo que: Si A=S, el contador no hará nada, lo que es equivalente a decir que el ascensor se encuentra en el piso en el que estamos. Si A>S, el ascensor tiene que subir, con lo cual se activará la cuenta ascendente del contador hasta que A=S, parándose en ese momento. Si A<S, entonces el ascensor tendrá que bajar, de modo que se activará la cuenta descendente del contador de nuevo hasta que A=S. Mostrar la salida y la entrada del circuito en los displays 7 segmentos. Para comparar las entradas A y S se puede utilizar un sumador de 4 bits (7483). 5.3. Simulación Hacer el diseño en papel y luego implementarlo utilizando Xilinx para ejecutar varias simulaciones. Cuando se obtenga el resultado esperado, realizar el diseño en el entrenador. Los sı́mbolos necesarios para diseñar los esquemáticos son: 9 10 PRÁCTICA 5. ASCENSOR Contador ascendente/descendente: CB4CLED El resto de sı́mbolos están enumerados en prácticas anteriores. 5.4. Pruebas Realizar las siguientes peticiones al ascensor (tanto en el simulador como en el entrenador), en el orden dado: 0, 7, 0, 3, 3, 6, 1 Práctica 6 Números primos y múltiplos de siete 6.1. Objetivo Diseño modular de un sistema secuencial sı́ncrono usando módulos estándar. 6.2. Realización La práctica constará de dos partes: 1. Diseñar un sistema secuencial utilizando un registro de desplazamiento (74194). El sistema tendrá una entrada serie A (el primer bit que entra es el menos significativo) que tras 4 ciclos de reloj aparecerá almacenada en el registro. Una vez cargado el registro, comprobar si su salida corresponde a un número primo o a un número múltiplo de 7. Las salidas de ambos reconocedores deberán ir cada una a un led de modo que éste se iluminará tras 4 pulsos de reloj si el número es primo o si es múltiplo de 7. 2. Introducir en el circuito anterior una entrada de control externa C, que tras 4 pulsos de reloj, hará que si C=0 y el número es primo se incremente un contador (74169) en una unidad, y si C=1 y el número es múltiplo de 7 se decremente el contador. La salida del contador será otra de las salidas del sistema y se visualizará en uno de los displays 7 segmentos. 6.3. Simulación Hacer el diseño en papel y luego implementarlo utilizando Xilinx para ejecutar varias simulaciones. Cuando se obtenga el resultado esperado, realizar el diseño en el entrenador. Los sı́mbolos necesarios para diseñar los esquemáticos son: Registro de desplazamiento: SR4CLED El resto de sı́mbolos están enumerados en prácticas anteriores. 11 12 PRÁCTICA 6. NÚMEROS PRIMOS Y MÚLTIPLOS DE SIETE 6.4. Pruebas Realizar las siguientes pruebas, tanto en el simulador como en el entrenador1 : 1. 0000 (0-0), 0010 (1-0), 0011 (1-0), 0100 (0-0), 0111 (1-1), 1110 (0-1) 2. C=0, 0000 (0-0-0000), 0001 (0-0-0000), 1011 (1-0-0001), 0010 (1-0-0010) 3. C=1, 0011 (1-0-0010), 0111 (1-1-0001), 1110 (0-1-0000), 0111 (1-1-????) 1 Los números se representan en orden (de más a menos significativo). La salida se indica entre paréntesis (primo, múltiplo de 7, estado del contador en el apartado 2) Práctica 7 Generador de secuencias 7.1. Objetivo Diseño e implementación de un sistema secuencial sı́ncrono sobre FPGAs. 7.2. Realización La práctica constará de dos partes: 1. Generador de secuencias en los leds: Se debe diseñar un circuito que genere una secuencia de tal forma que se visualice en la placa un led encendido que va desplazándose al siguiente cada segundo. Para saber cuándo ha pasado un segundo se utilizará un divisor de frecuencias que se encuentra disponible en el Campus Virtual. Las entradas del circuito serán reset, reloj y cambio y las salidas los 8 leds. Al empezar todos los leds estarán apagados, al detectarse un flanco de cambio se encenderá el primer led, pasado un segundo el segundo led, y ası́ sucesivamente mientras no se detecte ningún flanco en la entrada cambio. Un flanco en la entrada cambio retornarı́a el sistema al estado inicial (todos los leds apagados). 2. Generador de secuencias en un display 7-segmentos: Se debe añadir al circuito anterior la posibilidad de elegir entre dos secuencias a visualizar. La primera secuencia es la explicada en el apartado anterior. La segunda secuencia es sobre un display 7-segmentos, mostrando un segmento encendido, que va rotando al segmento adyacente cada segundo. Inicialmente todos los leds y segmentos del display estarán apagados. Al detectarse un flanco en cambio se comenzará a visualizar la primera secuencia. Al siguiente flanco se pasará a la segunda y un tercer flanco retornarı́a el sistema al estado inicial. 7.3. Simulación Hacer el diseño en papel y luego sintetizarlo utilizando la herramienta ISE. Es imprescindible realizar una simulación de cada uno de los apartados, durante la cual se pueda demostrar que 13 14 PRÁCTICA 7. GENERADOR DE SECUENCIAS funciona para todas las posibles combinaciones de las entradas. Se recuerda que para simular es necesario quitar el divisor de frecuencias, y sólo cuando se haya terminado de simular y se esté seguro de que el circuito funciona, se añadirá el divisor de frecuencias y se generará el mapa de bits para volcarlo sobre la FPGA. 7.4. Módulos disponibles Para la realización de los circuitos se dispone de los siguientes módulos: Pads de entrada salida IBUF y OBUF (no utilizar IBUF4 ni OBUF4) Biestables D con señal de clear ası́ncrona FDC Registros de 4 bit con señal de reset sı́ncrona y capacitación CE (señal de carga) FD4RE y entrada paralela de 4 bits. Contadores módulo 16 con señal de reset sı́ncrona y señal de cuenta (RE) CB4RE. Descodificador de 3 entradas D3 8E. Registro con desplazamiento de 8 bits con señal de capacitación y reset sı́ncrono SR8RE. Multiplexores del tamaño necesario (M2 1E, M4 1E, M8 1E) Puertas lógicas. (AND, INV, OR, XOR . . . ) Pueden utilizarse otros módulos disponibles en las bibliotecas de Xilinx Práctica 8 Máquina tragaperras 8.1. Objetivo Diseño e implementación de un sistema secuencial sı́ncrono modular sobre FPGAs. 8.2. Realización La práctica constará de dos partes: 1. Máquina tragaperras con 2 premios: Se debe diseñar un circuito que genere tres números aleatorios de 2 bits. Las entradas del circuito serán jugar, reset, y reloj y las salidas Num1, Num2, Num3 (de 2 bits cada uno, que se visualizan en el banco de leds) y dos premios Premio grande y Premio medio (que se visualizan en los display 7 segmentos). La señal de reset inicializa todos los registros y contadores a 0. reset jugar 2 Num1 2 Num2 2 Num3 Premio_grande Premio_medio reloj El flanco de bajada de la entrada jugar se utiliza para generar tres números aleatorios: el primer flanco de bajada genera el 1er número (Num1 ), el segundo flanco de bajada el segundo (Num2 ) y el 3er flanco de bajada el 3er número (Num3 ). Los 3 números se visualizan en los leds (2 bits por numero, en total 6 leds). Los premios por la jugada son: 15 16 PRÁCTICA 8. MÁQUINA TRAGAPERRAS Premio grande: los 3 números son iguales Premio medio: hay 2 números iguales Si el premio es el grande se enciende el segmento superior de un display 7 segmentos. Si el premio es el medio se enciende sólo el segmento central. Hasta que no se generan los 3 números no se visualiza el premio. Se puede jugar de nuevo volviendo a generar un flanco de bajada de la entrada jugar. 2. Máquina tragaperras con luces intermitentes: Hay que modificar el diseño anterior para que si el premio es el grande se encienden y apagan todos los leds del display 7 segmentos menos el central con una frecuencia de aproximadamente 1Hz. Si el premio es el medio se enciende y apaga sólo el segmento central. 8.3. Simulación Hacer el diseño en papel y luego sintetizarlo utilizando la herramienta ISE. Es imprescindible realizar una simulación de cada uno de los apartados, durante la cual se pueda demostrar que funciona para todas las posibles combinaciones de las entradas. Se recuerda que para simular es necesario quitar el divisor de frecuencias, y sólo cuando se haya terminado de simular y se esté seguro de que el circuito funciona, se añadirá el divisor de frecuencias y se generará el mapa de bits para volcarlo sobre la FPGA. 8.4. Módulos disponibles Para la realización de los circuitos se dispone de los siguientes módulos: Pads de entrada salida IBUF y OBUF (no utilizar IBUF4 ni OBUF4) y BUFG Biestables D con señal de clear ası́ncrona y capacitación FDCE Contadores módulo 4 con señal de clear ası́ncrona, señal de cuenta (CE) y señal de carga (L) CB2CLE. Comparador de 2 bits COMP2 Puertas lógicas. (AND, INV, OR, XOR . . . ) Divisor de frecuencias para generar una frecuencia de 1Hz Registro con desplazamiento de 4 bits con señal de capacitación y clear ası́ncrono SR4CE Práctica 9 Algorı́tmico 9.1. Objetivo Diseño algorı́tmico con FPGAs. 9.2. Realización Dir Dato 3 8 8 L/E Dato[Dir] Modo Reset Reloj Diseñar un sistema que deberá ser capaz de realizar las siguientes operaciones: En un modo interactivo, el usuario podrá introducir cuatro valores de 8 bits (A, B, C y D). Los elementos se ubicarán en las posiciones de memoria de la 0 a la 3. En este modo el usuario podrá leer cualquier dato de la memoria visualizándolo en los LEDS. En un modo de ejecución, la ruta de datos realizará cuatro cálculos sobre los valores anteriores, almacenados en las posiciones de memoria de la 4 a la 7, estos son: • Máximo común divisor de A y B • Máximo de C y D • Mı́nimo de C y D • Suma de C y D 17 18 PRÁCTICA 9. ALGORÍTMICO Los cuatro resultados se podrán inicializar a cero de forma manual en el modo interactivo. Algunas consideraciones: El modo (interactivo/ejecución) viene determinado por la entrada Modo. Se podrá escribir un dato en la dirección de memoria especificada cuando, estando en modo interactivo, se detecte un flanco en la entrada L/E. Esta entrada vendrá dada por un conmutador (switch). Hacer el diseño en papel. cada grupo deberá presentar al profesor una planificación de las operaciones, en la que se describa cuantos ciclos se necesitan para realizar las operaciones y qué puntos de control se activan en cada ciclo. Posteriormente sintetizar el diseño utilizando la herramienta ISE. 9.3. Simulación Se recuerda que para simular es necesario quitar el divisor de frecuencias, y sólo cuando se haya terminado de simular y se esté seguro de que el circuito funciona, se añadirá el divisor de frecuencias y se generará el mapa de bits para volcarlo sobre la FPGA. Realizar las siguientes pruebas, tanto en el simulador como en la FPGA: (A,B,C,D) = (32, 64, 65, 129), RAM(4-7) = (32, 129, 65, 194) (A,B,C,D) = (103, 113, 96, 18), RAM(4-7) = (1, 96, 18, 114) (A,B,C,D) = (120, 96, 13, 13), RAM(4-7) = (24, 13, 13, 26) 9.4. Módulos disponibles La ruta de datos de este sistema puede implementarse con los siguientes elementos: Memoria RAM con 16 palabras de 8 bits (RAM16X8S). En este módulo la lectura de los elementos es ası́ncrona. Sumadores (ADD8), para calcular la suma de los elementos y el cálculo del máximo común divisor. 2 Comparadores (COMPM8), para calcular valores mı́nimos y máximos. Registros (FD8CE) Contadores Multiplexores, biestables D y puertas lógicas 9.5. ALGORITMOS NECESARIOS 9.5. Algoritmos necesarios Algoritmo del máximo común divisor: // Versión recursiva int mcd(int a, int b) { if(a==b) return a; else if(a>b) return mcd(a-b,b); else return mcd(b,b-a); } // Versión iterativa int mcd(int a, int b) { int t; while (a!=b) { if(a>b) a = a - b; else { t = a; a = b; b = b - t; } } return a; } 19 20 PRÁCTICA 9. ALGORÍTMICO Práctica 10 Circuito ası́ncrono 10.1. Objetivo Diseño e implementación de un sistema ası́ncrono en el entrenador. 10.2. Realización Un circuito ası́ncrono controla la barrera de entrada a un aparcamiento. El circuito recibe dos entradas: el Botón de apertura de la barrera y el Sensor que detecta si el coche está pasando a través de la barrera. El sistema tiene una salida Abierta, que vale 0 si la barrera está cerrada y 1 si está abierta (considerar que se abre y cierra instantáneamente). El comportamiento del sistema es el siguiente: la barrera está cerrada hasta que se pulse el Botón. Entonces se abre la barrera y se queda abierta hasta que detecte que el coche ha terminado de entrar. Cuando el coche ha entrado se cierra la barrera y se puede volver a pulsar el Botón si otro coche quiere entrar. Nota: no puede pasar un coche si la barrera está cerrada. Se supone que el Botón se deja de pulsar antes de que el coche empiece a entrar. Hacer la tabla de flujo primitiva, minimizar el número de estados y presentar la tabla de flujo final donde se especifiquen las transiciones de estado y las salidas. A continuación implementarlo con inversores, puertas and de 2 entradas (7408) y or de 2 entradas (7432) eliminando las carreras y riesgos estáticos. 10.3. Simulación Hacer el diseño en papel y luego implementarlo utilizando Xilinx para ejecutar varias simulaciones. Cuando se obtenga el resultado esperado, realizar el diseño en el entrenador. Sólo se necesitan utilizar puertas INV, AND y OR. 21