Libro Prácticas Gii FC 2019 v03
Libro Prácticas Gii FC 2019 v03
Libro Prácticas Gii FC 2019 v03
Fundamentos de
Computadores
Grado en Ingeniería Informática – Plan 2019
Escuela de Ingeniería Informática
Autores: Cuenca Hernández, Carmelo
Quintana Domínguez, Francisca
Título: Prácticas de Fundamentos de Computadores
Dirección: Edificio de Informática y Matemáticas
Campus Universitario de Tafira
35017 Las Palmas de Gran Canaria
Reservados todos los derechos. La reproducción total o parcial de esta obra por cualquier medio o procedimiento
comprendidos la reprografía y el tratamiento informático, y la distribución de ejemplares de ella mediante alquiler
o préstamos públicos, queda rigurosamente prohibida sin la autorización escrita de los titulares del copyright, bajo
las sanciones establecidas por las leyes.
Sin perjuicio de lo anterior, queda expresamente autorizada la reproducción reprográfica total o parcial de esta
obra por miembros de la comunidad universitaria de la Universidad de Las Palmas de Gran Canaria para uso
docente en el ámbito de la misma.
© Universidad de Las Palmas de Gran Canaria, 2019
Contenido
i
Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) .......... 72
ii
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) 15
Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 15
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.
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
1
Práctica 1: Introducción a las herramientas de diseño
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 esta asignatura 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, 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 esta asignatura 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.
2
Práctica 1: Introducción a las herramientas de diseño
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.
3
Práctica 1: Introducción a las herramientas de diseño
Y X Z
0 0 1
0 1 1
1 0 1
1 1 0
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
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.
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áctica 1: Introducción a las herramientas de diseño
6
Práctica 1: Introducción a las herramientas de diseño
7
Práctica 1: Introducción a las herramientas de diseño
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
8
Práctica 1: Introducción a las herramientas de diseño
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áctica 1: Introducción a las herramientas de diseño
Figura 1-12 Ventana para exportar una netlist en formato EDIF 200.
10
Práctica 1: Introducción a las herramientas de diseño
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.
11
Práctica 1: Introducción a las herramientas de diseño
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.
12
Práctica 1: Introducción a las herramientas de diseño
permite probar todas las combinaciones de la tabla de verdad del circuito se calcula
como:
𝑷𝑷𝑷𝑷𝑷𝑷í𝒐𝒐𝒐𝒐𝒐𝒐 𝑩𝑩𝑩𝑩
𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻 𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺ó𝒏𝒏 = 𝟐𝟐𝑵𝑵ú𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎 𝒅𝒅𝒅𝒅 𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆 ·
𝟐𝟐
En nuestro caso, el circuito tiene 2 entradas que son X e Y. Hemos fijado el período
de B0 (B0 Period) a 20ns. Por lo tanto, el tiempo de simulación es de 40ns.
20
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆ó𝑛𝑛 = 22 · = 40𝑛𝑛𝑛𝑛
2
El valor calculado para el tiempo de simulación lo colocamos en el desplegable que se
encuentra a la derecha del botón . Para comenzar la simulación pulsamos en el
botón y 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 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.
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
13
Práctica 1: Introducción a las herramientas de diseño
14
Práctica 1: Introducción a las herramientas de diseño
15
Práctica 2: Circuitos combinacionales
Índice
Introducción 17
Objetivos 17
Desarrollo de la práctica 18
Sumador binario de un bit 18
Realización práctica 19
Realización de un sumador binario de un bit 19
Realización de un sumador binario de 2 bits 22
Realización de un sumador binario de 8 bits 29
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 32
Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 32
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 final
usará aproximadamente 100 puertas lógicas y 150 conexiones, requiriendo del alumno
destreza a la hora de la captura del esquema.
17
Práctica 2: Circuitos combinacionales
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
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 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.
18
Práctica 2: Circuitos combinacionales
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.
19
Práctica 2: Circuitos combinacionales
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
FileSave As y rellenamos los campos de la ventana con los valores indicados en la
Figura 2-4. Finalmente picamos en el botón Aceptar.
20
Práctica 2: Circuitos combinacionales
Una vez que hemos finalizado el esquema generamos una netlist usando la opción
OptionsCreate Netlist... y la exportamos en el formato EDIF 200 usando la opción
del menú principal OptionsExport Netlist... Antes de exportar la netlist podemos
comprobar que todo es correcto seleccionando OptionsIntegrity Test. Finalmente
abandonamos el editor de esquemas con FileExit.
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 SignalAdd Signals... para añadir las entradas y salidas en la ventana
de visualización de señales. Luego, seleccionando SignalAdd 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.
21
Práctica 2: Circuitos combinacionales
22
Práctica 2: Circuitos combinacionales
Figura 2-6 Ventana para añadir el esquema add1.SCH del proyecto Add1_95 al
proyecto Add2_95.
23
Práctica 2: Circuitos combinacionales
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 nombre del terminal escribiremos el nuevo nombre
del terminal.
Figura 2-8 Ventana para cambiar el nombre a los terminales de entrada y salida.
24
Práctica 2: Circuitos combinacionales
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.
25
Práctica 2: Circuitos combinacionales
26
Práctica 2: Circuitos combinacionales
27
Práctica 2: Circuitos combinacionales
Figura 2-12 Ventana de visualización de las señales tras definir los buses para
las entradas y las salidas.
28
Práctica 2: Circuitos combinacionales
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
29
Práctica 2: Circuitos combinacionales
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 las
combinaciones en las entradas. Para ello calculamos el tiempo de simulación de
acuerdo a la fórmula ya vista en la práctica anterior:
𝑷𝑷𝑷𝑷𝑷𝑷í𝒐𝒐𝒐𝒐𝒐𝒐 𝑩𝑩𝑩𝑩
𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻𝑻 𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺𝑺ó𝒏𝒏 = 𝟐𝟐𝑵𝑵ú𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎 𝒅𝒅𝒅𝒅 𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆 ·
𝟐𝟐
30
Práctica 2: Circuitos combinacionales
𝑷𝑷𝑷𝑷𝑷𝑷í𝒐𝒐𝒐𝒐𝒐𝒐 𝑩𝑩𝑩𝑩
𝒕𝒕(𝑵𝑵) = 𝑵𝑵 ·
𝟐𝟐
Siendo N el valor decimal de la correspondiente combinación de Y y X. Para dos
valores cualesquiera de Y y X, calculamos N como:
𝑵𝑵 = 𝒀𝒀 · 𝟐𝟐𝟐𝟐𝟐𝟐 + 𝑿𝑿
Por lo tanto, para cualquier combinación de los valores de entrada (Y,X), el instante
de tiempo donde se está realizando dicha simulación se calcula como:
𝑷𝑷𝑷𝑷𝑷𝑷í𝒐𝒐𝒐𝒐𝒐𝒐 𝑩𝑩𝑩𝑩
𝒕𝒕(𝒀𝒀, 𝑿𝑿) = (𝒀𝒀 · 𝟐𝟐𝟐𝟐𝟐𝟐 + 𝑿𝑿) ·
𝟐𝟐
31
Práctica 2: Circuitos combinacionales
32
Práctica 3: Diseño modular y jerárquico
Índice
Introducción 33
Objetivos 35
Desarrollo de la práctica 35
ALU de 4 bits 36
Realización práctica 39
Realización de un módulo sumador de 1 bit 40
Realización del ampliador aritmético de 1 bit 42
Realización del ampliador lógico de 1 bit 44
Realización de la ALU de 4 bits 45
Simulación de la ALU de 4 bits 48
Realización de la ALU de 32 bits 51
Anexo 53
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 56
Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 56
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.
33
Práctica 3: Diseño modular y jerárquico
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.
34
Práctica 3: Diseño modular y jerárquico
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.
35
Práctica 3: Diseño modular y jerárquico
A B
32 32
1
M
CO 1
Unidad aritmético lógica S0
1
1
S1
32 F
1 Desbordamiento
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 A2 B2 A1 B1 A0 B0
A A A A
L E L E L E L E
E E E E
C4 X3 Y3 C3 X2 Y2 C2 X1 Y1 C1 X0 Y0 C0
F3 F2 F1 F0
Figura 3-3 Sumador de 4 bits con ampliadores aritméticos (AE) y lógicos (LE).
36
Práctica 3: Diseño modular y jerárquico
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 0
unos
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 1
ceros
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
37
Práctica 3: Diseño modular y jerárquico
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
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
38
Práctica 3: Diseño modular y jerárquico
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.
39
Práctica 3: Diseño modular y jerárquico
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
DocumentAdd 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 buffers OBUF.
40
Práctica 3: Diseño modular y jerárquico
Una vez que has hecho todo esto, el esquema del sumador binario debe ser similar al
de la Figura 3-9.
41
Práctica 3: Diseño modular y jerárquico
42
Práctica 3: Diseño modular y jerárquico
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 FileSave. Luego usamos los
menús OptionsCreate Netlist, OptionsIntegrity Test y OptionsExport
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ú HierarchyCreate 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.
43
Práctica 3: Diseño modular y jerárquico
Una vez que finalizamos, salvamos el esquema con FileSave. Luego usamos los
menús OptionsCreate Netlist, OptionsIntegrity Tests y OptionsExport
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.
44
Práctica 3: Diseño modular y jerárquico
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.
45
Práctica 3: Diseño modular y jerárquico
46
Práctica 3: Diseño modular y jerárquico
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.
47
Práctica 3: Diseño modular y jerárquico
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.
48
Práctica 3: Diseño modular y jerárquico
49
Práctica 3: Diseño modular y jerárquico
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 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
simulación de la Figura 3-24. Pica en el botón para añadir señales. El editor 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.
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
50
Práctica 3: Diseño modular y jerárquico
51
Práctica 3: Diseño modular y jerárquico
52
Anexo
53
Práctica 3: Diseño modular y jerárquico
54
Práctica 3: Diseño modular y jerárquico
55
Práctica 3: Diseño modular y jerárquico
56
Práctica 4: Captura y simulación de elementos
biestables
Índice
Introducción 57
Objetivos 64
Desarrollo de la práctica 64
Realización práctica 64
Latch SR 64
Simulación funcional del latch SR 67
Simulación con retardo unitario del latch SR 68
Latch D síncrono 69
Biestable D maestro esclavo 70
Biestable D disparado por flanco con entradas asíncronas de set y clear. 70
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 72
Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 72
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 4-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).
57
Práctica 4: Captura y simulación de elementos biestables
58
Práctica 4: Captura y simulación de elementos biestables
59
Práctica 4: Captura y simulación de elementos biestables
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
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 modificando
apropiadamente el latch SR para que esto no ocurra, dando lugar así al latch D
sincronizado, ver la Figura 4-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 4-4.
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.
60
Práctica 4: Captura y simulación de elementos biestables
C D Q(actual) Q(siguiente)
0 X 0 0
0 X 1 1
1 0 X 0
1 1 X 1
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 4-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 entrada al biestable, la
salida del latch esclavo es la salida del biestable completo.
61
Práctica 4: Captura y simulación de elementos biestables
Figura 4-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 4-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.
62
Práctica 4: Captura y simulación de elementos biestables
JK
J K Q(t+1) Q(t) Q(t+1) J K
0 0 Q(t) 0 0 0 X
0 1 0 Q(t+1)=JQ’+K’Q 0 1 1 X
1 0 1 1 0 X 1
1 1 Q’(t) 1 1 X 0
Los símbolos gráficos de los biestables de la Tabla 4-5 además de las entradas ya
mencionadas tienen entradas de “set” y “reset” asíncronas, esto es, cuando la entrada
63
Práctica 4: Captura y simulación de elementos biestables
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 desarrollo de la práctica 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 deben
comprender pues es lo que luego se les preguntará en los cuestionarios 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 “flipflop”, tal y como
indica la Figura 4-7. En el campo directorio debes hacer referencia a tu directorio
personal de trabajo.
64
Práctica 4: Captura y simulación de elementos biestables
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 utilizando fórmulas. Las entradas S y R tendrán
una forma de onda que definiremos a nuestra conveniencia, como podría ser la forma
mostrada en la Figura 4-9.
65
Práctica 4: Captura y simulación de elementos biestables
Para modelar las señales S y R tenemos que editar fórmulas. Selecciona SignalAdd
Stimulators... para que aparezca la ventana de selección de estímulos, ver la Figura
4-10. Pica en el botón Formula... aparecerá la ventana para definición de fórmulas de
la Figura 4-11.
66
Práctica 4: Captura y simulación de elementos biestables
Después de esperar un tiempo aparece el mensaje de la Figura 4-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
4-13.
67
Práctica 4: Captura y simulación de elementos biestables
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
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 para
comenzar la simulación. El resultado de la simulación es la Figura 4-16.
68
Práctica 4: Captura y simulación de elementos biestables
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 4-4 se muestra 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 4-17. Para ello deberás editar las fórmulas correspondientes.
69
Práctica 4: Captura y simulación de elementos biestables
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 4-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 4-20. Observa que las señales de entrada PRS y CLR están puestas a 1.
70
Práctica 4: Captura y simulación de elementos biestables
Figura 4-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.
71
Práctica 4: Captura y simulación de elementos biestables
72
Práctica 5: Captura y simulación de una ruta de datos
y de la unidad de control asociada
Índice
Introducción 73
Objetivos 73
Desarrollo de la práctica 74
Multiplicador binario 74
Diseño de la ruta de datos del multiplicador binario de 4 bits 74
Diseño de la unidad de control del multiplicador binario de 4 bits 78
Diseño del multiplicador binario de 4 bits 80
Realización práctica 80
Implementación de la unidad de control 81
Implementación del camino de datos 82
Implementación del multiplicador de 4 bits 83
Anexo 85
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 86
Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 86
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 las 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.
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.
73
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
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 5-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 5-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.
74
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
Inicio/Fin Estado S0
CX = X Estado S1
CY = Y
P=0
Sí
¿CY=0?
No
P = P + CX
CY = CY-1 Estado S2
75
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
76
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
En la Tabla 5-1 está descrito el comportamiento de las señales de control del camino
de datos de la Figura 5-2.
Así por ejemplo, para realizar las operaciones dentro del bloque etiquetado como
estado S1 en el organigrama de la Figura 5-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 5-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 5-3 Bloque funcional del camino de datos para el multiplicador binario
de 4 bits.
77
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
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.
78
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
79
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
Una vez diseñados el camino de datos y la unidad de control, para finalizar el diseño
del multiplicador binario será únicamente necesario conectar los diagramas de bloques
de la Figura 5-3 y de la Figura 5-6, tal y como muestra la Figura 5-7.
En la Figura 5-7 el único detalle significativo es el hecho que las señales de reloj de la
unidad de control y del camino de datos están invertidas una respecto de la otra. Esto
es así ya que los cambios de estado ocurren en la transición positiva del reloj y por
tanto el funcionamiento del camino de datos debe producirse en las transiciones
negativas, lo cual es equivalente a invertir la señal de reloj conectada a la ruta de datos.
Realización práctica
La realización práctica consiste en la implementación de la unidad de control a partir
de un diseño propio del alumno, la captura del esquemático del camino de datos, la
simulación de ambos módulos de manera independiente y posteriormente la unión de
los módulos para realizar la operación de multiplicación.
Una característica del programa, que resulta muy útil para depurar la máquina de
estados, es la posibilidad de usar las letras del teclado como estímulos.
80
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
Realiza la simulación que consideres oportuna cara a verificar que el diseño propuesto
funciona correctamente. Una vez hecho esto, el esquema está preparado para
encapsularlo en un módulo funcional. Para crear el símbolo, seleccionamos
HierarchyCreate Macro Symbol from Current Sheet en el menú principal del
editor de esquemáticos. Aparece la ventana de creación de símbolos, Figura 5-9. A
81
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
diferencia de lo que aparece en la Figura 5-9, escribe como nombre del símbolo “State
Machine”, y en el campo comentario la frase “Máquina de estados del multiplicador”,
luego pica el botón de OK. La herramienta nos informará, mediante un mensaje, de
que el símbolo “State Machine” 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.
Implementación del camino de datos
Captura el camino de datos de la Figura 5-2. Para hacer esta captura debes tener en
cuenta varias consideraciones. En primer lugar, en este esquema el símbolo etiquetado
con “GND” corresponde al símbolo GND de la Figura 5-10.
Para dibujar los buses selecciona en el menú principal ModeDraw Buses. Por
ejemplo para dibujar el bus X, pica a la izquierda y traza el bus tal como está dibujado
en el esquema de la Figura 5-2. Para terminar el trazado del bus pica dos veces.
Entonces aparece la ventana de edición de bus, Figura 5-11. En el campo “nombre”
escribe X; 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.
82
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
Procede de la misma manera para dibujar el bus Y y el bus P, teniendo en cuenta que
P es de tipo OUTPUT y con un total de 8 líneas (de 7 a 0). Para los buses intermedios,
procede también de esta forma teniendo en cuenta que esos buses no son de entrada ni
de salida.
Una vez terminada la captura, realiza la simulación que consideres oportuna cara a
verificar que el diseño propuesto funciona correctamente y finalmente crea una macro
para este diseño, tal como hiciste en el apartado anterior para la unidad de control,
seleccionando HierarchyCreate Macro Symbol from Current Sheet en el menú
principal del editor de esquemáticos. Aparece la ventana de creación de símbolos,
Figura 5-9. A diferencia de lo que aparece en la Figura 5-9, escribe como nombre del
símbolo “Data path”, y en el campo comentario la frase “Camino de datos del
multiplicador”, luego pica el botón de OK. La herramienta nos informará, mediante
un mensaje, de que el símbolo “Data path” 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.
Implementación del multiplicador de 4 bits
En este apartado debes establecer las conexiones entre el camino de datos y la unidad
de control, tal y como indica la Figura 5-7.
Realiza la simulación que consideres oportuna cara a verificar que el diseño propuesto
funciona correctamente.
La Figura 5-12 muestra el resultado de la simulación para la multiplicación de los
números X=6 e Y=4 con el resultado de P=24. En esta simulación también se muestra
el secuenciamiento de las señales de control así como las señales de estado.
83
Práctica 5: Captura y simulación de una ruta de datos y de la unidad de control asociada
84
Anexo
85
Autocuestionario (a rellenar ANTES de la sesión de laboratorio)
1. Especifica la implementación de la unidad de control. Esta pregunta pretende
que, antes de comenzar la realización en laboratorio, especifiques en papel, con
todo detalle, el tipo de biestable que utilizarás, el circuito combinacional para
realizar la transición al estado siguiente, así como el circuito combinacional
que produce la salida.
86
Práctica 6: Componentes de memoria
Índice
Introducción 87
Objetivos 89
Desarrollo de la práctica 90
Realización práctica 90
Banco de registros de 8 registros de 32 bits con 2 puertos de lectura y uno de
escritura 90
Banco de registros de 32 registros de 32 bits con 2 puertos de lectura y uno de
escritura 93
Autocuestionario (a rellenar ANTES de la sesión de laboratorio) 98
Cuestionario de laboratorio (a rellenar durante la sesión de laboratorio) 98
Introducción
Los componentes de memoria almacenan información binaria (0s o 1s) para un
posterior acceso o procesamiento, y están presentes en el diseño de circuitos digitales
simples y complejos (como por ejemplo la ruta de datos del procesador). La
complejidad de los componentes de memoria es variada, yendo desde los más simples,
como las celdas básicas de almacenamiento construidas con un transistor y un
condensador o los biestables, hasta los más complejos, como los bancos de registros o
las memorias para almacenamiento masivo de información.
El conocimiento del diseño del banco de registros resulta necesario para el
entendimiento de la estructura de un procesador. El banco de registros es el
componente de memoria más cercano a la unidad aritmético-lógica (ALU) del
procesador, siendo el lugar físico donde están almacenados los operandos de las
instrucciones que ejecuta el procesador.
Un banco de registros está definido por sus parámetros de diseño, que son: el número
de registros, normalmente un número potencia de 2 (8, 16, 32…); la anchura o
número de bits de cada registro (16, 32…); el número de puertos de lectura (1,
2…) que determina el número máximo de registros que se pueden leer
simultáneamente; y el número de puertos de escritura (1, 2…) que fija de manera
análoga el número de registros que se pueden escribir simultáneamente.
Los parámetros de diseño del banco de registros determinan las entradas y salidas del
banco de registros. Por ejemplo, la Figura 6-1 muestra el diagrama de bloques de un
banco de 8 registros de 32 bits cada uno, con 2 puertos de lectura y uno de escritura,
mientras que la Tabla 6-1 contiene una descripción de la funcionalidad de cada una de
las señales del banco de registros.
87
Práctica 6: Componentes de memoria
Figura 6-1 Banco de registros de 8 registros de 32 bits cada uno, con 2 puertos
para lectura y uno de escritura. Los parámetros de diseño determinan el
número y el tipo de las señales del componente.
88
Práctica 6: Componentes de memoria
Objetivos
Los objetivos de esta práctica son:
1. Estudio práctico tanto estructural como funcional de los bancos de registros.
2. Estudio práctico de los ciclos de lectura y escritura de los bancos de registros.
3. Utilización de las técnicas de diseño jerárquico para diseñar elementos más
complejos a partir de otros más básicos ya diseñados y probados.
89
Práctica 6: Componentes de memoria
Desarrollo de la práctica
El tiempo programado para la realización de esta práctica es de 4 horas. La parte
experimental está organizada en dos partes: la primera corresponde a completar las
conexiones en una plantilla de diseño esquemático de un banco de registros con 8
registros de 32 bits con 2 puertos de lectura y uno de escritura; y la segunda parte
reutiliza el módulo resultado de la primera parte, haciendo uso de la técnica de diseño
modular y jerárquico, en una plantilla en la que también hay que completar las
conexiones para conseguir un banco de 32 registros de 32 bits con 2 puertos de
escritura y uno de escritura.
Todos los apartados incluyen la realización de simulaciones para verificar que el
diseño funciona correctamente.
Realización práctica
Para el primer diseño, el estudiante capturará una plantilla teniendo que completarla
con las conexiones entre los diferentes componentes de la plantilla. En el segundo
diseño, el estudiante aplicará lo aprendido para ampliar la altura del banco de registros
completando con las conexiones una plantilla propuesta en la que utiliza el banco de
registros resultante del primer diseño.
Banco de registros de 8 registros de 32 bits con 2 puertos de lectura y uno
de escritura
Inicia la herramienta Xilinx. Luego crea de la manera habitual un proyecto de nombre
“regs”. En este proyecto, crea para el primer diseño una hoja para el esquemático de
nombre “reg8x32” y una vez que lo finalices, crea para el segundo diseño otra hoja de
nombre “reg32x32”. El objetivo final de la primera parte de esta realización práctica
consiste en el diseño de un banco de registros de 8 registros de 32 bits como el de la
Figura 6-1. La Figura 6-3 muestra la plantilla para este primer diseño, que incluye
todos los componentes necesarios, pero no las interconexiones entre los componentes.
En la Figura 6-3 podemos distinguir 3 zonas: los registros, la lógica de
direccionamiento de lectura y la lógica de direccionamiento de escritura.
La Figura 6-4 muestra la lógica correspondiente a los 8 registros de 32 bits. Los
registros están construidos con componentes estándares de la librería. La señal CE
(clock enable) es la que permite la sincronización de la escritura.
La lógica de decodificación de las direcciones de lectura se muestra en la Figura 6-5.
Consta de dos multiplexores construidos con la herramienta “LogiBLOX Module
Generator” de Xilinx (el estudiante tiene que utilizar la herramienta y construir los
multiplexores). Cada multiplexor tiene 8 entradas de 32 bits.
La lógica de decodificación de la dirección de escritura se muestra en la Figura 6-6.
Consta de un decodificador de 3 a 8 con una señal de habilitación E conectada a la
señal WE del banco de registros. Un valor 0 en esta señal inhabilita el decodificador,
por lo que todas las salidas del decodificador estarán a 0.
90
Práctica 6: Componentes de memoria
Una vez acabado el diseño comprueba el funcionamiento del mismo. Por ejemplo,
realiza un ciclo de escritura que escriba un valor 5 en el registro $5, luego otro ciclo
de escritura que escriba un valor 6 en el registro $6, y finalmente un ciclo de sólo
lectura que lea los registros $5 y $6. La Figura 6-7 muestra el resultado de la
simulación descrita anteriormente. En esta simulación se han utilizado opciones
avanzadas para añadir los estímulos a las señales de entrada. Mientras que la señal de
reloj C tiene asignado el bit 0 del contador, la señal WE tiene asignada la tecla “w” del
teclado, por lo que cada pulsación de dicha tecla cambia el valor de la señal de 0 a 1 o
de 1 a 0 (ver la Figura 6-8). El resto de las señales de entrada utiliza la opción bus de
la ventana “Stimulator State Selection” (ver la Figura 6-9).
91
Práctica 6: Componentes de memoria
92
Práctica 6: Componentes de memoria
Figura 6-8 Ventana de selección de estímulos. Para asociar una tecla del teclado
a una señal, selecciona la señal y luego la tecla. Cada vez que pulses la tecla en
el teclado del ordenador durante la simulación el estado binario de la señal
cambiará.
Figura 6-9 Ventana del simulador para la asignación de un valor a un bus. Esta
ventana la abrimos con un click en el botón “Logical States” que está en
la barra de herramientas del simulador lógico.
93
Práctica 6: Componentes de memoria
La Figura 6-11 muestra una plantilla con los componentes (sin todas las conexiones)
para el diseño del banco de registros de 32 registros de 32 bits. Otra vez, la estructura
está organizada en 3 partes: los registros (formados por los 4 bancos de registros de 8
registros de 32 bits), la lógica de escritura y la lógica de lectura. La lógica de escritura
puede verse en la Figura 6-12. El elemento clave es el decodificador de 2 a 4 que toma
como entradas los 2 bits más altos de direccionamiento del puerto de escritura (que
son visibles en la figura). Estas dos señales determinan el módulo a escribir mientras
que los 3 bits inferiores de la señal WA se utilizarán para direccionar el registro dentro
del submódulo. El diseño muestra cómo la señal WE habilita o deshabilita las
escrituras. La lógica de lectura está compuesta por 2 multiplexores de 4 a 1 de 32 bits
realizados con la herramienta “LogiBLOX Module Generator” (el estudiante tiene que
construirlos), y encapsulados como módulos de la librería para ocupar menos espacio
en la hoja del esquema (ver la Figura 6-13).
La parte práctica consiste en completar las conexiones y construir un componente
modular que sea instanciable como un elemento más de la librería para el banco de 32
registros de 32 bits y comprobar el funcionamiento correcto del diseño. Realiza la
prueba del diseño utilizando lecturas y escrituras en registros que estén ubicados en
diferentes submódulos.
La Figura 6-14 muestra un intervalo de tiempo de la simulación (entre los 180ns y
190ns). En el cronograma apreciamos que en el primer ciclo la escritura se realiza en
el registro $18, y las lecturas en los registros $17 y $18. El valor del registro $17 es 16
durante todo el ciclo, mientras que el del registro $18 cambia de 0 a 17. En el ciclo
94
Práctica 6: Componentes de memoria
Nota: Como trabajo adicional en esta práctica se puede realizar el diseño de un banco
de registros de más de 32 registros usando los módulos anteriores, siguiendo la misma
filosofía. Por otro lado, también se puede plantear el diseño de un banco de registros
de 8 registros donde cada registro almacene 64 bits de datos, utilizando el módulo del
banco de registros de 8 registros de 32 bis cada uno como módulo básico.
95
Práctica 6: Componentes de memoria
Figura 6-13 Lógica de lectura del banco de 32 registros de 32 bits. Está diseñada
a partir de multiplexores 4 a 1 de 32 bits construidos con la herramienta
“LogiBLOX Module Generator”.
96
Figura 6-14 Simulación del banco de 32 registros de 32 bits. La señal de escritura WE está activa durante los dos ciclos
de reloj mostrados, lo que indica que los dos ciclos son de escritura. En el primer ciclo de reloj el registro $18 es escrito
y luego el registro $19 tal y como muestra la señal WA4. Los valores a escribir son 17 y 18, respectivamente. El registro
$18 cambia en el primer ciclo del valor 0 al 17. El registro $19 cambia del valor 0 a 18 durante el segundo ciclo.
97
Autocuestionario (a rellenar ANTES de la sesión de laboratorio)
1. ¿Cómo se asocia un estímulo a una señal de teclado? ¿Qué ocurre cuando
pulsamos la tecla asociada con el valor de la señal?
2. ¿Cómo se le asigna un valor constante a una señal que es un bus?
3. ¿Qué es un banco de registros?
4. ¿Qué es la herramienta “LogiBLOX Module Generator”?
5. ¿Cuáles son los parámetros de diseño de un banco de registros?
6. Calcula el número de señales de direccionamiento para un banco de 16
registros de 64 bits.
98
Errores más frecuentes
En este capítulo están descritos los errores más frecuentes, así como algunas guías para
evitarlos.
Los errores están clasificados en tres categorías: Errores generales, Errores en el editor
esquemático y Errores en el simulador. En la categoría Errores generales están los errores
que tienen que ver con el uso del gestor de proyectos. En la categoría Errores en el editor
esquemático están los errores más frecuentes cuando usamos la herramienta para la
captura de esquemas y en la categoría Errores en el simulador, los errores más habituales
cuando utilizamos la herramienta de simulación. Las situaciones descritas en las dos
últimas categorías están muchas veces interrelacionadas y deberían aparecer en algunos
casos en ambas categorías, ya que muchos errores en la simulación son consecuencia
directa de un mal uso de la herramienta de captura de esquemas, aún así aparecen en una
sola de ellas simplemente por mayor facilidad de búsqueda.
Errores generales
1. Para nombrar proyectos, macros, o subdirectorios no deben utilizarse
identificadores con más de 8 caracteres. Esto es aplicable a todos los nombres en
el camino completo, así por ejemplo, en c:\<directorio>\<nombre de proyecto> el
campo <directorio> y el campo <nombre de proyecto> tienen que tener como
máximo 8 caracteres de longitud.
2. Al copiar un proyecto a otro directorio no debe olvidarse copiar el fichero con
extensión .pdf. Es imprescindible copiar el directorio del proyecto así como el
fichero .pdf a la nueva localización. Para copiar un proyecto es preferible usar la
opción FILE->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 simulador (fichero con extensión .tve). En el caso de
persistir el error prueba a utilizar un disquete vacío.
99
Errores más frecuentes
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 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
100
Errores más frecuentes
101