Manual Practicas Digitales Excelente
Short Description
Download Manual Practicas Digitales Excelente...
Description
Índice Acerca de las prácticas de Sistemas Digitales.......................................................... v 1.
Práctica 1: Introducción a las herramientas de diseño .................................. 1 Introducción ............................................................................................................. 1 Objetivos .................................................................................................................. 2 Desarrollo de la práctica......................................................................................... 2 XILINX´s Foundation Series Software................................................................ 2 Puertas lógicas ..................................................................................................... 3 Realización práctica ............................................................................................. 3 Paso 1. Iniciar Xilinx ....................................................................................... 4 Paso 2. Inicio de un nuevo proyecto ................................................................ 5 Paso 3. Captura del diseño utilizando el editor de esquemas........................... 6 Paso 4. Simulación funcional del diseño ....................................................... 10 Autocuestionario (a rellenar ANTES de la sesión de laboratorio)........................ 14 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) .......... 14
2.
Práctica 2: Circuitos combinacionales ........................................................... 15 Introducción ........................................................................................................... 15 Objetivos ................................................................................................................ 15 Desarrollo de la práctica....................................................................................... 16 Sumador binario de un bit.................................................................................. 16 Realización práctica ........................................................................................... 17 Realización de un sumador binario de un bit................................................. 17 Realización de un sumador binario de 2 bits ................................................. 20 Realización de un sumador binario de 8 bits ................................................. 25 Autocuestionario (a rellenar ANTES de la sesión de laboratorio)........................ 29 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) .......... 29
3.
Práctica 3:Diseño modular y jerárquico........................................................ 31 Introducción ........................................................................................................... 31 Objetivos ................................................................................................................ 33 i
Prácticas de Sistemas Digitales Desarrollo de la práctica .......................................................................................33 ALU de 4 bits .....................................................................................................34 Realización práctica ...........................................................................................37 Realización de un módulo sumador de 1 bit ..................................................37 Realización del ampliador aritmético de 1 bit................................................39 Realización del ampliador lógico de 1 bit ......................................................41 Realización de la ALU de 4 bits.....................................................................42 Simulación de la ALU de 4 bits .....................................................................45 Realización de la ALU de 32 bits...................................................................48 Anexo ......................................................................................................................49 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) ........................52 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio)...........52 4.
Práctica 4: Retardo de puertas........................................................................53 Introducción ...........................................................................................................53 Objetivos.................................................................................................................56 Desarrollo de la práctica .......................................................................................56 Ampliador aritmético .........................................................................................56 Realización práctica ...........................................................................................58 Simulación con retardos de puertas del ampliador aritmético de 1 bit ..........58 Eliminación de los riesgos estáticos ...............................................................61 Retardo total del ampliador aritmético ...........................................................62 Riesgos estáticos del módulo ampliador lógico .............................................63 Retardo total de la ALU de 4 bits...................................................................64 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) ........................65 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio)...........65
5.
Práctica 5: Elementos de estado......................................................................67 Introducción ...........................................................................................................67 Objetivos.................................................................................................................73 Desarrollo de la práctica .......................................................................................73 Realización práctica ...........................................................................................73 Latch SR .........................................................................................................73
ii
Índice Simulación funcional del latch SR................................................................. 76 Simulación con retardo unitario del latch SR ................................................ 77 Latch D síncrono............................................................................................ 78 Biestable D maestro esclavo .......................................................................... 79 Biestable D disparado por flanco con entradas asíncronas de set y clear ...... 79 Autocuestionario (a rellenar ANTES de la sesión de laboratorio)........................ 81 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) .......... 81 6.
Práctica 6:Camino de datos ............................................................................ 83 Introducción ........................................................................................................... 83 Objetivos ................................................................................................................ 83 Desarrollo de la práctica....................................................................................... 84 Multiplicador binario ......................................................................................... 84 Diseño de la ruta de datos del multiplicador binario de 4 bits....................... 84 Diseño de la unidad de control del multiplicador binario de 4 bits ............... 87 Diseño del multiplicador binario de 4 bits ..................................................... 90 Realización práctica ........................................................................................... 90 Implementación de la unidad de control ........................................................ 91 Implementación del camino de datos............................................................. 91 Implementación del multiplicador de 4 bits................................................... 92 Anexo...................................................................................................................... 93 Autocuestionario (a rellenar ANTES de la sesión de laboratorio)........................ 94 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) .......... 94
Errores más frecuentes............................................................................................ 95 Errores generales................................................................................................... 95 Errores en el editor esquemático ........................................................................... 96 Errores en el simulador ......................................................................................... 96 Bibliografía ............................................................................................................... 97
iii
Acerca de las prácticas de Sistemas Digitales Este manual de prácticas ha sido diseñado para cubrir los objetivos prácticos de laboratorio de la asignatura de Sistemas Digitales de la titulación de Ingeniero Técnico en Informática de Sistemas. En esta asignatura los contenidos prácticos tienen una carga lectiva de 30 horas (3 créditos). Este material docente puede utilizarse también para la asignatura Sistemas Digitales de la Ingeniería en Informática, puesto que tiene una carga lectiva práctica de 30 horas. Sin embargo, para poder utilizar este material en la asignatura de Fundamentos de Computadores I de Ingeniería Técnica en Informática de Gestión, que tiene una carga lectiva práctica de 15 horas, es preciso realizar una adaptación consistente en la eliminación de los apartados avanzados de diseño, cubriendo así los mismos contenidos, pero en menor profundidad. En la asignatura de Sistemas Digitales cada alumno recibe 2 horas a la semana de docencia práctica en el laboratorio. El objetivo de estas prácticas es complementar la docencia teórica y de problemas, acercando al alumno a la realidad del proceso de diseño digital, tanto de sistemas combinacionales como secuenciales. El cuatrimestre está pensado de tal manera que realicemos varias prácticas de laboratorio, cada una de ellas dividida en una o varias sesiones semanales de 2 horas cada una. El manual de prácticas propone la realización de seis prácticas de laboratorio, cuyos temas abarcan la mayoría de los contenidos prácticos de la asignatura. Las prácticas propuestas son las siguientes: •
Práctica 1: Introducción a las herramientas de diseño. Es una práctica introductoria cuyos objetivos son presentar la herramienta de diseño, dar una introducción a las puertas lógicas e igualar el nivel de conocimientos práctico básico de los alumnos en cuanto al manejo de un computador personal. Tiene asignadas 8 horas de laboratorio. Aunque pueda parecer una duración excesiva, hay que tener en cuenta que la asignatura de Sistemas Digitales se imparte en el primer cuatrimestre de primer curso, lo que supone encontrarnos con alumnos que no tienen los conocimientos informáticos más rudimentarios para trabajar con el sistema operativo. Por ello, es preferible al principio del curso dedicar unas horas a proporcionar los conocimientos informáticos básicos que permiten homogeneizar el nivel de conocimientos previos de la clase. Según hemos constatado con la experiencia, al final este tiempo es tiempo ganado.
•
Práctica 2: Circuitos combinacionales. Los objetivos son introducir al alumno en el estudio de los circuitos combinacionales y adquirir destreza en el manejo de la herramienta de diseño utilizada en las prácticas. La duración de esta práctica es de 4 horas.
•
Práctica 3:Diseño modular y jerárquico. Los objetivos son aprender las técnicas de diseño modular y jerárquico, adquirir destreza en la funcionalidad de la herramienta en cuanto a la captura y simulación de diseños jerárquicos y diseñar y simular circuitos combinacionales complejos. La duración de esta práctica es de 8 horas.
•
Práctica 4: Retardo de puertas. Los objetivos son introducir el concepto de retardo en un circuito, realizar simulaciones de circuitos combinacionales con retardos y determinar la frecuencia de funcionamiento de los circuitos v
Prácticas de Sistemas Digitales basándose en los retardos de las puertas que los componen. La duración de esta práctica es de 2 horas. •
Práctica 5: Elementos de estado. Esta es la primera práctica en la que se estudian componentes secuenciales y los objetivos son realizar el estudio práctico de circuitos secuenciales sencillos como latches y biestables, aprender a manejar cronogramas complejos, estudio de comportamientos oscilatorios y propuesta de patrones de prueba para comprobar el correcto funcionamiento de los circuitos. La duración de esta práctica es de 4 horas.
•
Práctica 6:Camino de datos. La última práctica tiene como objetivo la realización del diseño, verificación y depuración de un circuito secuencial relativamente complejo utilizando gran parte de las técnicas aprendidas en prácticas anteriores (diseño modular y jerárquico, simulación de circuitos combinacionales y secuenciales, etc...). La duración de esta práctica es de 4 horas.
Cada una de las prácticas de Sistemas Digitales descritas anteriormente consiste, grosso modo, en realizar el diseño de un circuito digital, y verificar su correcto funcionamiento. Para ello usaremos el software "Xilinx Foundation 1.5" que nos permitirá introducir el diseño del circuito y posteriormente realizar la simulación del mismo. Cada práctica seguirá las pautas y pasos que se especifican en el guión de la práctica en cuestión. En todos los guiones de prácticas existen las mismas secciones: •
Introducción. Se realiza una breve introducción al tema que es eje central de la práctica.
•
Objetivos. Se definen los objetivos que queremos alcanzar con la realización de la práctica. Es importante saber a dónde queremos llegar para saber si hemos llegado o no.
•
Desarrollo de la práctica. Se explican de forma somera los fundamentos teóricos necesarios para la realización de la práctica, se especifica concretamente qué hay que hacer en la práctica y cuáles son los pasos que hay que seguir para realizarla.
•
Autocuestionario. Está formado por un conjunto de preguntas que el alumno debe responder con anterioridad al inicio de la práctica. En general es suficiente haber realizado una lectura atenta del guión para ser capaz de dar respuesta a cada una de las preguntas.
•
Cuestionario de laboratorio. Para contestar este conjunto de preguntas es necesario haber realizado la práctica, y haber adquirido los conocimientos prácticos que son el objetivo de la misma. No saber contestar a estas preguntas indica que el alumno no ha cubierto los objetivos de la práctica.
•
Anexo: Algunas prácticas tienen una sección titulada "Anexo" que son simplemente algunos diagramas esquemáticos a mayor escala.
Para llevar a cabo un aprovechamiento mayor de las prácticas de laboratorio, añadimos a continuación una guía sobre el proceso que el alumno debe seguir para la realización de una de estas prácticas. Una vez el alumno dispone del enunciado de la práctica, los pasos a llevar a cabo para lograr adecuadamente los objetivos de la misma son los siguientes: vi
Acerca de las prácticas de Sistemas Digitales 1. Realizar una lectura atenta del guión de la práctica, entendiendo lo que allí se explica. Es fundamental comprender qué hay que hacer en la práctica, así como los fundamentos teóricos que se incluyen en el apartado de “Desarrollo de la práctica”. Estos contenidos teóricos ya se han visto en clases teóricas, por lo que si no se entendiesen completamente aconsejamos consultar los apuntes tomados en clase, consultar un libro de los recomendados para esa parte de la asignatura, o consultar al profesor (o profesores) de la asignatura en horas de tutoría. 2. Rellenar el autocuestionario antes de empezar la realización de la práctica. Este autocuestionario les puede ser solicitado en cualquier momento en el laboratorio. 3. Si la práctica requiere la realización de un circuito, entonces realizar el diseño sobre papel antes de ir al laboratorio. 4. Acudir cada semana al laboratorio a realizar la práctica correspondiente con el trabajo previo realizado. Las sesiones de laboratorio están pensadas para introducir en la herramienta gráfica el diseño que han traído sobre papel y para verificar si el diseño es correcto. Caso de no serlo, habrá que realizar modificaciones al diseño original y a continuación comprobar si el diseño es correcto. Estaremos modificando y comprobando, sucesivamente, hasta llegar a un diseño libre de errores que se comporte tal como se solicita en el guión de la práctica. 5. A la par con la realización de la práctica (paso 4), o al final de ella, pero siempre en el laboratorio, se rellenará el cuestionario de la práctica. 6. Es conveniente asistir a clases de prácticas en el laboratorio con un disquete para, en caso de necesidad, poder guardar el trabajo realizado en el disquete. Siguiendo esta guía sobre los pasos que hay que dar para realizar una práctica, garantizamos un éxito total en la consecución de los objetivos prácticos de la asignatura de Sistemas Digitales. Además de las seis prácticas propuestas, éste documento contiene un apéndice final llamado Errores más frecuentes, que contiene una descripción y una guía de pasos a realizar para solucionar los errores más frecuentemente cometidos en la realización de las prácticas de Sistemas Digitales. Los errores están relacionados con la utilización de la herramienta de diseño que usamos en las prácticas, y están clasificado en errores generales, errores en el editor de esquemáticos y errores en el simulador.
vii
1. Práctica 1: Introducción a las herramientas de diseño Índice Introducción 1 Objetivos 2 Desarrollo de la práctica 2 XILINX´s Foundation Series Software 2 Puertas lógicas 3 Realización práctica 3 Paso 1. Iniciar Xilinx 4 Paso 2. Inicio de un nuevo proyecto 5 Paso 3. Captura del diseño utilizando el editor de esquemas 6 Paso 4. Simulación funcional del diseño 10 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 14 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 14
Introducción En términos muy generales, el proceso de diseño de un sistema digital puede definirse como la secuencia de pasos que llevan desde el concepto de un producto digital hasta los esquemas de fabricación que describen cómo hacer dicho producto. Con pequeñas variaciones inherentes a las empresas, a los productos y a las personas, los pasos en este proceso de diseño son la especificación del diseño, el desarrollo de una biblioteca de componentes básicos, la síntesis del diseño, el análisis del diseño, la documentación y la fabricación del circuito. Los diseñadores utilizan normalmente herramientas CAD (Computer Aided Design) para facilitar algunas de las etapas anteriores. Estas herramientas CAD pueden dividirse en cinco categorías diferentes según la forma de usarlas en el proceso de diseño, herramientas para captura y modelado, para síntesis, para verificación y simulación, para ubicación e interconexionado y para generación de pruebas. Las herramientas de captura y modelado permiten al diseñador seleccionar un componente de un menú, situarlo en la pantalla y conectarlo a otros componentes mediante líneas que representan cables. Este tipo de representación estructural recibe el nombre de esquemática y las herramientas que ayudan a esta tarea se denominan herramientas de captura de esquemas. Como alternativa puede utilizarse un lenguaje para la descripción del hardware.
1
Prácticas de Sistemas Digitales Las herramientas de síntesis permiten convertir una descripción de un comportamiento en una descripción estructural que contenga componentes de una biblioteca concreta, tales como FPGA o CPLD. Las herramientas de verificación y simulación permiten probar el diseño. A partir de un conjunto de valores de entrada obtenemos un conjunto de valores de salida. Estos valores sirven al diseñador para compararlos con los valores teóricos de salida indicando si existe alguna discrepancia o error en el proceso de diseño. Las herramientas de ubicación e interconexionado permiten optimizar la situación de los componentes y la posición de cada cable que conecta los componentes. Las herramientas de prueba ayudan a generar el conjunto de patrones de prueba que comprueba tantas combinaciones de entrada como sea posible. En las prácticas de la asignatura Sistemas Digitales usaremos el paquete software “Xilinx´s Foundation Series Software” que nos permitirá realizar muchas de las funciones que acabamos de comentar. Objetivos De manera general, los objetivos de esta primera práctica son los siguientes: 1. Iniciación en el uso de un computador. 2. Estudio de las puertas lógicas. 3. Familiarización con las herramientas de captura de esquemas y simulación funcional. Como puede observarse, los objetivos son de diferente naturaleza. Por una parte, objetivos ajenos a la propia materia de los sistemas digitales, como son la iniciación en el uso del computador y del sistema operativo. Por otra parte, los objetivos relacionados con la materia son el estudio de las puertas lógicas elementales y la familiarización con dos de las herramientas que posteriormente van a utilizarse en las prácticas de la asignatura: la herramienta para la captura de esquemas y la herramienta para la simulación funcional. Desarrollo de la práctica Una vez conocidos los objetivos de la práctica, veamos cómo actuamos para conseguirlos. En primer lugar hemos de proporcionar toda la información teórica necesaria para conocer el tema en el que se va a desarrollar la práctica. A continuación veremos cuáles son los pasos a seguir para realizar la práctica. Como conocimientos teóricos, hemos de saber en primer lugar con qué software vamos a trabajar. Como hemos mencionado anteriormente, las prácticas de Sistemas Digitales las realizaremos con el paquete de desarrollo denominado "Xilinx´s Foundation Series Software", y lo describiremos a continuación. También hemos de conocer un poco mejor lo que son las “puertas lógicas” puesto que trabajaremos con ellas en esta práctica. XILINX´s Foundation Series Software "Xilinx´s Foundation Series Software" es un conjunto de herramientas que constituye un sistema de desarrollo integrado de software y hardware para crear, simular e
2
Práctica 1: Introducción a las herramientas de diseño implementar diseños digitales. Todas las herramientas en este entorno tienen una interfaz gráfica de usuario que facilita el uso de las mismas. Este entorno proporciona herramientas para la captura y modelado tanto esquemática como mediante lenguaje de descripción del hardware, para síntesis combinacional y secuencial, y para la simulación de circuitos digitales. Puertas lógicas Las puertas lógicas son circuitos elementales que realizan operaciones booleanas. Estas operaciones son similares a las conjunciones “o” e “y” (en inglés “or” y “and”) que usamos en el lenguaje natural, y constituyen el componente básico en el diseño con puertas lógicas. Existen siete puertas lógicas básicas, que son NOT, AND, OR, NAND, NOR, XOR, y XNOR. La razón de que sean exactamente estas puertas está fundamentada en criterios de frecuencia de uso, ampliación a más de dos entradas y sencillez de construcción física. Cada una de estas puertas puede describirse funcionalmente bien con una ecuación booleana o bien con una tabla de verdad que relaciona los valores de las señales de entrada y el valor que toma la salida en función de las entradas. En el capítulo 3 de [Floy97] o en la sección 3.8 de [Gajs97] se puede encontrar una descripción exhaustiva acerca de las puertas lógicas. Realización práctica Esta primera práctica es muy simple, así que la especificación del diseño también lo es. La práctica consiste en utilizar las herramientas de captura de esquemas y simulación funcional que ofrece Xilinx para construir un circuito elemental con una puerta lógica y comprobar el funcionamiento del mismo cuando le aplicamos unos ciertos valores de entrada. El circuito que proponemos consta de una única puerta NAND de dos entradas. Una puerta lógica de tipo NAND tiene la representación esquemática de la Figura 1-1.
Figura 1-1 Símbolo de una puerta nand. Dadas dos entradas X e Y, la puerta produce una salida cuyo comportamiento es justamente el contrario a la conjunción “y” que usamos en el lenguaje natural. Por ejemplo, si decimos en lenguaje natural que “el perro es negro y cariñoso”, queremos decir que posee a la vez ambas cualidades. Una puerta AND daría salida Z cierta solamente cuando se presentasen ambas cualidades a la vez. Una puerta NAND daría el resultado contrario, es decir, daría salida cierta cuando alguna de las dos cualidades fuese falsa, o cuando lo fuesen ambas a la vez. Esta misma descripción funcional de la puerta NAND se puede especificar mediante la Tabla 1-1, también podría hacerse con una ecuación.
3
Prácticas de Sistemas Digitales X
Y
Z
0
0
1
0
1
1
1
0
1
1
1
0
Tabla 1-1 Tabla de verdad de una puerta nand. Introduciremos el esquema de este circuito utilizando Xilinx y luego simularemos el funcionamiento del circuito conforme van cambiando las entradas. En los próximos apartados de este guión de prácticas describimos los pasos que hay que seguir para realizar la práctica.
Paso 1. Iniciar Xilinx Para iniciar la herramienta de desarrollo seleccionamos Inicio Æ Programas Æ Xilinx Foundation Series Æ Xilinx Foundation Project Manager. Una alternativa para esta secuencia de selecciones es abrir el icono Xilinx Foundation Project Manager, si el icono está accesible en el escritorio. Aparecerá la ventana principal del manejador de proyectos, la apariencia de esta ventana será similar a la mostrada en la Figura 1-2. La apariencia exacta de la ventana principal del gestor de proyectos depende de cual haya sido el último proyecto en el que se ha estado trabajando o de si es la primera vez que el programa es utilizado.
Figura 1-2 Ventana del gestor de proyectos. Dos de los botones que aparecen en la sección de la derecha, los etiquetados con los nombres “Design Entry” y “Simulation” son los que más utilizaremos en esta práctica y en las sucesivas. El primero nos permite acceder a la herramienta gráfica de captura de diseños y el segundo a la herramienta de simulación lógica.
4
Práctica 1: Introducción a las herramientas de diseño
Paso 2. Inicio de un nuevo proyecto Para empezar a trabajar por primera vez en un diseño es necesario indicar que queremos comenzar un proyecto nuevo. Para ello seleccionamos File Æ New Project, y entonces se abrirá la ventana de inicio de un proyecto nuevo (ver Figura 1-3). Esta ventana sirve para especificar en ella el nombre del proyecto, el directorio donde guardaremos la información sobre este proyecto, el tipo de proyecto y el tipo de captura de esquemas que va a utilizarse. El significado de los otros campos va más allá de los objetivos de esta primera práctica.
Figura 1-3 Ventana de inicio de un proyecto nuevo. Así que rellenamos los campos referentes al proyecto que vamos a comenzar, tal como se muestra en la Figura 1-4. Hemos de elegir un nombre para el nuevo proyecto que comienza. El nombre que le demos es elección personal de cada uno, aunque es aconsejable que sea un nombre significativo de lo que estamos diseñando. En este caso, y puesto que el circuito consta de una única puerta lógica NAND, le daremos el nombre “NAND”. El directorio de trabajo también hemos de especificarlo. En nuestro caso el directorio de trabajo especificado es el C:\XCPROJ\, pero este campo debe ajustarse al directorio de trabajo personal. En cuanto a los otros campos, hemos de elegir la familia XC9500, para esta familia los chips 95108PC84 y entre estos el integrado con velocidad 20 MHz.
Figura 1-4 Inicialización del proyecto NAND. Finalmente validamos el inicio del proyecto con el botón de OK, con lo que volvemos a la ventana anterior, la del gestor de proyectos. La apariencia de la ventana del gestor de proyectos para el proyecto NAND una vez hemos creado el proyecto debe ser similar a la que se muestra en la Figura 1-5.
5
Prácticas de Sistemas Digitales
Figura 1-5 Ventana del gestor de proyectos una vez inicializada.
Paso 3. Captura del diseño utilizando el editor de esquemas Una vez que hemos creado el proyecto, el siguiente paso es capturar el esquema del diseño. Esto significa introducir en la herramienta el circuito que hemos diseñado. Tenemos dos formas de hacerlo, utilizando una herramienta gráfica o utilizando un lenguaje de descripción del hardware. Esta vez utilizaremos la herramienta gráfica para captura de esquemas. Para iniciar la herramienta de edición de esquemas seleccionamos Tool Æ Design Entry Æ Schematic Editor o directamente picamos . Entonces se ejecuta el editor de esquemas que tiene una apariencia en el botón como la que se muestra en la Figura 1-6.
Figura 1-6 Ventana del editor gráfico de esquemas. La ventana de edición de esquemas permite la colocación de los símbolos gráficos que representan a las puertas lógicas y de los símbolos que identifican las entradas y las salidas del circuito. 6
Práctica 1: Introducción a las herramientas de diseño El editor tiene distintos modos de funcionamiento. En cada uno de ellos permite realizar un tipo de acción diferente: seleccionar componentes, situar puertas, situar entradas o salidas, situar cables para unir terminales, etc. En primer lugar situaremos la puerta NAND, para ello pondremos al editor de esquemas en el modo de situar símbolos, seleccionando Mode Æ Simbols. Otra manera de hacerlo es usando el botón . De cualquiera de las dos formas aparecerá la ventana de símbolos lógicos, que tiene el aspecto que se muestra en la Figura 1-7.
Figura 1-7 Ventana de símbolos lógicos. Para situar la puerta NAND, movemos la barra de desplazamiento en la ventana de selección de símbolos lógicos hasta encontrar la palabra NAND; la lista está ordenada alfabéticamente. Picamos sobre la palabra NAND2 para seleccionarla y entonces situamos el cursor sobre el área de dibujo. Veremos el símbolo de la puerta NAND moverse junto con el cursor. Simplemente pulsamos sobre el área de dibujo para situar la puerta NAND. Para cambiar desde cualquier modo al modo selección pulsa la tecla “Esc” (normalmente está situada en la parte superior izquierda del teclado). Es necesario añadir ahora entradas y salidas al circuito. Para hacer esto tenemos dos formas, o bien vamos a la parte izquierda de la ventana de edición de esquemas y de la barra de herramientas o bien vamos a la parte superior pulsamos el botón de la ventana de símbolos lógicos y pulsamos el botón de la barra de herramientas. Aparecerá una ventana de diálogo en la cual hemos de escribir el nombre y el tipo de cada terminal. De forma general se denomina terminal a una entrada o a una salida de una puerta lógica. En primer lugar situaremos una entrada que llamaremos “X”. Tal como se muestra en la Figura 1-8, seleccionamos INPUT para el tipo de terminal, indicándole así que es una entrada, y rellenamos el campo del nombre del terminal con una “X”. Para situar el terminal de entrada pulsa en el área de dibujo. Repetiremos este proceso para situar otro terminal de entrada de nombre “Y”.
7
Prácticas de Sistemas Digitales
Figura 1-8 Ventana para la entrada X. A continuación situaremos el terminal de salida, tal como se muestra en la Figura 1-9. Para ello seleccionamos nuevamente el botón , pero en este caso rellenamos el campo del nombre del terminal con “Z” y seleccionamos un terminal de tipo OUTPUT. El proceso para situar las salidas en el esquema es similar al proceso para situar las entradas. La única diferencia es el tipo de terminal.
Figura 1-9 Ventana para la salida Z. El aspecto del área de dibujo de la ventana de edición de esquemas después de añadir las señales de entrada y salida será similar al de la Figura 1-10.
Figura 1-10 Esquema del circuito tras añadir la puerta NAND y los terminales de entrada y salida. El siguiente paso es conectar los símbolos entre sí. El editor de esquemas está en el modo de dibujar símbolos, y antes que nada es necesario cambiarlo al modo de trazado de conexiones. Para cambiar el editor a este modo de funcionamiento seleccionamos Mode Æ Draw Wires, o bien pulsamos el botón . A continuación pulsamos en el símbolo de la entrada “X” y luego en el terminal de entrada superior 8
Práctica 1: Introducción a las herramientas de diseño de la puerta NAND. Esta acción unirá ambos terminales. Haremos exactamente lo mismo con el terminal de entrada “Y” y el terminal inferior de la puerta NAND. Finalmente conectaremos el terminal de salida “Z” a la salida de la puerta NAND. El esquema está ahora terminado y el aspecto final del diseño será equivalente al de la Figura 1-11.
Figura 1-11 Esquema completo del circuito. Como hemos terminado la captura del esquema lo más prudente es que lo guardemos seleccionando File Æ Save antes de seguir adelante. La siguiente operación a realizar consiste en comprobar si existen errores de conexión. Este es un proceso que consta de dos pasos, el primer paso crea una representación intermedia del circuito llamada “netlist” que describe los tipos de puertas y las conexiones, y el segundo paso comprueba los errores usando esta “netlist”. Para hacerlo seleccionamos primero Options Æ Create Netlist para crear la “netlist” y luego seleccionamos Options Æ Integrity Test para iniciar la comprobación de errores. La comprobación debe indicar que no hay errores en el esquema. Ahora que hemos terminado el esquema podemos pasar a la siguiente parte de la práctica que consiste en simular el funcionamiento del circuito diseñado. Para ello hemos de usar una parte diferente del Xilinx, así que tenemos que exportar el diseño. Esto es necesario porque las distintas parte del Xilinx se comunican a través de las netlist, que son la forma interna de especificar el diseño. La netlist se genera a partir del esquema y contiene información que otros programas son capaces de entender. Para exportar la netlist primero seleccionamos Options Æ Export Netlist. Con esto aparecerá la ventana para la exportación de netlist que se muestra en la Figura 1-12. En esta ventana seleccionamos el formato en que vamos a especificar la netlist, de entre la lista de formatos existentes. En este caso seleccionamos Edif 200[*.EDN] de la lista de formatos, y pulsamos el botón Abrir. Con ello se creará un fichero con nombre nand.alb que es una representación de la netlist en el formato EDIF 200. Este archivo es el que utilizaremos como entrada a otros módulos.
9
Prácticas de Sistemas Digitales
Figura 1-12 Ventana para exportar una netlist en formato EDIF 200. Ya hemos terminado todo el trabajo a realizar en el editor de esquemas, por lo que regresaremos al gestor de proyectos seleccionando File Æ Exit. Hasta ahora hemos creado un esquema de un circuito, pero no hemos especificado todavía que ese esquema forma parte del proyecto actual. Para especificarlo seleccionamos Document Æ Add, con lo que aparece la ventana de la Figura 1-13. Pulsamos entonces sobre el fichero nand.sch y luego en el botón Abrir.
Figura 1-13 Ventana para añadir un fichero de esquema al gestor de proyectos.
Paso 4. Simulación funcional del diseño Una vez finalizada la captura del esquemático pasamos al proceso de simulación. La simulación del circuito sirve para comprobar el funcionamiento del mismo. Para iniciar el simulador picamos directamente en el botón simulation en la ventana del gestor de proyectos. Aparece entonces la ventana de simulación lógica funcional y una ventana vacía de visualización de señales, tal como se muestra en la Figura 1-14.
10
Práctica 1: Introducción a las herramientas de diseño
Figura 1-14 Ventanas del simulador lógico funcional y visualización de señal. Simular un circuito consiste en aplicar valores a las entradas del circuito y visualizar qué valor toma la salida. Para ellos tenemos que poder “ver” de alguna manera las entradas del circuito (y poder cambiarles su valor) y también la salida. Lo primero que hacemos es añadir las entradas y salidas de nuestro circuito a la ventana de visualización de señales para poder ver qué va ocurriendo en el circuito. Para hacer esto seleccionamos Signal Æ Add Signals. Entonces aparecerá la ventana que permite elegir las entradas a visualizar, tal como muestra la Figura 1-15. Pinchamos la entrada X y luego pulsamos el botón Add, y repetimos estos dos pasos para la entrada Y y la salida Z. Las señales que ya han sido puestas en la ventana de visualización de señales aparecen marcadas en la ventana para añadir señales. Hemos terminado de añadir terminales así que pulsamos en el botón Close para cerrar esta ventana.
Figura 1-15 Añadiendo señales a la ventana de visualización. Ahora las tres señales X, Y y Z pueden verse en la ventana de visualización de señales, aunque todavía no ocurre nada con ellas. Para realizar la simulación aplicamos estímulos a las señales de entrada. Para añadir un estímulo seleccionamos Signal Æ Add Stimulators y aparecerá la ventana de selección de estímulos de la Figura 1-16. En esta ventana existen varios botones. Nosotros sólo usaremos por ahora el contador binario de 16 bits etiquetado BC. Durante una simulación, los 2 bits menos significativos (los que están situados más a la derecha) de este contador siguen de manera cíclica la secuencia 00, 01, 10 y 11. 11
Prácticas de Sistemas Digitales Estas son todas las combinaciones que se pueden producir en las entradas de la puerta NAND: que las dos entradas estén a 0, que las dos estén a 1, o que sólo una de las dos esté a 1. Bastará entonces con asignar cada uno de estos bits a cada una de las entradas del circuito.
Figura 1-16 Ventana de selección de estímulos. Asociaremos a la entrada X de nuestro circuito el estímulo correspondiente al bit 0 del contador binario, para ello pulsamos en la entrada X para seleccionarla y luego en el botón circular de color amarillo correspondiente al bit 0. Repetimos este paso con la entrada Y y el bit 1 del contador. El nombre del estímulo asociado a cada entrada aparece a la derecha del nombre de la entrada. Una vez hecho esto, cerramos la ventana de selección de estímulos pulsando el botón Close. Antes de comenzar la simulación tenemos que fijar los parámetros de simulación. Existen varios parámetros. De entre todos ellos los más significativos son el período del contador (que fija la velocidad a la que van cambiando las señales de entrada) y la precisión de la simulación. Seleccionamos Options Æ Preferences y fijamos los valores de los campos de acuerdo con los valores mostrados en la Figura 1-17. Los valores diferentes a los mostrados por defecto son el período del contador, “B0 Period”, que lo pondremos a 20 ns, y la desactivación de la opción “Transport Delay”. Esto último se hace para indicar al simulador que estamos realizando una simulación lógica y que no tenga en cuenta los detalles de implementación física del circuito. Pulsamos entonces en el botón de OK para hacer efectivos estos parámetros de simulación.
Figura 1-17 Ventana para fijar los parámetros de simulación. Para comenzar la simulación pulsamos en el botón . Después de varios segundos, el resultado de la simulación aparece en la ventana de visualización de señales, tal como se muestra en la Figura 1-18. Es posible que el resultado no se vea correctamente y que se tenga que aumentar o disminuir el factor de escala de 12
Práctica 1: Introducción a las herramientas de diseño visualización, usando los botones y . A pesar de que se vea bien, usen estos botones y vean qué efecto producen en la ventana de visualización de señales.
Figura 1-18 Resultado de la simulación En esta ventana vemos las señales de entrada del circuito dibujadas en negro, y la señal de salida dibujada en azul. Vemos la entrada X asociada al bit 0 (B0) del contador y la entrada Y asociada al bit 1 (B1) del contador. El valor 0 en la entrada se representa con la línea de entrada por debajo de la línea punteada. El valor 1 se representa con la línea de entrada por encima de la línea punteada. Esto se muestra de esta manera porque es así como ocurre en la implementación física del circuito. Los circuitos digitales funcionan con tensión eléctrica en las entradas, de forma que los valores 0 y 1 indican la ausencia o presencia de tensión eléctrica en la entrada. Un 0 indica que no hay voltaje (por ejemplo, 0 voltios), y un 1 indica que hay voltaje (por ejemplo, 5 voltios). La simulación comienza en tiempo 0 ns. En ese instante las dos entradas tienen valor 0, y la salida tiene valor 1. Luego cambia la entrada X a valor 1 y la salida sigue siendo 1. A continuación cambian ambas entradas y la salida sigue siendo 1. Por último, cuando ambas entradas valen 1 la salida pasa a ser 0. Esto define un ciclo completo. A continuación vuelven a repetirse cíclicamente los valores de las entradas, con lo cual la salida vuelve a tomar también cíclicamente los mismos valores. Finalmente guardamos el resultado de la simulación seleccionando File Æ Save Simulation State y tras guardar la simulación en el archivo nand.des, hemos terminado la práctica por lo que abandonamos el programa de simulación seleccionando File Æ Exit, y salimos también del gestor de proyectos seleccionando File Æ Exit.
13
Prácticas de Sistemas Digitales
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 1. ¿Qué objetivo te parece el más importante de la práctica? 2. ¿Qué es una puerta lógica? 3. Dibuja el símbolo gráfico correspondiente a la puerta lógica NAND suponiendo que tiene dos entradas. 4. ¿Qué circuito vamos a diseñar en esta práctica? ¿Cuál es su tabla de verdad? 5. ¿Qué significa capturar el esquema del diseño? 6. ¿Para qué sirve simular el comportamiento del circuito? Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 1. ¿Cómo se comprueba si un diseño esquemático tiene errores? 2. ¿Qué es una “netlist”? 3. ¿Cuál es el resultado final del diseño esquemático? 4. ¿Cómo se añaden las terminales de entrada y salida a la simulación? 5. ¿Cómo se conectan estímulos a los terminales de entrada? 6. ¿Tiene sentido conectar un estímulo a un terminal de salida? ¿Por qué? 7. ¿Cuáles son los parámetros más significativos en la simulación y para qué se utilizan?
14
2. Práctica 2: Circuitos combinacionales Índice Introducción 15 Objetivos 15 Desarrollo de la práctica 16 Sumador binario de un bit 16 Realización práctica 17 Realización de un sumador binario de un bit 17 Realización de un sumador binario de 2 bits 20 Realización de un sumador binario de 8 bits 25 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 29 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 29
Introducción Los circuitos combinacionales son aquellos circuitos digitales en los cuales los valores de la salida en un instante cualquiera únicamente dependen de los valores de las entradas en ese instante, sin importar cuales han sido las entradas en los instantes de tiempos anteriores. En esta segunda práctica capturaremos mediante el editor de esquemas la estructura de un circuito digital combinacional sencillo y simularemos su comportamiento. A posteriori, lo extenderemos aumentando su complejidad. Objetivos De manera general, los objetivos de esta segunda práctica son los siguientes: 1. Estudio de los circuitos combinacionales. 2. Adquisición de destreza en la captura de diseños esquemáticos complejos. 3. Profundización en las posibilidades avanzadas de las herramientas de diseño. 4. Manejo de vectores de prueba complejos. 5. Ilustrar la necesidad del diseño jerárquico y de otras técnicas de captura de esquemas. En esta práctica comenzaremos realizando la captura y simulación de un circuito combinacional correspondiente a un sumador binario de 1 bit. Este esquema lo verificaremos mediante la herramienta de simulación. En un segundo paso extenderemos el sumador binario de un único bit para que sea posible la suma de números de dos bits, y finalmente extenderemos el sumador a 8 bits. Este circuito 15
Prácticas de Sistemas Digitales final usará aproximadamente 100 puertas lógicas y 150 conexiones, requiriendo del alumno destreza a la hora de la captura del esquema. Por otra parte un sumador binario de 8 bits tiene 16 entradas y 9 salidas, dando un total de 25 señales a visualizar. Para facilitar su visualización es necesario ahondar en las posibilidades de representación que ofrece la herramienta. También puesto que para la suma de dos números binarios de 8 bits existen en total 65536 posibilidades diferentes en las entradas, también notaremos la necesidad de utilizar estrategias para asignar los estímulos a las señales de entrada, más allá de la simple asignación de entradas a estímulos mostrada en la práctica anterior. Finalmente veremos lo inadecuado de utilizar este método de diseño si queremos escalar el sumador hasta 64 bits. A pesar de que el escalado del circuito es muy fácil de manera conceptual, usar la simple replicación nos lleva a una forma de trabajar muy engorrosa por el tedio que supone trabajar con circuitos muy voluminosos. Con ello introduciremos la necesidad del diseño jerárquico y de otras herramientas de captura. Desarrollo de la práctica Sumador binario de un bit El diseño a realizar en esta práctica es el circuito combinacional correspondiente a un sumador completo de un bit y su expansión a 2 y 8 bits. Un sumador binario de un bit es un circuito combinacional con tres entradas y dos salidas. Los nombres de las tres entradas son: INPUT0 e INPUT1, que corresponden a los bits a sumar, y CARRY_INPUT, que es el bit de acarreo. Los nombres de las salidas son SUM y CARRY_OUTPUT, siendo SUM el resultado de la suma binaria y CARRY_OUPUT el acarreo de salida. Entradas del circuito
Salidas del circuito
INPUT0
INPUT1
CARRY_INPUT
SUM
CARRY_OUTPUT
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
º
1
1
1
1
Tabla 2-1 Tabla de verdad correspondiente a un sumador binario de un 1 bit. El funcionamiento de este circuito puede describirse usando una tabla de verdad. Una tabla de verdad es una representación tabular de las entradas y las salidas del circuito, en la cual cada fila de la tabla posee una de las posibles combinaciones de entrada del circuito y el valor de las salidas correspondiente a esas entradas. La Tabla 2-1 es la tabla de verdad para el circuito sumador binario. En ella se ve, por ejemplo, que 16
Práctica 2: Circuitos combinacionales para la combinación de entrada correspondiente a INPUT0 = 1, INPUT1 = 0, CARRY_INPUT = 1, la combinación de salida es SUM = 0 y CARRY_OUPUT = 1. Mediante técnicas basadas en el álgebra de Boole es posible obtener una representación equivalente del comportamiento del circuito mediante ecuaciones algebraicas que relacionan las salidas del circuito con sus entradas. En el caso de un sumador binario de un bit estas ecuaciones son las siguientes: SUM = INPUT 0 ⊕ INPUT 1 ⊕ CARRY _ INPUT CARRY _ OUT = INPUT 0 ∗ INPUT 1 + CARRY _ INPUT * ( INPUT 0 ⊕ INPUT 1) En las ecuaciones anteriores los símbolos matemáticos ⊕, * y + corresponden respectivamente a las operaciones lógicas de XOR, AND y OR, que como vimos en la primera práctica son algunas de las funciones lógicas básicas (puertas lógicas), y que tienen asociadas unos símbolos gráficos que posibilitan la representación esquemática de las ecuaciones anteriores. Así, a las ecuaciones anteriores les corresponde el esquema de la Figura 2-1.
Figura 2-1 Representación esquemática de un sumador binario de 1 bit. Realización práctica Llegados a este punto es de vital importancia recordar lo aprendido en la práctica anterior, ya que los primeros pasos a realizar (para iniciar la herramienta, crear el proyecto, capturar el esquema, …) son los que vimos allí. Dado que no es preciso memorizar cada detalle, es un buen consejo tener a mano el guión de la primera práctica. La realización práctica consta de tres pasos, en el primero realizaremos un sumador binario de un bit y simularemos su comportamiento. En el segundo realizaremos un sumador binario de dos bits y en el tercero un sumador binario de ocho bits.
Realización de un sumador binario de un bit Primero, creamos un proyecto cuyo nombre sea ADD1_95, rellenando los campos para la creación de un nuevo proyecto tal y como se muestra en la Figura 2-2. En el campo directorio debes hacer referencia a tu directorio personal de trabajo.
17
Prácticas de Sistemas Digitales
Figura 2-2 Iniciación del proyecto de un sumador binario de 1 bit. A continuación iniciamos la herramienta gráfica para la captura de esquemáticos y capturamos el diseño de la Figura 2-3. Este esquema no es igual que el esquema de la Figura 2-1, pero la funcionalidad es exactamente la misma.
Figura 2-3 Esquema para el sumador binario de un bit. Cabe resaltar que en este esquema hay dos símbolos que no corresponden a puertas lógicas, cuyos nombres son IBUF y OBUF, y que están situados a continuación de los terminales de entrada y antes de los terminales de salida. Estos símbolos corresponden a buffers de entrada y salida e indican a la herramienta que las señales conectados a ellos corresponderán con entradas y salidas de un chip FPGA. Guardamos el esquema con el nombre ADD1.SCH. Para ello utilizamos la opción FileÆSave As y rellenamos los campos de la ventana con los valores indicados en la Figura 2-4. Finalmente picamos en el botón Aceptar.
18
Práctica 2: Circuitos combinacionales
Figura 2-4 Ventana para guardar el esquema con otro nombre. Una vez que hemos finalizado el esquema generamos una netlist usando la opción OptionsÆCreate Netlist... y la exportamos en el formato EDIF 200 usando la opción del menú principal OptionsÆExport Netlist... Antes de exportar la netlist podemos comprobar que todo es correcto seleccionando OptionsÆIntegrity Test. Finalmente abandonamos el editor de esquemas con FileÆExit. Ahora debemos comprobar que el sumador funciona correctamente. Picamos en el , en la ventana del gestor de proyectos para iniciar el simulador. Una vez botón en él, usamos SignalÆAdd Signals... para añadir las entradas y salidas en la ventana de visualización de señales. Luego, seleccionando SignalÆAdd Stimulators... conectamos las entradas a los tres bits inferiores del contador binario (Bc0, Bc1, en la barra de herramientas del simulador Bc2). Finalmente, picamos en el botón lógico y aparecerán las señales de entrada y salida de una manera similar a la mostrada en la Figura 2-5. Usamos los botones y así como los desplazadores horizontales y verticales en la ventana de visualización de señales para obtener una buena imagen de las señales.
Figura 2-5 Simulación del sumador binario de un bit. Ahora hemos de comprobar que el resultado de la simulación coincide con el del sumador binario de un bit, usando para ello la tabla de verdad de la Tabla 1. Si no es así, revisamos el diseño esquemático en busca del error y volvemos a realizar la simulación. Cuando el resultado de la simulación sea correcto guardamos el estado de la simulación seleccionando FileÆSave Simulation State y cerramos la herramienta de simulación con FileÆExit. 19
Prácticas de Sistemas Digitales
Realización de un sumador binario de 2 bits Llegados a este punto vamos a construir un sumador binario de dos bits. Teóricamente a partir de un sumador binario de un bit es posible construir un sumador binario de dos bits únicamente encadenando dos de ellos. Encadenar significa conectar las salida CARRY_OUPUT del sumador binario del bit menos significativo a la entrada CARRY_INPUT del segundo sumador. Comenzamos este segundo paso creando un proyecto de las misma características que el ADD1_95, pero con nombre ADD2_95. Una vez creado vamos a aprovechar el diseño esquemático anterior y así evitaremos una nueva captura desde el principio del diseño. Seleccionamos DocumentÆAdd... y buscamos el fichero esquemático anterior en el proyecto ADD1_95, tal como se muestra en la Figura 2-6.
Figura 2-6 Ventana para añadir el esquema add1.SCH del proyecto Add1_95 al proyecto Add2_95. Iniciamos el editor de esquemas, usando el botón , o bien en la ventana principal del gestor de proyectos, seleccionando ToolsÆDesign Entry Æ Schematic Editor. Para mayor claridad guardamos el esquema con el nombre ADD2.SCH indicando con este nombre que el esquema corresponde a un sumador de dos bits. Para ello seleccionamos File->Save As... y en el campo del nombre del archivo escribimos ADD2.SCH. Un sumador binario de dos bits tiene la misma estructura que un sumador binario de un bit, replicada dos veces. Para copiar esta estructura colocamos primero el editor de esquemáticos en el modo de selección, con la opción del menú principal ModeÆSelect and Drag. Seleccionamos entonces todo el diseño. Marcamos un recuadro con el ratón alrededor del esquema, picando primero con el botón izquierdo en la esquina superior izquierda de un área imaginaria que vaya a contener todo el dibujo y moviendo el ratón hasta la esquina inferior derecha de esa área. Si lo hemos hecho bien tendremos que ver todos los componentes del esquema seleccionados en color rojo. A continuación copiamos en el portapapeles el esquema usando en la barra del menú principal la opción EditÆCopy y luego lo recuperamos del portapapeles con la opción EditÆPaste. Aparecerá entonces un recuadro que contiene todo el diseño en su interior, tal y como se muestra en la Figura 2-7. Movemos el recuadro debajo de los componentes que ya tenemos situados, de manera que no se solapen entre sí, y lo situamos definitivamente picando con el botón izquierdo. Si lo hemos hecho mal,
20
Práctica 2: Circuitos combinacionales todavía tenemos una oportunidad de deshacer los cambios seleccionando en el menú EditÆUndo.
Figura 2-7 Editor de esquemas tras la operación de pegado. Hemos de fijarnos en que los dos bloques de diseño son exactamente iguales. Tanto es así que hasta los nombres de las entradas y las salidas son iguales. Obviamente, los nombres de las salidas no deben coincidir si corresponden a diferentes salidas. Por ello procederemos a renombrar todas las entradas y las salidas. Para el bloque sumador del bit menos significativo utilizaremos para las entradas los nombres X0, Y0 y CI0, y para las salidas los nombres S0, CO0. La manera de cambiar el nombre asociado a un terminal es picar dos veces rápidamente sobre el terminal. Entonces la herramienta abrirá el cuadro de diálogo correspondiente al terminal, según muestra la Figura 2-8, y en el campo correspondiente al tipo de terminal escribiremos el nuevo nombre del terminal.
Figura 2-8 Ventana para cambiar el nombre a los terminales de entrada y salida. Cambiamos el nombre de los terminales para el bloque sumador correspondiente al segundo bit, pasando a llamarse ahora X1, Y1, CI1, S1 y CO1. El resultado final de todo este cambio de nombres es un esquema equivalente al de la Figura 2-9.
21
Prácticas de Sistemas Digitales
Figura 2-9 Esquema tras haber cambiado los nombres de los terminales Algunos terminales en el esquema del sumador binario de dos bits son diferentes a los terminales en el sumador binario de un bit. En concreto tenemos que realizar un encadenamiento de los acarreos entre las etapas, es decir, tenemos que unir la señal CO0 con CI1, y estas señales quedarán como señales internas al diseño. Esto quiere decir que desde un punto de vista externo carecen de significado. Por ello, hemos de eliminarlos. Para borrar cualquier componente primero lo seleccionamos con el ratón picando con el botón izquierdo y luego pulsamos la tecla Suprimir. Hacemos este proceso para borrar el OBUF asociado al terminal CO0, el propio terminal CO0, el IBUF asociado al terminal CI1 y el terminal CI1. Conectamos entonces la salida y la entrada de las puertas lógicas donde antes estaban conectados los terminales CO0 y CI1. El esquema final debe ser equivalente al de la Figura 2-10.
22
Práctica 2: Circuitos combinacionales
Figura 2-10 Esquema final del sumador binario de dos bits. Creamos ahora una netlist usando OptionsÆCreate Netlist... y la exportamos en el formato EDIF 200 usando la opción del menú principal OptionsÆExport Netlist... Antes de exportar la netlist comprobamos que todo es correcto con OptionsÆIntegrity Test. Finalmente abandonamos el editor de esquemas con FileÆExit. Ahora debemos comprobar que el sumador funciona correctamente. Picamos en el botón de la ventana del gestor de proyectos para iniciar el simulador. Una vez en él, usamos SignalÆAdd Signals... para añadir las entradas y salidas en la ventana de visualización de señales. Añadimos las señales a visualizar en el siguiente orden: en primer lugar CI0, después las correspondientes al número X (el número formado al concatenar las señales X1 y X0), luego las correspondientes al número Y (el número formado al concatenar las señales Y1 e Y0), y finalmente el acarreo de salida CO1. Luego, con SignalÆAdd Stimulators... conectamos CI0 al estímulo 0. Sólo tenemos que pulsar el botón cero en la ventana para añadir estímulos. Asociamos X0, X1, Y0 e Y1 respectivamente con las entradas a los cuatro bits inferiores del contador binario (Bc0, Bc1, Bc2 y Bc3). Finalmente, picamos al menos dos veces en el botón de la barra de herramientas del simulador lógico y aparecerán las señales de entrada y salida de una manera similar a la Figura 2-11. Usando los botones y , así como los desplazadores horizontales y verticales en la ventana de visualización de señales obtendremos una buena imagen de las señales.
23
Prácticas de Sistemas Digitales
Figura 2-11 Resultado de la simulación del sumador binario de dos bits. La comprobación de que la captura del esquemático ha sido correcta en este caso no es sencilla, ya que no tenemos una tabla de verdad para él que nos permita hacerlo de forma fácil. Tendríamos que obtener una tabla de verdad con cuatro entradas, y para cada una de esas posibles 16 combinaciones de entrada comprobar si sus salidas son las adecuadas. Por supuesto que este forma de verificación es inviable si los sumadores son de ocho bits, ya que implicaría 256x256 combinaciones de entrada diferentes. Para resolver estas dificultades la herramienta permite agrupar las señales. Una agrupación de señales recibe el nombre de BUS. Vamos a organizar las señales en buses, uno para la señal de entrada X, otro para la entrada Y y un tercero para la salida. Seleccionamos X0, y después, picando con el ratón sobre el nombre de la señal X1, a la vez que mantienes pulsada la tecla shift (la tecla para escribir con letras mayúsculas) ambas señales, la X0 y X1, deben aparecer seleccionadas con una franja azul. En el menú principal de la herramienta de simulación seleccionamos la opción SignalÆBusÆCombine y ya hemos agrupado las señales X0 y X1 en un bus. Repetimos este proceso para formar otros buses con las otras entradas Y0 e Y1 y con las señales de salida S0, S1 y CO1, ver la Figura 2-12.
Figura 2-12 Ventana de visualización de las señales tras definir los buses para las entradas y las salidas. Es posible cambiar el nombre de los buses simplemente seleccionando el nombre del bus al cual queremos cambiar el nombre. Luego seleccionamos SignalÆBusÆBus Name... y escribimos el nuevo nombre. También es posible cambiar el formato de representación de los valores en los buses a binario, octal, decimal o hexadecimal. Para cambiar un valor, por ejemplo a binario, primero seleccionamos el bus y luego 24
Práctica 2: Circuitos combinacionales usamos la opción SignalÆBusÆBinary. En la Figura 2-13 se muestra el resultado de cambiar los nombres a los buses y mostrar el valor en cada instante de simulación en binario.
Figura 2-13 Visualización de las señales organizadas en buses y representadas en binario. Una vez hemos llegado hasta aquí comprobamos que el resultado de la simulación coincide con lo esperado de un sumador binario de 2 bits. Si no es así, revisamos el diseño esquemático en busca del error y volvemos a realizar la simulación. Cuando el resultado de la simulación sea el correcto guardamos el estado de la simulación con FileÆSave Simulation State y cerramos la herramienta de simulación con FileÆExit.
Realización de un sumador binario de 8 bits Ahora vamos a capturar el esquema de un sumador binario de ocho bits y posteriormente lo vamos a simular. Los pasos son similares a los dados en los diseños de los sumadores de un bit y de dos bits. Creamos un proyecto con nombre ADD8_95 con las mismas características de los anteriores. Añadimos el esquema ADD2.SCH al proyecto. Iniciamos el editor de esquemático y en primer lugar guardamos el nuevo diseño con el nombre ADD8.SCH. Seleccionamos todos los componentes del esquema y los copiamos en el portapapeles, los recuperamos y los situamos para obtener los bloques necesarios para un sumador binario de 4 bits. Repetimos estos pasos para conseguir los bloques de 6 y 8 bits, tal como muestra la Figura 2-14.
25
Prácticas de Sistemas Digitales
Figura 2-14 Ejemplo de situación de los sumadores de 2 bits para diseñar un sumador de 8 bits. Renombramos cada uno de los terminales de entrada con los nombres X0..X7, Y0..Y7, el terminal de salida también lo renombramos con S0..S7 y al acarreo de la última etapa CO7. Borramos los terminales y los buffers asociados con los acarreos intermedios y propagamos el acarreo entre los diferentes bloques. El esquema será similar al mostrado en la Figura 2-15. En este esquema el orden entre los bloques viene dado por la numeración de arriba abajo y luego de izquierda a derecha. Creamos la netlist y la exportamos con formato EDIF200.
26
Práctica 2: Circuitos combinacionales
Figura 2-15 Esquema final del sumador binario de 8 bits. A continuación iniciamos el simulador. Añadimos las señales por este orden, CI0, X0...X7, Y0...Y7, S0..S7 y CO7. Asociamos el estímulo 0 con CI0, X0 con Bc0, X1 con Bc1, y así sucesivamente hasta X7 con Bc7. También asociamos Y0 con Bc8, Y1 con Bc9,…, y finalmente Y7 con BcF. Agrupamos las señales X0 ...X7 para formar el bus X, las señales Y0...Y7 para formar el bus Y, y las señales S0...S7 y CO7 para formar el bus SUM. Cambiamos el modo de visualización de los buses a decimal. Para visualizar los resultados de esta simulación tenemos que realizar una simulación de bastante tiempo, pues hemos de dar tiempo a que se presenten todas combinaciones en las entradas. Para ello seleccionamos en el menú OptionsÆStart Long Simulation. En la ventana de diálogo seleccionamos un minuto, tal como muestra la Figura 2-16; este es el tiempo que el simulador estará calculando valores, no el tiempo de simulación. El resultado de la simulación debe ser similar al mostrado en la Figura 2-17.
Figura 2-16 Ventana para fijar el tiempo de simulación. Si el resultado es correcto, guardamos los resultados, pero si no es así habrá que comprobar el diseño y volver a realizar la simulación. 27
Prácticas de Sistemas Digitales
Figura 2-17 Resultado de la simulación del sumador binario de 8 bits.
28
Práctica 2: Circuitos combinacionales
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 1. ¿Cuál es la tabla de verdad de un sumador binario de dos bits? 2. ¿Qué significa “encadenar” los sumadores binarios de un bit para construir sumadores de más bits? 3. ¿Por qué no es interesante desde el punto de vista de la simulación visualizar los acarreos intermedios? 4. ¿Qué es el tiempo de simulación? 5. ¿Cómo influirá el periodo de la señal Bc0 del contador binario con el tiempo de simulación? 6. ¿Qué es un bus? 7. ¿Por qué el valor de CI0 es 0 en todas las simulaciones excepto en la del sumador binario de un bit? 8. ¿Por qué no hemos fijado el valor de CO7? 9. ¿Cuál es la técnica descrita en el guión de la práctica para reutilizar los diseños? Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 1. ¿Cuántos periodos de la señal Bc0 son necesarios para comprobar todos los posibles valores de las entradas en el sumador binario de 8 bits? 2. ¿Por qué incluimos el bit de acarreo de salida como un bit más en el bus de salida? ¿Qué ocurriría si no lo incluyésemos? 3. ¿Cuál ha sido la característica de visualización que nos ha permitido trabajar con las 18 señales del sumador binario de 8 bits? 4. ¿Crees que utilizando las mismas técnicas podríamos construir sumadores de 16, 32, 64 bits o incluso de más bits? 5. ¿Qué modificación deberíamos añadir al sumador binario de 8 bits para que fuera un sumador en complemento a dos? 6. ¿Por qué ha sido necesario hacer simulaciones fijando el tiempo que el simulador estará calculando valores?
29
3. Práctica 3:Diseño modular y jerárquico Índice Introducción 31 Objetivos 33 Desarrollo de la práctica 33 ALU de 4 bits 34 Realización práctica 37 Realización de un módulo sumador de 1 bit 37 Realización del ampliador aritmético de 1 bit 39 Realización del ampliador lógico de 1 bit 41 Realización de la ALU de 4 bits 42 Simulación de la ALU de 4 bits 45 Realización de la ALU de 32 bits 48 Anexo 49 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 52 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 52
Introducción El diseño de determinados circuitos digitales por métodos puramente formales, tales como la especificación de su funcionamiento mediante una tabla de verdad y su posterior simplificación empieza a ser inviable a medida que aumenta el número de entradas del circuito. Por ejemplo, la especificación de la tabla de verdad para un sumador binario de 8 bits implicaría especificar, para cada una de las 28 x 28 = 65536 combinaciones de entrada, los correspondientes valores de las salidas, lo cual hace impracticable la construcción de dicha tabla de verdad. La solución para la construcción de tales circuitos está en la capacidad humana de descomponer un problema en problemas más simples y luego combinar las soluciones de los problemas más simples para obtener la solución del problema original. Para abordar el diseño del circuito sumador binario de 8 bits, la solución fue considerarlo como cuatro sumadores de dos bits y estos a su vez formados por sumadores de un bit. El resultado es un diseño jerárquico por niveles, tal y como se muestra en la Figura 3-1.
31
Prácticas de Sistemas Digitales
Figura 3-1 Diseño jerárquico de un sumador binario de 8 bits. En el nivel más bajo en complejidad de la jerarquía está el diseño con puertas lógicas para construir el sumador binario de un bit. En el nivel más alto está el sumador binario de 8 bits. Este proceso podría continuar hasta construir un módulo sumador de 32 ó 64 bits que pudiera utilizarse en el diseño de un procesador. Intentar capturar el diseño de un sumador de 32 ó 64 bits mediante las técnicas de copiar y pegar descritas en la práctica anterior, nos conduciría a un diseño con un número masivo de puertas lógicas y conexiones, en el cual la probabilidad de cometer un error sería muy alta. Para prevenir errores sería de gran ayuda poder ocultar los detalles de implementación, definiendo módulos funcionales de los diseños ya capturados y comprobados. Los módulos funcionales pasarían a ser componentes de la biblioteca de símbolos de diseño, que podríamos utilizar de manera similar a las puertas lógicas, pero con una funcionalidad mucho mayor. Posteriormente, podríamos definir nuevos módulos con los ya construidos, dando lugar a un diseño jerárquico. Esta metodología de diseño tiene como principales ventajas: 1. Facilita la reutilización del diseño. Un módulo bien diseñado puede utilizarse en muchos proyectos con el consiguiente ahorro de trabajo. 2. Ocultación de información. Encapsular un diseño en un módulo, ocultando al diseñador los detalles de implementación, facilita el manejo del mismo. Únicamente es necesario conocer la relación entre las entradas y salidas del circuito.
32
Práctica 3:Diseño modular y jerárquico 3. Copia. Construir un circuito copiando muchas veces un módulo funcional que únicamente muestra información de las entradas y salidas es mucho más fácil que replicar otro que contiene todos los detalles acerca de las puertas y las conexiones que lo implementan. 4. Comprobación. La comprobación de un único y gran circuito es mucho más difícil que comprobar un circuito compuesto por módulos que han sido comprobados individualmente. En este último caso, los errores más frecuentes se encuentran en las interfaces entre los módulos. 5. Diseño en equipo. Un diseño modular permite el trabajo en equipo. La definición exacta de las interfaces entre módulos posibilita el trabajo en paralelo de varios diseñadores. Objetivos De manera general, los objetivos de esta tercera práctica son los siguientes: 1. Aprendizaje de las técnicas de diseño modular y jerárquico. 2. Utilización del editor esquemático para la definición de módulos funcionales y captura de esquemas jerárquicos. 3. Diseño de una unidad aritmético lógica compleja. 4. Manejo de múltiples esquemas. 5. Uso de las capacidades de la herramienta para el manejo de buses. 6. Simulación de circuitos complejos. Desarrollo de la práctica En esta tercera práctica vamos a construir una unidad aritmética lógica (ALU, Arithmetic-Logic Unit) de números de 32 bits codificados en complemento a dos o binario, utilizando técnicas de diseño modular y jerárquico. La ALU debe ser capaz de realizar operaciones aritméticas de suma, resta, incremento, decremento, y operaciones lógicas de AND, OR, identidad y complemento entre las entradas. Puesto que las entradas en las operaciones aritméticas están también codificadas en complemento a dos, la ALU debe tener una salida para indicar la situación de desbordamiento. La Figura 3-2 representa el símbolo gráfico de la ALU de 32 bits. Las señales M, S1 y S0 sirven para seleccionar la operación que la ALU debe realizar con los operandos A y B de 32 bits. F son los 32 bits del resultado. La señal CO es el acarreo de salida para las operaciones binarias. Finalmente, la señal desbordamiento indica esta situación en el caso de operaciones de sumas y restas con números representados en complemento a dos.
33
Prácticas de Sistemas Digitales B
A 32
32
CO
1
M
1
Unidad aritmético lógica
1
S0
1
1
32
Desbordamiento
S1
F
Figura 3-2 Símbolo gráfico de una ALU de 32 bits. En las prácticas 1 y 2 el diseño siempre ha sido propuesto en el propio guión de la práctica, siendo el principal trabajo a realizar la captura y simulación del mismo. Esto era así por la falta de conocimientos teóricos previos, que imposibilitaban la propia labor de diseño, y también porque el principal objetivo de las mismas era el aprendizaje de la herramienta. En esta práctica la situación cambia, y al final de la misma se deja parte del diseño a la propia creatividad de cada uno. En primer lugar implementaremos una ALU de 4 bits, y posteriormente realizararemos las modificaciones necesarias para escalar el diseño a 32 bits. ALU de 4 bits Como todas las operaciones aritméticas están basadas en la suma, se puede diseñar una ALU simplemente modificando las entradas de un sumador de acarreo propagado. La lógica de modificación utilizada en las operaciones aritméticas se denomina a veces ampliador aritmético (AE, Arithmetic Extender), y la lógica de modificación utilizada en las operaciones lógicas se denomina ampliador lógico (LE, Logic Extender). Cada uno o ambos ampliadores se conectan a la entrada del sumador, como se indica por las líneas discontinuas de la Figura 3-3. Ahora mostraremos como diseñar estos ampliadores de uno en uno. A3
B3
A E
L E
C4
A2
X3
Y3
X2
Y2
B1
X1
Y1
B0
A E
L E
C1
∑ 1 bit
F2
A0
A E
L E
C2
∑ 1 bit
F3
A1
A E
L E
C3
∑ 1 bit
B2
X0
Y0
C0
∑ 1 bit
F1
F0
Figura 3-3 Sumador de 4 bits con ampliadores aritméticos (AE) y lógicos (LE). Como la ALU en cuestión realiza cuatro operaciones aritméticas y cuatro operaciones lógicas, es necesario introducir una variable de control de modo, M, que 34
Práctica 3:Diseño modular y jerárquico seleccionará operaciones aritméticas o lógicas de manera tal que siempre que M=1, la ALU realice operaciones aritméticas y cuando M=0 realice operaciones lógicas. También es necesario utilizar dos variables de selección, S1 y S0, que habilitarán la selección de las cuatro operaciones aritméticas o de las cuatro operaciones lógicas. Los valores asignados a S1 y S0, para cada operación aritmética, se resumen en la Tabla 3-1. M S1 S0 Función
F
X
Y
C0
1
0
0
Decremento
A-1
A
Todos unos
0
1
0
1
Suma
A+B
A
B
0
1
1
0
Resta
A+B’+1 A
B’
1
1
1
1
Incremento
A
Todos ceros
1
A
Tabla 3-1 Tabla funcional para las operaciones aritméticas. Como se observa, la tabla también muestra el valor de la salida F de la ALU, así como los valores de las entradas del sumador X, Y y C0. Obsérvese que, de acuerdo con esta tabla, la entrada X del sumador requiere siempre el valor de A, mientras que la entrada Y puede disponer de todos unos, B, B’ o todos ceros. Estos valores para la entrada Y serán generados por el AE, cuya tabla de verdad se muestra en la Tabla 3-2. M S1 S0 Bi Yi 1
0
0
0
1
1
0
0
1
1
1
0
1
0
0
1
0
1
1
1
1
1
0
0
1
1
1
0
1
0
1
1
1
0
0
1
1
1
1
0
0
x
x
x
0
Tabla 3-2 Tabla de verdad para la entrada Yi al sumador. Esta tabla se ha obtenido a partir de la Tabla 3-1 simplemente expandiendo la columna Y en las columnas Bi e Yi, indicando cual es el valor de cada Yi en función de M, S1, S0 y también del correspondiente valor de Bi. A partir de esta tabla puede obtenerse la expresión booleana para Yi.: Yi = MS1’Bi + MS0’ Bi’ Finalmente, el circuito lógico de este AE se muestra en la Figura 3-4. La Figura 3-27, que se añade como anexo, es este mismo esquema a mayor tamaño.
35
Prácticas de Sistemas Digitales
Figura 3-4 Esquema lógico del AE. A partir de la Tabla 3-1 obtenemos la ecuación lógica para el bit de acarreo inicial: C0 = MS1 Esta ecuación indica que el acarreo inicial toma el valor lógico 1, si y sólo si, la operación es aritmética y, resta o incrementa. Una vez descrito el procedimiento de diseño de un AE, se puede realizar de igual manera el diseño de un LE, tal y como se define en la Tabla 3-3. En esta tabla puede verse que las entradas Y y C0 siempre están al valor 0 para operaciones lógicas, mientras que las entradas X requieren diferentes expresiones booleanas para cada una de estas operaciones. M S1 S0 Función
F
X
Y
C0
0
0
0
Complemento
A’
A’
0
0
0
0
1
AND
A AND B A AND B 0
0
0
1
0
Identidad
A
A
0
0
0
1
1
OR
A OR B
A OR B
0
0
Tabla 3-3 Tabla funcional del LE. Basándose en esta tabla funcional, se puede desarrollar la tabla de verdad para el LE, que se muestra en la Tabla 3-4. A partir de esta tabla de verdad puede obtenerse la siguiente expresión boolena para describir algebraicamente el LE: M S1 S0 Xi 0
0
0
Ai’
0
0
1
Ai Bi
0
1
0
Ai
0
1
1
Ai+Bi
1
X
X
Ai
Tabla 3-4 Tabla de verdad del LE. Xi = M’S1’S0’Ai’ + M’S1S0Bi + S0AiBi + S1Ai + MAi
36
Práctica 3:Diseño modular y jerárquico Una vez obtenida esta expresión se procede a la construcción del circuito lógico del LE, mostrado en la Figura 3-5. En la Figura 3-28 está este mismo esquema a mayor tamaño.
Figura 3-5 Esquema lógico del LE. Hasta ahora, se han obtenido los circuitos lógicos para el AE y el LE, y la siguiente tarea es conectarlos con un sumador para formar una unidad aritmético lógica completa, como la ALU de cuatro bits mostrada en la Figura 3-3. Obsérvese que, en la ALU, las operaciones lógicas se realizan en el ampliador lógico y los sumadores de un bit se utilizan para pasar los resultados del LE sin cambiarlos. En otras palabras, los sumadores de un bit se utilizan como conexiones con retardo fijo. Obsérvese también que el acarreo de salida del bit más significativo representa un acarreo en el caso de aritmética sin signo y que la puerta XOR de los acarreos de salida de los dos bits más significativos se obtiene si ha habido desbordamiento en el caso de aritmética en complemento a 2. Realización práctica En primer lugar diseñaremos la ALU de 4 bits. Los pasos a realizar para completar el diseño están completamente definidos en este guión de práctica y son construir un módulo sumador de 1 bit, un AE y un LE de 1 bit y combinar los módulos para construir la ALU de 4 bits. Finalmente construiremos la ALU de 32 bits.
Realización de un módulo sumador de 1 bit
Figura 3-6 Inicialización del proyecto para la ALU de 4 bits.
37
Prácticas de Sistemas Digitales Inicia la herramienta Xilinx. Luego crea un proyecto de nombre ALU4_95 tal y como indica la Figura 3-6. En el campo directorio debes hacer referencia a tu directorio personal de trabajo. Luego, usa la opción de la barra de menú en la ventana del gestor de proyectos DocumentÆ ÆAdd y añade el esquema C:\TEMP\CCUENCA\ADD1.SCH de la práctica anterior al proyecto actual, según se muestra en la Figura 3-7. Con toda seguridad que tienes que cambiar el directorio C:\TEMP\CCUENCA por el nombre de tu directorio de trabajo personal.
Figura 3-7 Ventana para añadir el esquema del sumador binario de 1 bit al proyecto ALU4_95. Pica dos veces en el nombre del esquema para abrirlo. Una vez que esté abierto el esquema realiza los siguientes cambios: 1. Pica dos veces sobre el terminal INPUT0. Cuando aparezca la ventana para los terminales de entrada y salida, Figura 3-8, cambia el nombre del terminal de INPUT0 a A. De la misma manera cambia INPUT1 por B, CARRY_INPUT por CIN y CARRY_OUTPUT por COUT. 2. Realiza una conexión directa entre los terminales de entrada y la salida de los IBUF, y entre los terminales de salida y la salida de los OBUF. 3. Elimina los buffers IBUF y los buffer OBUF.
Figura 3-8 Ventana para los terminales de entrada y salida. Una vez que has hecho todo esto, el esquema del sumador binario debe ser similar al de la Figura 3-9.
38
Práctica 3:Diseño modular y jerárquico
Figura 3-9 Sumador binario de 1 bit, modificado para encapsularlo en un módulo funcional. Ahora tenemos el esquema preparado para encapsularlo en un módulo funcional. Para crear el símbolo, seleccionamos HierarchyÆ ÆCreate Macro Symbol from Current Sheet en el menú principal del editor de esquemáticos. Aparece la ventana de creación de símbolos, Figura 3-10. Escribe como nombre del símbolo MY_ADD1, y en el campo comentario la frase “Mi sumador de 1 bit”, luego pica el botón de OK. La herramienta nos informará, mediante un mensaje, que MY_ADD1 ha sido añadido a la biblioteca de componentes y nos preguntará también si queremos editarlo. A esta pregunta contestaremos picando el botón de No.
Figura 3-10 Ventana para la creación de símbolos.
Realización del ampliador aritmético de 1 bit En este punto, debemos tener el editor de esquemáticos sin ningún esquema. Seleccionamos FileÆ ÆNew Sheet en el menú del editor de esquemáticos para obtener un esquema en blanco donde poder trabajar. Aparecerá una hoja en blanco con el nombre ALU4_951. En este esquema vamos a capturar el diseño lógico de la ampliación aritmética. En primer lugar seleccionamos FileÆ ÆSave As para cambiar el nombre del esquema a AE, según se muestra en la Figura 3-11.
39
Prácticas de Sistemas Digitales
Figura 3-11 Ventana para guardar el esquema con el nombre AE. A continuación captura el diseño de la AE, tal y como se especifica en la Figura 3-12.
Figura 3-12 Esquema lógico del AE. En el esquema de la Figura 3-12 puedes ver que la orientación de las puertas lógicas no es la habitual, sino que las puertas tienen una rotación de 90ª a la derecha. Para conseguir la rotación de un símbolo a la derecha puedes utilizar la combinación de teclas Control+R (la tecla Control y la tecla R pulsada a la vez), para rotar a la izquierda Control+L, y para conseguir la imagen especular del símbolo puedes usar Control+M. Una vez que finalizamos, salvamos el esquema con FileÆ ÆSave. Luego usamos los menús OptionsÆ ÆCreate Netlist, OptionsÆ ÆIntegrity Test y OptionsÆ ÆExport Netlist... para crear, comprobar y exportar la netlist en formato EDIF200. Cerramos el editor de esquemáticos y simulamos el circuito. El resultado de la simulación se muestra en la Figura 3-13. A continuación crearemos un módulo con este esquema, seleccionamos en la barra de menú HierarchyÆ ÆCreate Macro Symbol from Current Sheet. En el campo nombre escribimos MY_AE, y en el campo comentario “Ampliador aritmético”, picamos en el botón de OK y contestamos que No a la pregunta de si queremos editar el símbolo.
40
Práctica 3:Diseño modular y jerárquico
Figura 3-13 Simulación del AE.
Realización del ampliador lógico de 1 bit En este punto, debemos tener otra vez el editor de esquemáticos sin ningún esquema. Seleccionamos FileÆ ÆNew Sheet en el menú del editor de esquemáticos para obtener un esquema en blanco donde poder trabajar. Aparecerá una hoja en blanco con el nombre ALU4_952. En primer lugar seleccionamos FileÆ ÆSave As para cambiar nombre del esquema a LE, y a continuación capturaremos el diseño del LE, según se muestra en la Figura 3-14.
Figura 3-14 Esquema lógico del LE Una vez que finalizamos, salvamos el esquema con FileÆ ÆSave. Luego usamos los menús OptionsÆ ÆCreate Netlist, OptionsÆ ÆIntegrity Tests y OptionsÆ ÆExport Netlist... para crear, comprobar y exportar la netlist en formato EDIF200. Hecho esto, simulamos el circuito y comprobamos que funciona correctamente, según aparece en la Figura 3-15.
41
Prácticas de Sistemas Digitales
Figura 3-15 Simulación del LE.
Realización de la ALU de 4 bits Llegados a este punto hemos capturado el diseño de tres módulos: el sumador binario de un bit, el ampliador aritmético y el ampliador lógico. Y ahora es el momento de unir todos los módulos para construir la ALU de cuatro bits. Para ello seleccionamos FileÆ ÆNew Sheet en el editor de esquemáticos, aparecerá una hoja en blanco con el nombre ALU4_953 y cambiamos el nombre al esquema seleccionando FileÆ ÆSave As... En el campo nombre de archivo escribimos ALU4 y picamos en el botón de continuar. Para añadir los símbolos de los módulos definidos anteriormente selecciona ModeÆ ÆSimbols en el editor de esquemáticos. Aparece la ventana de símbolos, y en la parte superior puedes encontrar los módulos MY_ADD1, MY_AE y MY_LE, según se muestra en la Figura 3-16.
Figura 3-16 Ventana de símbolos. Sitúa 4 símbolos de cada uno de los módulos MY_ADD1, MY_AE y MY_LE, conecta los acarreos de las etapas intermedias para crear la cadena de acarreos, también los terminales de salida X de los LE con los terminales de entrada A del sumador binario de 1 bit, finalmente los terminales Y de salida de los AE con los terminales de entrada B del sumador binario de 1 bit, tal y como aparecen en la Figura 3-17.
42
Práctica 3:Diseño modular y jerárquico
Figura 3-17 Esquema premilinar de la ALU de 4 bits. A continuación dibujaremos dos buses de entrada y uno de salida, tal y como se muestra en la Figura 3-18. Para ello selecciona en el menú principal ModeÆ ÆDraw Buses. Pica desde una posición próxima al LE más a la izquierda y traza un bus hasta una posición cercana al LE más a la derecha, Figura 3-18. Para terminar el trazado del bus pica dos veces. Entonces aparece la ventana de edición de bus, Figura 3-19. En el campo “nombre” escribe A; en el campo “marca de terminación”selecciona INPUT y en el campo “rango de líneas” introduce los valores 3 y 0, para indicar un total de 4 líneas.
Figura 3-18 Esquema con los buses A, B y F definidos. A continuación creamos otro módulo con este esquema, seleccionando en la barra de menú HierarchyÆ ÆCreate Macro Symbol from Current Sheet . En el campo nombre escribimos MY_LE, y en el campo comentario “Ampliador lógico”. Picamos en el botón de OK y contestamos que No a la pregunta de si queremos editar el símbolo.
43
Prácticas de Sistemas Digitales
Figura 3-19 Ventana de edición de buses. Ahora tenemos que conectar los buses a las entradas de los ampliadores lógicos y aritméticos y a las salidas de los sumadores. Selecciona en el menú principal Mode>Draw Bus Taps. Pica el cursor sobre el bus A, y a continuación sobre la entrada etiquetada con el nombre A del ampliador lógico aparecerá una línea etiquetada con el nombre A3 y que representa la conexión entre la línea A3 del bus A y la entrada A del ampliador lógico. Pica sobre la siguiente para crear la conexión entre la línea A2 del bus y la entrada A del siguiente ampliador lógico. Repite para crear las conexiones A1 y A0. Para terminar pulsa la tecla ESC. Si cometes un error, puedes pulsar dos veces en el nombre de la conexión al bus, por ejemplo A2, y luego cambiar el nombre de la conexión en la ventana que aparece para tal efecto. Repite el proceso anteriormente descrito para establecer las conexiones al bus de entrada B. En este caso las conexiones hay que establecerlas dos veces puesto que las líneas correspondientes al bus B se conectan a ambos ampliadores. Finalmente conecta las salidas de los sumadores al bus de salida F. El resultado debe ser similar al de Figura 3-20.
Figura 3-20 Esquema de la ALU de 4 bits con los buses conectados. A continuación definimos los terminales de entrada M, S1 y S0 y los conectamos a las entradas de todos los ampliadores. Para terminar añadimos la lógica necesaria para calcular el acarreo inicial y la señal de desbordamiento, tal como muestra la Figura 3-21. En el esquema la señal de desbordamiento y CO4 corresponden a terminales de salida.
44
Práctica 3:Diseño modular y jerárquico
Figura 3-21 Lógica para el cálculo del acarreo inicial y la señal de desbordamiento. El esquema final debe ser similar al de Figura 3-22. En la Figura 3-29, que se añade como anexo, está este mismo esquema a mayor escala.
Figura 3-22 Esquema final de la ALU de 4 bits.
Simulación de la ALU de 4 bits Una vez capturado el esquemático realizamos la simulación del circuito. Añadimos al simulador los terminales de entrada y salida por este orden: los buses de entrada A y B, las señales de control S0, S1 y M, el bus de salida F, el acarreo final y el bit de desbordamiento. Para asociar estímulos a los buses es necesario deshacer los buses. Pica sobre el bus A y a continuación selecciona SignalÆ ÆBusÆ ÆFlatten en la barra de menú. De igual manera deshaz también el bus B. A continuación realiza la siguiente asignación de estímulos: A3 con el bit Bc3 del contador, A2 con el bit Bc2, A1 con el Bc1 y finalmente A0 con el Bc0. Para el bus B, B3 con el bit Bc7 del contador, B2 con el bit Bc6, B1 con el Bc5 y finalmente B0 con el Bc4.
45
Prácticas de Sistemas Digitales A S0 le asignas Bc8, a S1 le asignas Bc9 y a M le asignas BcA. Así acabamos la asignación de estímulos a los terminales de entrada. Una vez asignados los estímulos, vuelve a agrupar los buses A y B. También define un bus con las señales de control S0, S1 y M. Para facilitar la interpretación de los resultados, cambia el formato de visualización de los buses a decimal picando en primer lugar sobre el bus y luego seleccionando SignalÆ ÆBusÆ ÆDisplay Decimal. Selecciona el bus A y cambia su dirección de agrupación con SignalÆ ÆBusÆ ÆChange Direction. Esta orden tiene el mismo efecto que desagrupar el bus, ordenar las señales en orden inverso y posteriormente volver a reagrupar las señales. Cambia de igual manera también la dirección del bus B. Realiza una simulación el suficiente tiempo para que las señales de entrada tomen todas las combinaciones posibles, según muestra la Figura 3-23.
Figura 3-23 Simulación de la ALU de 4 bits. Para comprobar el funcionamiento de la ALU diseñada recuerda que el bus de control formado por las líneas de control de operación M, S1 y S0 definen la operación a realizar por la ALU de acuerdo con la Tabla 3-5. M S1 S0 F 0
0
0
Complemento
0
0
1
AND
0
1
0
Identidad
0
1
1
Or
1
0
0
Decremento
1
0
1
Suma
1
1
0
Resta
1
1
1
Incremento
Tabla 3-5 Tabla funcional de la ALU de 4 bits. Así por ejemplo, en la Figura 3-23 vemos que en la posición indicada por el cursor, si interpretamos los buses como números representados el bus de control toma el valor 5, indicando una operación de suma entre el bus A, que tiene un valor de 10 en sus líneas, y el bus B, con el valor de 6. El resultado de esta operación de suma se muestra en el bus de salida F y es cero, como consecuencia de la incorrección de la operación, la señal de acarreo de salida toma el valor alto. Ahora bien, si 46
Práctica 3:Diseño modular y jerárquico interpretamos los buses como números en complemento a dos, el bus A con codificación 10 correspondería al valor decimal de –6, que sumado al bus B con valor decimal 6 daría como resultado para la operación de suma el valor decimal 0, que es correcto y por tanto no se activa el bit de desbordamiento para operaciones en complemento a dos. De igual manera comprueba el resto de las operaciones aritméticas y lógicas. En caso de errores, estos pueden estar o bien en las conexiones entre los módulos o bien entre los propios módulos. Puedes arrancar o regresar al simulador desde el editor de esquemas simplemente picando el botón en la barra de herramientas debajo del menú principal de la ventana principal del editor de esquemas. También desde el simulador puedes arrancar o regresar al editor de esquemas picando en el botón en la barra de herramientas debajo del menú principal de la ventana principal del simulador. Para depurar los errores en las conexiones entre los módulos, la herramienta permite visualizar en el simulador cualquier señal, aunque esta no esté asociada a un terminal de entrada o salida del circuito y sea una señal intermedia sin nombrar. Para añadir al simulador una señal, desde el editor de esquemas, pulsa en el botón en la barra de herramientas principal. Aparecerá la ventana de herramientas de para añadir señales. El editor simulación de la Figura 3-24. Pica en el botón cambia de modo y el cursor es ahora una flecha con señales digitales. Pica en cada terminal que quieras añadir, y asegúrate que seleccionas el terminal de entrada o salida de un bloque o de una puerta lógica, no el cable que une un terminal a otro elemento, pues en éste último caso la señal no aparecerá en la ventana principal del simulador. Cuando un terminal es añadido a la ventana de simulación aparece una marca de color gris junto al terminal. Para eliminar de la ventana de simulación una señal añadida pica en el botón y luego en la señal, la marca al lado de la señal debe desaparecer.
Figura 3-24 Ventana de herramientas de simulación. Puede ocurrir que la causa del error sea el diseño del módulo y no las relaciones con los otros módulos. En un principio esta situación delataría que el diseño no ha sido lo suficientemente probado y fue dado por bueno con demasiada rapidez, aunque a veces, por la naturaleza del error este sólo se pone de manifiesto cuando conectamos el módulo en cuestión con otro componente. Un método para depurar un módulo ya construido consiste en ver su esquema utilizando las opciones del menú principal en el editor de esquemas Hierarchy>Push (o el botón en la barra auxiliar de herramientas) y Hierarchy->Pop. Al utilizar la primera de las dos órdenes el cursor cambia a una flecha con una “H”, indicando que hemos cambiado de modo. Picando dos veces sobre un símbolo en el diseño esquemático, veremos la hoja correspondiente a su diseño. Así es posible, por ejemplo, modificarla si lo consideramos oportuno o añadir señales para la depuración del módulo. Para regresar al esquema principal está la opción Hierarchy->Pop o simplemente cerrar la hoja del esquema. En el caso de haber realizado 47
Prácticas de Sistemas Digitales modificaciones aparece el mensaje Figura 3-25. Picando en el botón Sí, las modificaciones realizadas al módulo son aceptadas. Picando en el botón No, las modificaciones no tendrán ningún efecto.
Figura 3-25 Pregunta al abandonar un subesquema.
Realización de la ALU de 32 bits La construcción de una ALU de 32 bits es realmente una cuestión de diseño, no de captura de diseño y simulación como han sido las prácticas anteriores, y la actual hasta este punto. La Figura 3-2 es el diagrama de bloques de la ALU de 32 bits que tienes que diseñar. A y B son los buses de entrada, y F es el bus de salida. Todos los buses tienen un ancho de 32 bits. M, S1 y S0 son las señales de control que definen la operación a realizar por la ALU, de acuerdo con la Tabla 3-5 que ya hemos comentado. Las soluciones a los problemas de diseño no son únicas. Un diagrama posible de macro tareas a realizar es el mostrado en la Figura 3-26.
Figura 3-26 Posibles pasos para la construcción de una ALU de 32 bits.
48
Anexo
Figura 3-27 Diagrama esquemático del AE.
49
Prácticas de Sistemas Digitales
Figura 3-28 Diagrama esquemático del LE.
50
Práctica 3:Diseño modular y jerárquico
Figura 3-29 Diagrama esquemático de la ALU de 4 bits.
51
Prácticas de Sistemas Digitales
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 1. ¿Qué es una ALU? 2. ¿Puede la ALU diseñada sumar números en complemento a dos?¿Por qué? 3. ¿Qué función realiza el módulo de ampliación aritmética en la ALU? 4. ¿Qué función realiza el módulo de ampliación lógica en la ALU? 5. ¿Qué indican a la ALU las señales M, S1 y S0? 6. ¿Qué ocurre si sobre un símbolo pulsamos las teclas Control+R, Control+L o Control+M? 7. ¿Cuál es la secuencia de operaciones para definir un símbolo? 8. ¿Para qué sirve la opción SignalÆ ÆBusesÆ ÆChange Direction en el simulador? 9. Indica un diagrama de macrotareas a realizar para construir una ALU de 32 bits, diferente al propuesto en la práctica. 10. ¿Cómo se obtiene una hoja en blanco en el editor de esquemáticos? Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 1. ¿Cuánto tiempo de simulación es necesario para comprobar todos los patrones de entrada de la ALU de 4 bits? 2. ¿ Es escalable directamente la ALU de 4 bits a 32 bits?¿Por qué? 3. ¿Qué indica el bit de acarreo de salida en la ALU de 32 bits en las operaciones con números representados en binario? ¿Y con números representados en complemento a dos? 4. ¿Qué técnicas de diseño has utilizado para construir la ALU de 32 bits? 5. ¿Qué indica el bit de desbordamiento en la ALU de 32 bits en las operaciones con números representados en binario? ¿Y con números representados en complemento a dos? 6. Entre todas las operaciones de la ALU diseñada ¿cuál tarda menos tiempo en realizarse? ¿Y cuál tarda más? ¿Por qué? 7. Explica cómo has comprobado el diseño de la ALU de 32 bit. 8. ¿Cuál es el diseño con bloques funcionales que has implementado para la ALU de 32 bits?
52
4. Práctica 4: Retardo de puertas Índice Introducción 53 Objetivos 56 Desarrollo de la práctica 56 Ampliador aritmético 56 Realización práctica 58 Simulación con retardos de puertas del ampliador aritmético de 1 bit 58 Eliminación de los riesgos estáticos 61 Retardo total del ampliador aritmético 62 Riesgos estáticos del módulo ampliador lógico 63 Retardo total de la ALU de 4 bits 64 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 65 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 65
Introducción En las prácticas anteriores hemos realizado simulaciones funcionales para comprobar el funcionamiento del diseño lógico. En las simulaciones funcionales los retrasos de las puertas lógicas son siempre cero. Esto significa que las salidas cambian inmediatamente como respuesta a los cambios en los valores de las señales de entrada, lo que no es más que una simplificación de la realidad. A pesar de lo ideal que pueden ser las simulaciones funcionales no por ello dejan de ser interesantes, ya que permiten visualizar claramente las relaciones de causa y efecto, analizar fácilmente los cronogramas y verificar el comportamiento funcional del circuito. Además, las simulaciones lógicas son la única manera de detectar comportamientos oscilatorios en los diseños, que serían imposibles de comprobar cuando las puertas tienen retardos. A medida que vamos avanzando en el diseño se hacen necesarios otros modos de simulación. Por ejemplo, si queremos conocer cuál es la frecuencia máxima a la que puede operar el circuito diseñado, o saber si las señales de entrada están activas el suficiente tiempo para que puedan funcionar correctamente los componentes que utilizamos en los circuitos, es necesario que las simulaciones tengan en cuenta los retardos. Las causas de los retardos en los circuitos son variadas. Por una parte están los retardos debidos a las conexiones entre puertas. En cada nodo de un circuito real hay una capacidad parásita asociada. Estas capacidades actúan como almacenes
53
Prácticas de Sistemas Digitales temporales de cargas que hay que vaciar o llenar antes de que las señales alcancen los valores de tensión mínimos y máximos. Supongamos que el valor de la capacidad parásita de una puerta es 10pF (1 pF = 1012 F) y que conectamos la salida de la puerta a un total de 20 entradas. La capacidad parásita total en este caso es la suma de todas las capacidades individuales, 20x10pF = 200pF. Si la puerta de salida presenta una impedancia de salida de 100Ω, la constante de tiempo es 200pF x100Ω = 20ns y ya que el tiempo necesario para realizar una transición entre estados es en torno a 2 ó 3 veces la constante de tiempo, el tiempo que empleará está puerta para cambiar de estado oscilará entre 40 y 60ns. Esto implica que, poniéndonos en el caso peor, el circuito no podrá funcionar a una frecuencia mayor que 1/60ns = 16.7MHz, lo cual es una restricción bastante severa. Además de los retrasos debidos a las conexiones entre dispositivos, están los retrasos inherentes a cada puerta. Cuando la entrada a una puerta cambia, la salida de la puerta no cambia inmediatamente. Este retraso también es debido a capacidades parásitas dentro del circuito integrado. El tiempo entre el cambio en la entrada y el cambio en la salida es llamado retardo de propagación o retardo de puerta. Hay dos tipos de retardo de puerta, ver Figura 4-1:
Figura 4-1 Retardos de propagación en puertas. tPHL: Este es el retardo entre el cambio en la entrada y el tiempo en que la señal de salida cambia desde el nivel alto al nivel bajo. tPLH: Este es el retardo entre el cambio en la entrada y el tiempo en que la señal de salida cambia desde el nivel bajo al nivel alto. Normalmente estos retardos no son muy diferentes, así que se suelen simplificar en un único parámetro llamado tpd que simboliza el retardo de propagación en una puerta, tanto para el caso de las transiciones hacia el nivel bajo o el nivel alto. Otra consecuencia de los retardos son las condiciones de riesgo, que pueden originar el mal funcionamiento del circuito. Los riesgos generan pequeños pulsos espurios indeseables que aparecen en las salidas a causa de los diferentes retardos de propagación en caminos diferentes, pero convergentes a lo largo del circuito. Concretamente, un pulso espurio es un cambio de corta duración en el valor de la salida cuando no debería aparecer cambio alguno. El concepto de riesgo se muestra en el ejemplo a continuación. En la Tabla 4-1 se expone la representación de mapa de Karnaugh de la función booleana F = xy’ + yz, y en la Figura 4-2 el esquema lógico correspondiente.
54
Práctica 4: Retardo de puertas yz x
00 01 11 10 0 1
0
1
3
2
7
6
1 4
1 1
5
1
Tabla 4-1 Representación de mapa F = xy' + yz. En la Figura 4-2 puede verse que hay dos caminos diferentes, etiquetados como a y b, desde la entrada Y hasta la salida F, y estos dos caminos tienen retardos de propagación diferentes. El retardo en el camino a, que va desde Y hasta F a través del inversor, una puerta AND y una puerta OR, es de 3 ns, mientras que el retardo en el camino b, que sólo atraviesa una puerta AND y una puerta OR, es de 2 ns. En el caso en el que X = Z = 1, Y =1, la salida F valdrá 1 debido al camino b. De igual modo, cuando X = Z = 1, Y = 0, la salida F valdrá 1 debido al camino a. Por consiguiente, en un diseño ideal donde el retardo de las puertas es 0, la salida F debería permanecer a 1 cuando Y cambia de 1 a 0, ya que la señal que viene por el camino a se hace igual a 1 al tiempo que la señal que viene por el camino b se hace igual a 0. Sin embargo, en realidad a necesita 2 ns para llegar a valer 1, mientras que b se iguala a 0 en 1 ns, forzando F a 0 durante 1 ns. Esta situación se muestra en la Figura 4-3. En esta figura $I3.0 es la salida del inversor, $I1.0 es a y $I2.0 es b. Se puede apreciar que Y cambia a 0 en t0 = 20ns, seguida por un cambio de b a 0 en t0 + 1 ns y por un cambio en a al valor 1 en t0 + 2 ns. Ya que F es igual al valor de (a OR b), F cambia a 0 en t1 = t0 + 2 ns y vuelve a valer 1 en t2 = t0 + 3 ns. a 1
1 1 1 b
Figura 4-2 Esquema lógico. En general existe un riesgo estático 1 (riesgo estático 0) cuando dos minterms (o maxterms) son adyacentes y no están cubiertos en la implementación de la función lógica por ningún primo implicante (primo implicado) simultáneamente. La manera de evitar los riesgos estáticos 1 (riesgo estático 0) es aumentar el coste del circuito y añadir un nuevo primo implicante (primo implicado) que evite la situación anterior.
Figura 4-3 Diagrama de tiempos.
55
Prácticas de Sistemas Digitales Este método garantiza la eliminación de los pulsos espurios producidos por transiciones entre combinaciones de entrada a distancia 1, no así cuando las transiciones ocurren entre combinaciones de entrada a distancia mayor que 1. Así por ejemplo, las transiciones entre las combinaciones 3 y 5 también producen riesgos estáticos 1, ver la Figura 4-4.
Figura 4-4 Riesgo estático producido por una transición a distancia 2. En general la identificación explícita y, de ser posible, la eliminación de los riesgos y de las señales espurias que ellos crean, es muy difícil. Esto se debe tanto a la incertidumbre inherente en los retardos de propagación que hay que considerar como al gran número de posibles combinaciones de estos retardos. Por lo tanto, sólo es factible llevar a cabo un análisis explícito de riesgos para circuitos pequeños que operan en condiciones restrictivas. Objetivos Los objetivos de esta práctica son: 1. Introducción de los conceptos de retardo de puerta y retardo de propagación. 2. Uso de los modos de simulación que tienen en cuenta los retardos de las puertas. 3. Estudios de las consecuencias de los retardos en los diseños. 4. Determinación de la frecuencia máxima de operación de un circuito. Desarrollo de la práctica Esta práctica consta de dos partes. En la primera vamos a estudiar de manera guiada el módulo ampliador aritmético con los objetivos principales de aprender los modos de simulación que tienen en cuenta los retardos de propagación y de puerta, y además comprobar y corregir las situaciones de riesgos estáticos. En la segunda parte de la práctica, aplicaremos las técnicas anteriores a los otros módulos que hemos utilizado en el diseño de la ALU de 4 bits. Ampliador aritmético Para el estudio inicial de los retardos y las consecuencias de los mismos en los circuitos digitales vamos a utilizar el circuito ampliador aritmético de 1 bit de la práctica 3. La tabla de verdad y el esquema lógico están en la Tabla 4-2, y en la Figura 4-5.
56
Práctica 4: Retardo de puertas M S1 S0 Bi Yi 1
0
0
0
1
1
0
0
1
1
1
0
1
0
0
1
0
1
1
1
1
1
0
0
1
1
1
0
1
0
1
1
1
0
0
1
1
1
1
0
0
x
x
x
0
Tabla 4-2 Tabla de verdad del ampliador aritmético. Tal y como se ve en la Tabla 4-3, la cobertura de primos implicantes elegida corresponde a los minterms {0, 2} y {4, 5}. Con esta elección de primos implicantes ocurre que los minterms 0 y 4 que son adyacentes no están cubiertos simultáneamente por ningún primo implicante en la implementación de la función lógica. Por ello habrá una situación de riesgo estático cuando la señal Bi cambie de estado lógico con S1= 0 y S0 = 0. Para evitar este riesgo estático basta con añadir un primo implicante que cubra los minterms 0 y 4.
Figura 4-5 Esquema lógico del ampliador aritmético. Por otra parte, tal y como se ve en la Figura 4-5, el retardo máximo en el ampliador aritmético corresponde al camino de las señales S0, S1 ó Bi cuando atraviesan el inversor, la puerta AND y la puerta OR. Suponiendo un retardo de 1 ns en cada puerta resulta que el retraso total máximo es de 3ns, y por ello la máxima frecuencia a la que pueden variar las señales de entrada, con la garantía de que el circuito tendrá tiempo de operar correctamente, es F = 1 /(3 ns) = 333 MHz. Esta situación es peor en la realidad puesto que los retrasos temporales serán mayores y variarán para cada puerta.
57
Prácticas de Sistemas Digitales S1 S0 bi
00
01 0
0
1
10 3
1 1
2
1 4
1
11
5
7
6
1
Tabla 4-3 Mapa del ampliador aritmético. Realización práctica La realización práctica consta de varios apartados. En el primero realizaremos la simulación del ampliador lógico de un bit con retardos. El objetivo es estudiar las consecuencias de los mismos en los circuitos combinacionales y comprobar cómo pueden evitarse los pulsos espurios en la salida. A continuación estudiaremos los retardos de propagación a través de una cadena de puertas, para obtener el caso peor, el cual define el tiempo de operación. Estos dos apartados estarán dirigidos por el guión de prácticas, paso por paso. Los dos siguientes son similares a los anteriores con la salvedad de que el alumno debe aplicar los conocimientos adquiridos por su propia cuenta.
Simulación con retardos de puertas del ampliador aritmético de 1 bit Inicia la herramienta de Xilinx. Luego crea un proyecto de nombre “delay” tal y como indica la Figura 4-6. En el campo directorio debes hacer referencia a tu directorio personal de trabajo.
Figura 4-6 Ventana de nuevo proyecto. Luego, usa la opción de la barra de menú en la ventana del gestor de proyectos DocumentÆ ÆAdd y añade el esquema AE.SCH, de la práctica anterior, al proyecto actual, según se muestra en la Figura 4-7.
58
Práctica 4: Retardo de puertas
Figura 4-7 Ventana para añadir el esquema del ampliador aritmético. Pica dos veces en el nombre del esquema, en la ventana del gestor de proyectos, para abrirlo. Una vez que esté abierto el esquema generamos la netlist usando la opción OptionsÆ ÆCreate Netlist... y la exportamos en el formato EDIF 200 usando la opción del menú principal OptionsÆ ÆExport Netlist... Antes de exportar la netlist podemos comprobar que todo es correcto seleccionando OptionsÆ ÆIntegrity Test. Finalmente abandonamos el editor de esquemas con FileÆ ÆExit. A continuación realizaremos la simulación con retardos del ampliador aritmético. Picamos en el botón , en la ventana del gestor de proyectos para iniciar el simulador. Una vez en él, usamos SignalÆ ÆAdd Signals... para añadir a la ventana de visualización las señales de entrada M, S0, S1 y Bi. En este caso también estamos interesados en visualizar no sólo los terminales de entrada y salida, sino también las señales intermedias, como son las tres señales de entrada a cada puerta AND y las dos señales de entrada a la puerta OR Para añadirlas selecciona en la subventana del medio, llamada “Chip Selection”, la puerta AND3 y pica dos veces, según se muestra en la Figura 4-8. Al hacerlo, en la subventana de la derecha aparecerán enumerados los terminales de entrada y salida de la puerta, selecciona el I0 y pulsa el botón Add, repite lo mismo con los terminales intermedios I1 e I2. Cuando hayas terminado, repite este proceso para la otra puerta AND3 y para la puerta OR2. Otra método, quizás preferible por ser más directo, es el descrito en el apartado Simulación de la ALU de 4 bits.
Figura 4-8 Ventana para añadir señales intermedias a la simulación. Finalmente añade la señal de salida Yi. La ventana de visualización de señales con las señales añadidas debe ser similar a la Figura 4-9. 59
Prácticas de Sistemas Digitales
Figura 4-9 Ventana de visualización con las señales intermedias añadidas. Luego, seleccionando SignalÆ ÆAdd Stimulators... conectamos las entradas M, S1, S0 y B a los estímulos 1, 0, 0 y Bc0 respectivamente. Esta asignación de estímulos se realiza así para comprobar el riesgo cuando ocurre la transición entre las configuraciones correspondientes a los minterms 0 y 4. A diferencia de las simulaciones hasta ahora realizadas, vamos a especificar que la simulación no es funcional, sino con retardos, y también vamos a especificar el valor del retardo de puerta.
Figura 4-10 Cambio de simulación funcional a unitaria. En la barra de herramientas del simulador, ver Figura 4-10, existe a la izquierda una subventana desplegable con los modos de simulación: “Functional”, “Timing”, “Glitch” y “Unit”. Seleccionaremos el modo “Unit” que significa retardo unitario en todas las puertas lógicas.
Figura 4-11 Fijación del retardo unitario. A continuación nos queda fijar el tiempo a que corresponde un retardo unitario. Para ello seleccionamos OptionsÆ ÆPreferences... y fijamos el parámetro de precisión de 60
Práctica 4: Retardo de puertas la simulación a 1 ns, según se muestra en la Figura 4-11. No debemos olvidar desactivar la opción “Transport Delay”. Finalmente, picamos en el botón en la barra de herramientas del simulador lógico y aparecerán las simulaciones de las señales de entrada y salida. Para obtener una buena imagen de las señales usamos los botones y , así como los desplazadores horizontales y verticales en la ventana de visualización de señales. El resultado de la simulación se muestra en la Figura 4-12.
Figura 4-12 Resultado de la simulación para riesgos estáticos. En la Figura 4-12 vemos que el cambio desde la configuración M =1, S1 = S0 = 0 y Bi = 1 a la configuración M =1, S1 = S0 = 0 y Bi = 0 produce un resultado no deseado. La transición contraria, de la configuración M =1, S1 = S0 = 0 y Bi = 0 a la configuración M =1, S1 = S0 = 0 y Bi = 1, no produce ningún riesgo.
Eliminación de los riesgos estáticos Para eliminar los riesgos estáticos es suficiente añadir primos implicantes que cubran a la vez los minterms causantes del riesgo. Captura el nuevo esquema propuesto en la Figura 4-13 y repite los pasos ya explicados para estudiar el comportamiento del circuito con retardos. El resultado de la simulación se muestra en la Figura 4-14.
61
Prácticas de Sistemas Digitales
Figura 4-13 Esquema del ampliador aritmético modificado para evitar riesgos estáticos. En esta figura vemos cómo los pulsos espurios en la señal de salida han desaparecido como consecuencia de añadir un nuevo primo implicante en la implementación de la función lógica de salida.
Figura 4-14 Resultado de la simulación del ampliador aritmético modificado.
Retardo total del ampliador aritmético Para calcular de manera aproximada el retardo máximo del circuito podemos realizar una simulación donde cambien todas las señales de entrada. Asigna a las señales de entrada M, S1, S0 y Bi los estímulos correspondientes a los 4 bits menos significativos del contador binario (Bc3, Bc2, Bc1 y Bc0). Con 4 entradas existen un total de 24 = 16 combinaciones de entrada, y dado que el período de la señal es de 10 ns, será suficiente un tiempo de simulación de 80 ns. Puedes fijar este tiempo de simulación en la barra de herramientas del simulador lógico, según se muestre en la Figura 4-15. Luego pica en el botón
62
para simular.
Práctica 4: Retardo de puertas
Figura 4-15 Fijación del tiempo de simulación. El resultado de la simulación aparece en la Figura 4-16.
Figura 4-16 Simulación con retardo del ampliador aritmético. La peor situación que podría ocurrir según el diagrama lógico de la Figura 4-5 es un retardo de 3 ns. Examinando el resultado de la simulación en la Figura 4-16 vemos que esta situación se presenta cuando ocurre una transición desde la configuración M = 0, S1 = 1, S0 = 1 y Bi = 1 a la configuración M =1, S1 = 0, S0 = 0 y Bi = 0. Podemos concluir que el retardo total para nuestro ampliador aritmético de 1 bit es de 3 ns. También vemos en la simulación de la Figura 4-16 que en el instante de simulación correspondiente a t = 62ns hay un espurio producido por una transición entre minterms a distancia mayor que 1.
Riesgos estáticos del módulo ampliador lógico El ampliador lógico, a diferencia del ampliador aritmético, no tiene transiciones entre combinaciones adyacentes que produzcan pulsos espurios en la señal de salida del circuito. De aquí no debe deducirse que en el ampliador lógico no haya transiciones entre combinaciones que produzcan pulsos espurios, ocurre simplemente que estas transiciones son entre configuraciones a distancia mayor que 1. Por ejemplo en la Figura 4-17 los estímulos a las señales de entrada han sido asignados de manera que producen transiciones entre los minterms 4 y 7 de manera cíclica provocando una secuencia de espurios. 63
Prácticas de Sistemas Digitales
Figura 4-17 Espurios por la transición entre los minters 7 y 4. La parte práctica de este apartado consiste en la realización de una simulación del ampliador lógico que visualice algunas transiciones entre combinaciones a distancia mayor que 1 que produzcan riesgos estáticos en el ampliador lógico.
Retardo total de la ALU de 4 bits En la práctica anterior diseñamos una ALU de 4 bits capaz de realizar operaciones lógicas y aritméticas. Con el objeto de simplificar este apartado estudiaremos únicamente la operación de decremento. La parte práctica de este apartado consiste en: 1. La realización de un estudio teórico para determinar cuál es el retardo de propagación para la operación de decremento en el caso peor. 2. La simulación de los casos encontrados en el apartado anterior y verificación del tiempo de propagación teórico calculado. En este apartado es posible que tengas que aumentar el valor del período de la señal Bc0 debido a que el retardo de propagación sea próximo al período de la señal.
64
Práctica 4: Retardo de puertas
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 1. ¿Qué significa que una puerta lógica tenga un retardo de 1 ns? 2. ¿Qué es un riesgo estático en un circuito combinacional? 3. ¿Por qué se producen los riesgos estáticos? ¿Cómo se evitan? ¿Pueden evitarse todos? 4. ¿Cómo se realiza una simulación que tiene en cuenta los retardos de puerta? 5. ¿Cómo está relacionado el retardo de propagación con la frecuencia máxima de operación de un circuito? 6. Justifica que el ampliador lógico no tiene riesgos estáticos 1 debido a transiciones entre configuraciones adyacentes. 7. ¿Cuál es la combinación de entrada que tarda más en decrementarse en la ALU de 4 bits? 8. ¿Cómo piensas realizar el estudio del tiempo de propagación en la ALU para la operación de decremento? 9. ¿Cuál es el retardo que calculas de manera teórica para la operación de decremento en la ALU de 4 bits? Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 1. En la simulación presentada en la Figura 4-16 para el tiempo de simulación de t = 62 ns hay un pulso espurio. Explica la existencia de dicho pulso espurio mediante un cronograma. 2. ¿Qué transiciones has comprobado que producen pulsos espurios en el ampliador lógico? 3. Justifica el valor obtenido para el retardo en la operación de decremento de la ALU de 4 bits. 4. Realiza el estudio teórico para calcular el retardo de propagación máximo en la ALU de 4 bits. 5. ¿Cómo podríamos reducir el retardo de propagación de la ALU de 4 bits? 6. ¿Presentan los sumadores binarios riesgos estáticos?
65
5. Práctica 5: Elementos de estado Índice Introducción 67 Objetivos 73 Desarrollo de la práctica 73 Realización práctica 73 Latch SR 73 Simulación funcional del latch SR 76 Simulación con retardo unitario del latch SR 77 Latch D síncrono 78 Biestable D maestro esclavo 79 Biestable D disparado por flanco con entradas asíncronas de set y clear. 79 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 81 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 81
Introducción Todas las prácticas realizadas hasta ahora han sido de circuitos combinacionales. La característica principal de todos ellos es el hecho de que los valores de salida se calculan exclusivamente a partir de los valores actuales en las entradas. En cambio los circuitos secuenciales difieren debido a que contienen elementos de memoria, mientras que los combinacionales no. Como resultado, los valores de salida de los componentes se calculan utilizando tanto los valores de entrada actuales como los valores de entrada anteriores. El elemento estructural básico de los circuitos secuenciales es el “latch” SR, que consta en una posible implementación de dos puertas NOR conectadas de forma cruzada. Como puede verse en la Figura 5-1, el latch SR tiene dos señales de entrada: la señal de puesta a 1, S (set) y la señal de puesta a 0, (reset); también tiene dos señales de salida Q y Q’ (en la figura llamada AUX por razones tipográficas); finalmente, tiene dos estados: un estado de puesta a uno (o set) cuando Q=1 (Q’=0) y un estado de puesta a cero (o reset) cuando Q=0 (Q’=1).
67
Prácticas de Sistemas Digitales
Figura 5-1 Latch SR implementado con puertas NOR. Mientras las señales S y R sean iguales a 0, el latch SR permanece en el mismo estado. Si la entrada S (entrada R) se hace 1, el latch SR irá al estado de puesta a uno (puesta a cero). Si las señales de entrada S y R valen ambas 1, las salidas Q y Q’ deben ser iguales a 0. Si una de las señales de entrada cambia antes que la otra, el latch finaliza en un estado forzado por la señal que cambie en último lugar. Un problema inherente al latch SR es el hecho de que si S y R cambian al mismo tiempo, no se puede predecir la salida. En el caso de que las puertas tengan el mismo retardo, ambas valdrán 1 al mismo tiempo y, después, valdrán 0 simultáneamente y así sucesivamente, oscilando siempre. Para eliminar este comportamiento indeterminista, se debe asegurar que las señales S y R no se restablezcan al mismo tiempo o asegurarse de que las señales S y R nunca cambien al mismo tiempo. S
R
Q(actual)
Q(siguiente)
Q’(siguiente)
0
0
0
0
1
0
0
1
1
0
0
1
X
0
1
1
0
0
1
0
1
1
X
0
0
Tabla 5-1 Tabla de funcionamiento del latch SR implementado con puertas NOR. El funcionamiento del latch SR implementado con puertas NOR está descrito en la Tabla 5-1.
Figura 5-2 Latch SR implementado con puertas NAND. El latch SR puede implementarse también con puertas NAND, según se muestra en la Figura 5-2. En este caso las entradas S y R están normalmente a 1. Activando S o R a 0, el latch se establecerá a 1 o pondrá a 0, respectivamente, que es justamente lo 68
Práctica 5: Elementos de estado opuesto a la implementación NOR en la que activando S o R a 1 se causaba la puesta a uno o a cero del latch, respectivamente. S R Q(actual) Q(siguiente)
Q’(siguiente)
0
0
X
1
1
0
1
X
1
0
1
0
X
0
1
1
1
0
0
1
1
1
1
1
0
Tabla 5-2 Tabla de funcionamiento del latch SR implementado con puertas NAND. El comportamiento funcional del latch SR implementado con puertas NAND está descrito en la Tabla 5-2.
Figura 5-3 Latch SR síncrono. A partir de un latch SR es posible construir fácilmente un latch SR síncrono. La diferencia entre un latch SR y un latch SR síncrono está en la existencia de una tercera entrada, C, que habilita o deshabilita el latch SR. Esto significa que cuando C=1, el latch SR sincronizado funciona exactamente igual que el latch SR; mientras que cuando C=0, el latch permanecerá siempre en el estado anterior. En la Figura 5-3 puede verse la implementación de un latch SR síncrono y en la Tabla 5-3 la descripción del funcionamiento del mismo. C S
R Q(actual) Q(siguiente)
0
X X
0
0
0
X X
1
1
1
0
0
0
0
1
0
0
1
1
1
0
1
X
0
1
1
0
X
1
1
1
1
X
indefinido
Tabla 5-3 Tabla de funcionamiento del latch SR síncrono. Como se ha indicado anteriormente, en los latch SR debe garantizarse que las entradas S y R no valgan 1 al mismo tiempo. Este inconveniente puede evitarse 69
Prácticas de Sistemas Digitales modificando apropiadamente el latch SR para que esto no ocurra, dando lugar así al latch D sincronizado, ver la Figura 5-4. Un latch D también tiene una entrada C que lo habilita, del mismo modo que se hacía en el latch SR sincronizado. Cuando C es igual a 1, la salida Q tomará el mismo valor que la entrada D. Por el contrario, si C es igual a 0, la salida Q mantendrá el último valor de D establecido antes del flanco de bajada del reloj. El funcionamiento del latch D queda recogido en la Tabla 5-4.
Figura 5-4 Latch D síncrono. Como se ha expuesto anteriormente, los latches síncronos con puertas son elementos sencillos de memoria que se habilitan durante todo el intervalo de tiempo en el que la señal de control C es igual a 1. Estos latches se denominan latches sensibles al nivel porque están habilitados siempre que la señal de control esté a 1. En cualquier instante de ese tiempo los latches serán transparentes, en el sentido de que cualquier cambio en las entradas se propagará a la salida. Estos latches funcionan como elementos de memoria sólo después del flanco de bajada de la señal de control, cuando mantienen el estado establecido por el último valor de la entrada anterior al flanco de bajada de la señal de control. C D Q(actual) Q(siguiente) 0
X 0
0
0
X 1
1
1
0
X
0
1
1
X
1
Tabla 5-4 Tabla de funcionamiento del latch D síncrono. Como alternativa de diseño con latches sensibles al nivel están los biestables maestro-esclavo y los biestables disparados por flanco. La diferencia funcional entre los latches y los biestables radica en que los biestables maestro-esclavo y los biestables disparados por flanco no son transparentes, esto es, sólo pueden cambiar de estado durante las transiciones positivas (o negativas) del reloj. La Figura 5-5 es el diagrama lógico de un biestable D maestro esclavo. Está implementado utilizando dos latches, denominados maestro (latch de la izquierda) y esclavo (latch de la derecha). La entrada al latch maestro es la estrada al biestable, la salida del latch esclavo es la salida del biestable completo.
70
Práctica 5: Elementos de estado
Figura 5-5 Biestable D maestro esclavo. La Figura 5-6 es el esquema de un biestable disparado por flanco implementado con tres latches básicos de puesta a uno, de puesta a cero y de salida, interconectados.
Figura 5-6 Biestable D disparado por flanco con entradas asíncronas de clear y preset. Además de los biestables D existen otros. En total son cuatro las clases de biestables: SR, JK, D y T. Se diferencian en el número de entradas y en la respuesta que proporcionan a valores diferentes de las señales de entrada. Las cuatro clases de biestables se indican en la Tabla 5-5. Cada uno de estos biestables puede caracterizarse por su símbolo gráfico, por su tabla característica, su ecuación característica y por su tabla de excitación.
71
Prácticas de Sistemas Digitales Nombre del biestable
Símbolo del biestable
Tabla característica
Ecuación característica
Tabla de excitación
SR S
R Q(t+1)
0
0
Q(t)
0
1
0
1
0
1
1
J
K Q(t+1)
0
0
Q(t)
0
1
0
1
0
1
1
Q(t) Q(t+1) S R 0
0
0 X
0
1
1 0
1
1
0
0 1
X
1
1
X 0
Q(t+1) = S + R’Q
JK
D
T
Q(t) Q(t+1) J K 0
0
0 X
0
1
1 X
1
1
0
X 1
Q’(t)
1
1
X 0
D
Q(t+1)
0
0
1
1
T
Q(t+1)
0
Q(t)
1
Q’(t)
Q(t+1)=JQ’+K’Q
Q(t) Q(t+1) Q(t+1) = D
0
0
0
0
1
1
1
0
0
1
1
1
Q(t) Q(t+1) Q(t+1) = TQ’ +T’Q
D
T
0
0
0
0
1
1
1
0
1
1
1
0
Tabla 5-5 Tipos de biestables. Los símbolos gráficos de los biestables de la Tabla 5-5 además de las entradas ya mencionadas tienen entradas de “set” y “reset” asíncronas, esto es, cuando la entrada 72
Práctica 5: Elementos de estado de “set” (“reset”) asíncrona es activada el biestable cambia al estado de puesta a uno (puesta a cero). Objetivos Los objetivos de esta práctica son: 1. El estudio práctico tanto estructural como funcional de los latches y los biestables. 2. Estudio de los comportamientos oscilatorios mediante la simulación. 3. Aprendizaje y explicación de relaciones causa-efecto con cronogramas complejos. 4. Análisis de circuitos con múltiples realimentaciones. 5. Uso de nuevas características del programa de simulación. 6. Propuesta de patrones de test para la verificación del circuito. Desarrollo de la práctica El tiempo programado para la realización práctica es de 2 horas. Básicamente, la parte experimental consiste en capturar múltiples esquemas correspondientes a latches o biestables y confrontar que los resultados experimentales coinciden con los teóricos. En cada uno de los apartados vamos a realizar una o dos simulaciones que posteriormente habrá que justificar en el cuestionario a rellenar durante la sesión de laboratorio. Realización práctica La realización práctica es casi en su totalidad guiada. Comienza con el estudio de un latch SR, continua con un latch D síncrono, sigue con un biestable D maestro-esclavo y termina con un biestable D disparado por flanco con entradas asíncronas de preset y clear. Para el último apartado el alumno deberá proponer además un vector de test para comprobar el circuito.
Latch SR Inicia la herramienta Xilinx. Luego crea un proyecto de nombre “delay”, tal y como indica la Figura 5-7. En el campo directorio debes hacer referencia a tu directorio personal de trabajo.
73
Prácticas de Sistemas Digitales
Figura 5-7 Ventana de nuevo proyecto. Captura el esquema correspondiente a la implementación con puertas NOR de la Figura 5-1. Para añadir el nombre de “AUX” a la conexión entre la salida de la puerta NOR superior y la primera entrada de la otra puerta NOR selecciona en primer lugar el cable de unión entre estos dos terminales, la herramienta indica que el cable está seleccionado cambiando el color del mismo de azul a rojo. Luego pulsa el botón derecho del ratón y selecciona la opción “Net Properties”. Aparece entonces la ventana de la Figura 5-8, escribe el nombre “AUX” en el campo nombre y luego pica en el botón OK.
Figura 5-8 Ventana para la asignación de un nombre a una conexión. Cambia la posición de la etiqueta “AUX” seleccionándola, picando sobre la etiqueta con el botón izquierdo del ratón y luego arrastrándola, manteniendo pulsado el botón izquierdo a la vez que mueves el ratón. A continuación generamos la netlist usando la opción OptionsÆ ÆCreate Netlist... y la exportamos en el formato EDIF 200 usando la opción del menú principal OptionsÆ ÆExport Netlist... Antes de exportar la netlist podemos comprobar que todo es correcto seleccionando OptionsÆ ÆIntegrity Test. Finalmente abandonamos el editor de esquemas con FileÆ ÆExit. A continuación realizaremos la simulación del latch SR. Picamos en el botón , en la ventana del gestor de proyectos para iniciar el simulador. Una vez en él, usamos SignalÆ ÆAdd Signals... para añadir a la ventana de visualización las señales de entrada S, R, Q y AUX.
74
Práctica 5: Elementos de estado
Figura 5-9 Estímulos para las señales de entrada S y R en el latch SR. A diferencia de las prácticas anteriores, esta vez no utilizaremos las señales del contador para los estímulos de entrada. En lugar de ello modelaremos a nuestra conveniencia las señales de entrada. Las entradas S y R tendrán la forma de onda mostrada en la Figura 5-9.
Figura 5-10 Ventana de selección de estímulos. Para modelar las señales S y R tenemos que editar fórmulas. Selecciona SignalÆ ÆAdd Signal... para que aparezca la ventana de selección de estímulos, ver la Figura 5-10. Pica en el botón Formula... aparecerá la ventana para definición de fórmulas de la Figura 5-11.
Figura 5-11 Ventana para definir fórmulas. En esta ventana pueden definirse fórmulas, en primer lugar definiremos la fórmula “F0” que luego asignaremos a la señal S y en segundo lugar la fórmula “F1” que asignaremos a la señal R. Pica dos veces en la etiqueta de la fórmula F0 para que la herramienta te permita editar la fórmula F0. Escribe en el campo “Edit Formula” “L10H10L30H10L20H10L10”, esto indica que la señal de entrada estará a nivel bajo 10ns, luego otros 10ns a nivel alto, seguido de 30ns a nivel bajo, nuevamente 10ns a
75
Prácticas de Sistemas Digitales nivel alto, seguirán 20ns a nivel bajo, otros 10 más a nivel alto y finalmente 10 a nivel bajo. Para terminar pica en el botón Accept de la ventana para definir fórmulas. Repite los mismos pasos para definir la fórmula F1. Escribe en el campo “Edit Formula” “L30H10L15H10L10H15L10”. Pica en el botón Accept y finalmente en el botón Close. Ahora es posible asignar la fórmula F0 y F1 a las señales de entrada S y R. En la ventana de selección de estímulos una fila de estímulos está etiquetada con el nombre “Form:”, ver Figura 5-10. Pica en la señal de entrada S y luego en el cuadrado más a la derecha de dicha fila, así se asigna el estímulo F0 a la señal de entrada S. Luego pica en la señal de entrada R y posteriormente en el segundo cuadrado empezando por la derecha, así se asigna el estímulo F1 a la señal de entrada R. Cambia el tiempo de simulación para que este sea 100ns, para ello escribe en la subventana intermedia en la barra de herramientas principal el valor de “100ns”. A continuación vamos a realizar la simulación del latch SR en los dos modos de simulación: el funcional y el unitario.
Simulación funcional del latch SR Pulsa el botón
para comenzar la simulación funcional.
Figura 5-12 Mensaje de error por oscilaciones. Después de esperar un tiempo aparece el mensaje de la Figura 5-12, el cual indica que la herramienta de simulación ha detectado un comportamiento oscilatorio del sistema. Pulsa el botón para detener la simulación. El resultado de la simulación es la Figura 5-13.
Figura 5-13 Simulación funcional del latch SR. En el modo funcional de simulación la herramienta presupone la situación ideal donde todos los componentes lógicos tienen retardo de 0 ns. Ello ocasiona que cuando las entradas S y R cambian simultáneamente del nivel lógico alto al nivel lógico bajo, con retardo de 0 ns, sus salidas cambiarán del nivel lógico bajo al nivel alto, lo cual provocará que con retardo 0 la salida cambie nuevamente de nivel, y así sucesivamente. Por tanto ocurre una oscilación irresoluble para la herramienta de simulación.
76
Práctica 5: Elementos de estado Puede ocurrir que para ver claramente el cronograma para la simulación del latch SR que tengas que aumentar el factor de visualización . Una vez aumentada la escala de visualización nos centraremos en los detalles en el intervalo [0ns, 10ns]. En este intervalo observamos que el estado de las señales de salida Q y AUX es desconocido. Esto es así ya que en un latch SR cuando las dos entradas S y R toman el valor 0 las salidas permanecen inalteradas, pero inicialmente el simulador desconoce el valor.
Simulación con retardo unitario del latch SR
Figura 5-14 Cambio a simulación unitaria. Cambia el modo de simulación a “Unit” para que el simulador asigne un retardo unitario a cada puerta y fija que el retardo sea de 1 ns. Ver para ello la Figura 5-14 y la Figura 5-15.
Figura 5-15 Fijación de retardo unitario a 1 ns. Cambia el tiempo de simulación para que este sea 100ns, para ello escribe en la subventana intermedia el valor de “100ns”. Finalmente pulsa el botón comenzar la simulación. El resultado de la simulación es la Figura 5-16.
para
77
Prácticas de Sistemas Digitales
Figura 5-16 Simulación del latch SR implementado con puertas NOR. Puede ocurrir que para ver claramente el cronograma para la simulación del latch SR que tengas que aumentar el factor de visualización . En el intervalo [90ns, 100ns] observamos que mientras las dos señales de entrada S y R están a nivel alto, ambas salidas Q y AUX están a nivel bajo. En el instante de simulación correspondiente a 90ns las entradas S y R cambian simultáneamente a nivel bajo, produciendo un retardo de puerta después un cambio en las señales de salida. A su vez un retardo de puerta después produce un nuevo cambio en la salida y así sucesivamente.
Latch D síncrono Con el objeto de evitar el comportamiento oscilatorio del latch SR es posible construir otro tipo de latch a partir de él, llamado latch D que, sin disminuir la funcionalidad del mismo, evita el problema de las oscilaciones. En la Figura 5-4 está la estructura de un latch D síncrono. La parte práctica de este apartado consiste en realizar la simulación funcional y unitaria del latch D síncrono. Los estímulos a aplicar a las señales C y D son las mostradas en la Figura 5-17. Para ello deberás editar las fórmulas correspondientes.
Figura 5-17 Estímulos de prueba para el latch D síncrono. El resultado de la simulación funcional es la Figura 5-18. En este caso puedes comprobar que la herramienta de simulación no detecta ningún comportamiento oscilatorio.
78
Práctica 5: Elementos de estado
Figura 5-18 Resultado de la simulación del latch D síncrono.
Biestable D maestro esclavo La parte práctica de este apartado consiste en capturar el esquema del biestable D descrito en la Figura 5-5, y realizar la simulación con retardo unitario del mismo. El latch D utilizado en el esquema viene ya implementado en la biblioteca para la familia XC9500 con el nombre “LD”. Las señales de entrada CLOCK y D para la simulación, así como el resultado de la simulación, se muestra en la Figura 5-19.
Figura 5-19 Resultado de la simulación con retardo unitario del biestable D maestro esclavo. Nuevamente habrá que utilizar las entradas tipo “Fórmula” para luego asignarlas a las señales de entrada CLOCK y D.
Biestable D disparado por flanco con entradas asíncronas de set y clear La parte práctica en este apartado consiste en capturar el esquema de la Figura 5-6 y realizar una simulación con retardo unitario del mismo. Los valores para las señales de entrada y el resultado de la simulación aparecen en la Figura 5-20. Observa que las señales de entrada PRS y CLR están puestas a 1.
79
Prácticas de Sistemas Digitales
Figura 5-20 Simulación con retardo unitario del biestable D disparado por flanco. En esta simulación las señales de entrada de PRS y CLR están fijas a valor alto. Modifica estas señales asignándoles fórmulas, de manera que pueda observarse su funcionalidad en el resultado de la simulación.
80
Práctica 5: Elementos de estado
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 1. ¿Qué es una fórmula? ¿Cómo se edita su valor? ¿Cómo se asocia una fórmula a una señal de entrada? 2. ¿Cómo se asigna un nombre a una conexión entre terminales? 3. ¿Cómo se detiene la simulación cuando la herramienta de simulación detecta un comportamiento oscilatorio? 4. ¿Qué ventajas presenta la simulación funcional sobre la simulación con retardo unitario? 5. ¿Cómo se fija el tiempo de simulación? 6. ¿Cómo se fija el retardo unitario de la simulación? 7. ¿Cómo se cambia entre simulación funcional y simulación con retardo unitario? 8. ¿Para qué sirven las señales de PRS y CLR en el esquema de la Figura 5-6? Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 1. Explica el cronograma de la Figura 5-13. 2. Explica el cronograma de la Figura 5-16. 3. Explica el cronograma de la Figura 5-18. 4. Explica el cronograma de la Figura 5-20. 5. Explica las similitudes y las diferencias entre la Figura 5-13 y la Figura 5-16.
81
6. Práctica 6:Camino de datos Índice
Introducción 83 Objetivos 83 Desarrollo de la práctica 84 Multiplicador binario 84 Diseño de la ruta de datos del multiplicador binario de 4 bits 84 Diseño de la unidad de control del multiplicador binario de 4 bits 87 Diseño del multiplicador binario de 4 bits 90 Realización práctica 90 Implementación de la unidad de control 91 Implementación del camino de datos 91 Implementación del multiplicador de 4 bits 92 Anexo 93 Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 94 Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 94
Introducción Los caminos datos se emplean en todas las implementaciones de procesadores estándar y de ASIC (circuitos integrados de propósito específico) para realizar cálculos numéricos complejos y manipular datos. Un camino de datos consta de elementos de memoria temporal, además de unidades aritméticas, lógicas, y de desplazamiento. En estos caminos de datos tiene lugar la ejecución de algoritmos bajo la supervisión de la unidad de control. Una unidad de control no es más que la implementación de una máquina de estados finitos en la que, en cada estado, dependiendo de los valores de la señales provenientes del camino de datos o externas, se produce la correcta activación de las señales de control del camino de datos. En esta práctica se diseñará una unidad de control para un camino de datos que realizará la operación de multiplicación binaria. Objetivos Los objetivos de esta práctica son: 1. Diseño, implementación y depuración de un circuito secuencial.
83
Prácticas de Sistemas Digitales 2. Aprendizaje de nuevas funcionalidades de la herramienta de simulación. 3. Utilización de las técnicas de modularización y jerarquización para el diseño de sistemas complejos. Desarrollo de la práctica El desarrollo de esta práctica consta de dos pasos: en el primero, tras un trabajo previo de diseño personal en papel, se implementa la unidad de control; en segundo lugar, se captura el esquema del camino de datos propuesto en este guion y posteriormente ambas partes se unen para construir el multiplicador. Multiplicador binario Resulta complejo realizar el diseño y posterior implementación de un circuito digital que realice la operación de multiplicación binaria usando técnicas exclusivamente combinacionales. En cambio, si se utilizan técnicas secuenciales el proceso se simplifica bastante. En general, aplicando técnicas de diseño de circuitos secuenciales es posible trasladar, la mayoría de las veces, fácilmente una especificación algorítmica a un circuito digital que la implemente. La Figura 6-1 es un ejemplo de algoritmo de multiplicación mediante sumas iterativas. Este algoritmo dista mucho de ser óptimo según criterios de coste y velocidad, pero en cambio es muy sencillo de implementar en un circuito digital. En primer lugar vamos a examinar el algoritmo para detectar qué componentes estructurales harían falta para su implementación en un circuito digital. Este paso recibe el nombre de diseño de la “ruta o camino de datos”. En segundo lugar diseñaremos una “unidad de control” para esa ruta de datos. La funcionalidad de la unidad de control es generar convenientemente las señales de control para esa ruta de datos de manera que la multiplicación tenga lugar correctamente. Esta unidad de control será en este caso simplemente una máquina de estados finitos tipo Moore.
Diseño de la ruta de datos del multiplicador binario de 4 bits Examinando el algoritmo de multiplicación binaria descrito en la Figura 6-1 detectamos que necesitamos tres “lugares” o registros de 4 bits para almacenar datos. Un registro de 4 bit para la variable CX, otro para CY y uno más para P de 8 bits.
84
Práctica 6:Camino de datos
Un algoritmo de multiplicación: P = X x Y
SÍ
Inicio
Estado S0
CX = X; CY=Y; P ='0';
Estado S1
¿CY='0'? NO P = CX + P; CY = CY -1;
Estado S2
Fin
Figura 6-1 Un algoritmo de multiplicación. Las operaciones realizadas en el algoritmo de multiplicación son sumas y decrementos. Debe ser posible realizar la suma entre el contenido del registro CX y el contenido del registro P y guardar nuevamente el resultado en P. También debe ser posible decrementar en una unidad el registro CY. Por tanto, necesitamos una ALU. Esta ALU debe ser de 8 bits ya que en general el resultado de multiplicar dos números binarios de n bits en un número binario de 2n bits. Una posible ruta de datos implementada con componentes elementales de la biblioteca de la herramienta de captura de esquemáticos con todas esta funcionalidades puede verse en la Figura 6-2. Esta misma ruta de datos se muestra a mayor escala en la Figura 6-11.
85
Prácticas de Sistemas Digitales
Figura 6-2 Ruta de datos para la multiplicación binaria de números de 4 bits. El registro CX es el componente de la biblioteca “FD4RE”. Es un registro de 4 bits integrado por un bloque con 4 biestables D disparados por flanco y con el terminal de entrada síncrona R (reset) siempre inactivo. El registro CY es el componente de la biblioteca “CB4X2”. Es un registro contador de 4 bits bidireccional, es decir, puede contar de forma ascendente o descendente. Posee funcionalidad para cargar el valor presente en las señales de entrada D[3:0] y también tiene el terminal de entrada síncrono R (reset) siempre inactivo. El registro P es el componente de la biblioteca “FD8RE”. Es exactamente igual que el registro CX, pero con 8 bits. A diferencia del registro CX, el registro P no tiene la señal de entrada síncrona R (reset) siempre inactiva, sino que en su lugar está conectado el terminal de entrada RSP que controlará la puesta a cero de este registro. Además, esta ruta de datos utiliza la ALU de 8 bits “ADD8” para calcular la suma de los registros CX y P, almacenando el resultado en el registro P. Nombre
Tipo
Funcionalidad
CLK
Entrada Señal de reloj. En el flanco de subida de la señal CLK ocurren los cambios en los registros.
LDX
Entrada Carga el contenido del bus X en el registro CX.
LDY
Entrada Carga el contenido del bus Y en el registro contador CY.
LDP
Entrada Carga la salida de la ALU en el registro P.
RSP
Entrada Pone a cero el registro P.
DCY
Entrada Decrementa el registro contador CY.
CYZ
Salida
Indica cuando el registro contador CY es cero.
Tabla 6-1 Funcionalidad de las señales de control del camino de datos. 86
Práctica 6:Camino de datos En la Tabla 6-1 está descrito el comportamiento de las señales de control del camino de datos de la Figura 6-2. Así por ejemplo, para realizar las operaciones dentro del bloque etiquetado como estado S1 en el organigrama de la Figura 6-1, es suficiente con activar las señales LDX, LDY y RSP. Para realizar las operaciones descritas en el bloque con nombre estado S2 basta con activar las señales LDP y DCY. El comportamiento de esta ruta de datos puede abstraerse en un bloque funcional como el representado en la Figura 6-3. Este bloque funcional exporta únicamente los valores de las entradas y las salidas de la ruta de datos correspondiente al multiplicador binario de 4 bits.
Figura 6-3 Bloque funcional del camino de datos para el multiplicador binario de 4 bits. Para completar el diseño y que se realice la operación de multiplicación, es necesario que las señales de entrada tomen los valores adecuados, en función de qué valores vayan teniendo las señales de salida. El componente encargado de activar y desactivar las señales de control es la unidad de control y su comportamiento se especificará mediante un diagrama de estados.
Diseño de la unidad de control del multiplicador binario de 4 bits La especificación del comportamiento de la unidad de control para el camino de datos de la Figura 6-3 puede verse en la Figura 6-4.
87
Prácticas de Sistemas Digitales
Figura 6-4 Máquina de estados finitos para la especificación de la unidad de control. Consta de tres estados: S0, S1 y S2, y además de manejar las señales del camino de datos tiene otras tres señales más: RST (reset), START y DONE. La señal de entrada RST lleva a la máquina al estado inicial. En el instante de tiempo cero el estado inicial es aleatorio, los estados de los biestables pueden ser cualesquiera y es por ello que antes de comenzar a utilizar el circuito de multiplicación es necesario un pulso en la señal de RST que lleve el circuito al estado S0. La señal de entrada START indica a la unidad de control que debe comenzar a realizar una operación de multiplicación y que en el siguiente pulso de reloj los datos a multiplicar X e Y van a estar disponibles en los buses de entrada del camino de datos. Finalmente, la señal DONE indica que la operación de multiplicación ha finalizado y que el resultado está en el bus de salida P. Esta señal es necesaria porque el número de ciclos que tarda en realizarse la operación de multiplicación no es constante, depende de los operandos. En ausencia de esta señal debería esperarse siempre el número máximo de ciclos.
Figura 6-5 Realización de una operación de multiplicación. La Figura 6-5 muestra la secuencia de activación de las señales en la unidad de control del circuito de multiplicación. En primer lugar, la activación de la señal de RST, lleva a la unidad de control al estado S0. A continuación, la activación de la 88
Práctica 6:Camino de datos señal de START indica que la operación de multiplicación tenga lugar. Tras varios ciclos de reloj la unidad de control activa la señal de DONE para indicar que la operación ha finalizado. El diagrama de estados de la Figura 6-4 especifica todo el control necesario para la operación de multiplicación. En esta figura, las acciones están dibujadas dentro de un recuadro fuera de los estados, a diferencia de los diagramas habituales, simplemente por razones de espacio. El diagrama está capturado con una herramienta que soporta el lenguaje de descripción de hardware VHDL. En este lenguaje los operadores de asignación y de igualdad son los símbolos “COPY PROJECT en el menú principal en la ventana del gestor de proyectos a usar las herramientas del sistema operativo para copiar ficheros. Otra posibilidad también válida es usar la característica ARCHIVE, esto pondrá toda la información del proyecto en un fichero comprimido formato zip. 3. Al copiar un proyecto a un disquete utilizando la opción FILE->COPY PROJECT la herramienta avisa que el disquete no tiene espacio suficiente para guardar el proyecto. Esta situación suele ocurrir cuando intentamos guardar en un disquete proyectos en los cuales hay simulaciones con tiempos de simulación grandes. Es este caso puedes utilizar la característica ARCHIVE para guardar el proyecto de manera comprimida o bien eliminar del proyecto los ficheros de simulación que genera automáticamente el
Prácticas de Sistemas Digitales simulador (fichero con extensión .tve). En el caso de persistir el error prueba a utilizar un disquete vacío. Errores en el editor esquemático 1. El editor de esquemáticos muestra una hoja de diseño vacía en lugar del diseño capturado. Una forma de encontrar el diseño es picar en el botón de zoom de área completa en la barra de herramientas principal, de esta manera toda la hoja de diseño aparece en la ventana del esquemático. Es posible hacer zoom de un área particular picando en primer lugar en el botón , luego pica con el ratón en el vértice superior izquierdo de un recuadro imaginario conteniendo la parte del esquemático que se quiere ampliar y posteriormente en la esquina inferior izquierda de ese recuadro. El recuadro marcado ocupará ahora toda la hoja del esquemático. 2. Cuando un símbolo está situado cerca de otro, ambos parecen estar interconectados, pero no es así. Los símbolos deben conectarse siempre con cables. Lo mejor para no cometer errores es no situar un símbolo cerca de otro. El paso “Integrity Test”, al generar la netlist avisa de esta situación. Los mensajes de este paso aparecen en la subventana de mensajes dentro de la ventana principal del gestor de proyectos. En el paso de simulación probablemente debido a estas conexiones no realizadas aparecerán salidas con valor X (desconocido) o Z (alta impedancia). 3. Nombrar diferentes nodos con el mismo identificador ocasiona que estos sean todos el mismo punto eléctrico. Cada nodo tiene que tener un nombre propio único, a menos que el diseñador lo que realmente quiera sea que dos nodos en diferente lugar del esquema sean el mismo punto eléctrico. En el paso de simulación, probablemente debido a estos cortocircuitos, aparecerán salidas con valor X (desconocido) o Z (alta impedancia). 4. Al actualizar el diseño de una macro deben actualizarse también los datos del simulador. Esto puede realizarse en dos pasos: en el primero hay que utilizar la opción de UPDATE SIMULATOR en el editor de esquemáticos y en el segundo exportar la netlist. 5. Al usar una tierra (GND) o alimentación (Vcc) deben utilizarse los símbolos de la SC Symbol Libray y no el símbolo GND en la barra de herramienta de la izquierda, en la ventana del editor de esquemáticos. 6. El editor de esquemáticos muestra los símbolos en color gris. Este error puede ocurrir al añadir un esquema ya existente a un proyecto nuevo. Para evitar esta situación, deben incorporarse al proyecto las librerías correspondientes del esquema a añadir. Por ejemplo, si el fichero con el esquemático tiene de nombre “ALU4.SCH” debe añadirse la librería “ALU4”, para ello selecciona FILE->PROJECT LIBRARIES..., pica en la librería ALU4 y luego pica en el botón ADD>>. La librería “ALU4” aparecerá ahora como una librería del proyecto. Para actualizar el esquema cierra y vuelve abrir el editor de esquemas. Errores en el simulador 1. El simulador no muestra las señales. Cuando la escala de visualización es muy pequeña las señales tienen que dibujarse en muy pocos pixeles, la 96
Errores más frecuentes solución para evitar esta situación es aumentar la escala de visualización picando en el botón . 2. Los valores visualizados de señales agrupadas en un bus son incorrectos. Esto puede ocurrir si el bit más significativo es el menos significativo y viceversa. Para corregir esta situación usa la opción SIGNAL->BUS->Change Direction. 3. Las señales del esquema no aparecen en el simulador. Esto puede ocurrir cuando el esquema está abierto, pero no pertenece al proyecto. Basta usar la opción Document->Add en la ventana principal del gestor del proyecto para incorporar el fichero conteniendo el esquema al proyecto y reiniciar la herramienta de simulación. 4. Aparece una señal con el valor X (desconocido) o Z (alta impedancia). Las causas pueden ser las descritas en Errores en el editor esquemático. Otra posible causa más es haber conectado un estímulo a una señal de salida.
Bibliografía [Bout99]
Bout, David Van den. The practical Xilinx Designer Lab Book.
[Floy97]
Floyd, Thomas L. Principios digitales, 6ª edición. Prentice Hall.
[Gask97]
Gajski, Daniel D., Principios de diseño digital, Prentice Hall.
[Haye96] Hayes, Jhon P., Introducción al Diseño Lógico Digital, Addison Wesley Iberoamericana. Página Web de Xilinx Foundations Series: http://www.xilinx.com
97
View more...
Comments