• No se han encontrado resultados

Manual Practicas Digitales Excelente

N/A
N/A
Protected

Academic year: 2021

Share "Manual Practicas Digitales Excelente"

Copied!
107
0
0

Texto completo

(1)
(2)
(3)

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

(4)

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

(5)

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

(6)
(7)

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

(8)

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:

(9)

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.

(10)
(11)

Í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.

(12)

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

(13)

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.

(14)

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.

(15)

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.

(16)

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 en el botón . Entonces se ejecuta el editor de esquemas que tiene una apariencia 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.

(17)

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 pulsamos el botón de la barra de herramientas o bien vamos a la parte superior 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”.

(18)

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

(19)

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.

(20)

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.

(21)

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.

(22)

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

(23)

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.

(24)

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?

(25)

Í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

(26)

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

(27)

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:

INPUT CARRY INPUT INPUT SUM = 0⊕ 1⊕ _ ) 1 0 ( * _ 1 0

_OUT INPUT INPUT CARRY INPUT INPUT INPUT

CARRY = ∗ + ⊕

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.

(28)

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.

(29)

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 botón , en 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. Luego, seleccionando SignalÆAdd Stimulators... conectamos las entradas a los tres bits inferiores del contador binario (Bc0, Bc1, Bc2). Finalmente, picamos en el botón en la barra de herramientas del simulador 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.

(30)

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,

(31)

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.

(32)

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.

(33)

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.

(34)

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

(35)

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.

(36)

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.

(37)

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.

(38)
(39)

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?

(40)
(41)

Í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.

(42)

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.

(43)

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.

(44)

F 32 1 Desbordamiento A M 1 S1 1 S0 1 32 B 32 CO 1

Unidad aritmético lógica

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.

A 0 B 0 C 0 X 0 Y 0 ∑ 1 bit L E A E F 0 A 1 B 1 C 1 X 1 Y 1 ∑ 1 bit L E A E F 1 A 2 B 2 C 2 X 2 Y 2 ∑ 1 bit L E A E F 2 A 3 B 3 C 3 X 3 Y 3 ∑ 1 bit L E A E F 3 C 4

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

(45)

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 A Todos ceros 1 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.

(46)

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

Referencias

Documento similar

Después de una descripción muy rápida de la optimización así como los problemas en los sistemas de fabricación, se presenta la integración de dos herramientas existentes

Mientras tanto, en su análisis inferencial se pudo reflejar que el coeficiente de correlación de 0,318 expresando una correlación positiva media entre las variables de

Sanz (Universidad Carlos III-IUNE): "El papel de las fuentes de datos en los ranking nacionales de universidades".. Reuniones científicas 75 Los días 12 y 13 de noviembre

(Banco de España) Mancebo, Pascual (U. de Alicante) Marco, Mariluz (U. de València) Marhuenda, Francisco (U. de Alicante) Marhuenda, Joaquín (U. de Alicante) Marquerie,

Missing estimates for total domestic participant spend were estimated using a similar approach of that used to calculate missing international estimates, with average shares applied

Por lo tanto, en base a su perfil de eficacia y seguridad, ofatumumab debe considerarse una alternativa de tratamiento para pacientes con EMRR o EMSP con enfermedad activa

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

La siguiente y última ampliación en la Sala de Millones fue a finales de los años sesenta cuando Carlos III habilitó la sexta plaza para las ciudades con voto en Cortes de