Você está na página 1de 20

PRÁCTICA No.

2
INTRODUCCIÓN AL ENTORNO ISE DE XILINX

1. OBJETIVOS

1.1. Objetivo General

• Conocer el funcionamiento básico del entorno de desarrollo ISE de Xilinx.

1.2. Objetivos Específicos

• Identificar los bloques que conforman el entorno de desarrollo ISE de Xilinx y su


funcionamiento.
• Familiarizarse a través de ejemplos sencillos con los tres tipos de descripción en VHDL:
flujo de datos, comportamental y estructural.
• Realizar un ejemplo práctico haciendo uso de la tarjeta Atlys Spartan 6.

2. JUSTIFICACIÓN

La realización de esta práctica le permitirá al estudiante conocer el entorno de desarrollo ISE


de Xilinx, con sus diferentes módulos, componentes y funciones; además de aplicar los
conocimientos teóricos vistos en clase.

3. MARCO TEÓRICO

La evolución de los sistemas digitales ha hecho necesario el empleo de lenguajes de


descripción de circuitos. En efecto, cuando se pretende diseñar un sistema complejo con
miles de elementos, tratar de describirlo a través de esquemas resulta inviable.

En la actualidad existen muchos lenguajes de descripción hardware, pero uno de los más
extendidos es el VHDL (Very High Speed Hardware Description Language). Se desarrolló
con la idea de que sirviera como un lenguaje estándar de descripción de circuitos. Esto
significa que el código creado en VHDL puede ser utilizado con independencia del fabricante
o la tecnología que elijamos.

Fue en 1984 cuando el IEEE propuso su estándar. Se diseñaron varias versiones con la
colaboración de la industria y las universidades, pero fue finalmente en diciembre de 1987
cuando el IEEE publicó el estándar IEEE Std 1076 – 1987 que más adelante sería conocido
como VHDL’87.

Esta primera versión pronto mostró algunas carencias, debido fundamentalmente a la rápida
evolución de las herramientas que utilizaban VHDL. Por eso, en 1993 el IEEE, en base a las

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 1 de 20
experiencias recogidas del uso del VHDL’87 planteó un segundo estándar, el IEEE Std 1076
– 1993, más comúnmente conocido como VHDL’93.

Conviene resaltar que VHDL y otros lenguajes HDL tienen capacidad de expresar más cosas
de las que las herramientas actuales son capaces de sintetizar. Incluso existen
construcciones que tienen sentido para la verificación de un diseño o su descripción a muy
alto nivel, pero que no tienen sentido en un chip, como el acceso a ficheros en disco o los
bucles “for”. Por tanto, el hecho de que un diseño pueda simularse no significa que pueda
sintetizarse. De hecho, según se avanza en el diseño y éste se va refinando, hay que
restringirse a un subconjunto del lenguaje y a unas ciertas reglas de codificación que la
herramienta de síntesis pueda comprender. Es lo que se denomina código sintetizable.

3.1. El entorno de desarrollo

El entorno de desarrollo está compuesto por un conjunto de herramientas que nos van a
permitir:

• Capturar diseños a través de esquemáticos, diagramas de estados, en VHDL y en


Verilog.
• Capturar testbenches (código de verificación) en forma de diagramas de formas de
onda, VHDL o Verilog e incluso generarlos de forma semi – automática.
• Simular el diseño a través de los testbenches generados.
• Sintetizar (generar la netlist) a partir del diseño capturado.
• Optimizar el diseño.
• Implementar el diseño en un dispositivo programable concreto (asignando bloques del
dispositivo a los elementos de la netlist e interconectándolos entre sí) atendiendo a las
restricciones de tiempo y espacio que se puedan imponer.
• Programar el dispositivo programable elegido a través de un bus JTAG o generar el
fichero de programación necesario.

La mayor parte de las herramientas son de Xilinx y se hallan integradas en el paquete Xilinx
ISE WebPack. Sin embargo, este paquete no incluye el simulador, que debe obtenerse como
una herramienta independiente, en caso de ser necesaria su utilización.

Las dos herramientas más visibles del entorno son:

• Project Navigator: se trata de un entorno integrado de desarrollo (IDE) desde el que


es posible acceder a todas las operaciones y herramientas necesarias para realizar el
diseño.

• ModelSim: permite simular el circuito realizado en el Project Navigator y verificar si se


cumplen o no las especificaciones de diseño.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 2 de 20
3.2. Project navigator

La ventana principal por defecto del Project Navigator consta de tres sub – ventanas, dos a la
izquierda y una abajo, que rodean el área de trabajo. Es en el área de trabajo donde se
editan los ficheros de VHDL y aparece la interfaz de varias de las herramientas. Por defecto,
en el área de trabajo las ventanas se apilan en forma de cuaderno con separadores, de
forma que en cada momento sólo se ve una ventana. Pinchando el separador de la ventana
de nuestro interés, ésta pasa a primer plano. Otras herramientas, notablemente el simulador,
abren sus propias ventanas independientes.

Figura 1. Vista general del entorno del Project


En la parte superior izquierda está la ventanaNavigator.
de Fuentes del Proyecto (Sources in Project),
que muestra los elementos incluidos en el proyecto. Justo debajo de la ventana de Fuentes
se encuentra la ventana de Procesos (Processes for Current Source) para la fuente actual,
que muestra los procesos permitidos. La tercera ventana es la consola y ocupa la parte
inferior de la pantalla, visualiza los resultados de las operaciones que vamos realizando
como los errores de compilación o los resultados del proceso de síntesis.

3.2.1. Sources in Project

Se compone a su vez de tres pestañas que ofrecen diversa información al usuario:

• Module View: Muestra el nombre del proyecto, el tipo de dispositivo sobre el que se
va a trabajar, así como todos los elementos del proyecto (archivos VHDL,
esquemáticos, diagramas de estados, bancos de pruebas, etc.). Si un elemento en

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 3 de 20
cuestión posee niveles inferiores de jerarquía se verá que a la izquierda del nombre
aparece un +, si se hace clic sobre él podremos visualizar los niveles de jerarquía.
Para editar un archivo simplemente hay que hacer doble clic sobre el nombre del
mismo.

• Snapshot view: Muestra todos los snapshots. Un snapshot es una copia de solo
lectura del proyecto actual. Se usan para guardar el proyecto antes de emprender
nuevas modificaciones con el fin de recuperarlo si los cambios no dan el resultado
adecuado, o bien, para tener diferentes versiones del proyecto.

• Library view: Muestra todas las librerías asociadas al proyecto.

3.2.2. Processes for current source

Contiene la pestaña de la vista de procesos. Desde aquí se pueden lanzar las acciones
posibles para cada tipo de fuente del proyecto y también comprobar el estado de las ya
realizadas. En general cada acción de la lista requiere la ejecución de las que la preceden,
no obstante, si fuese necesario, el programa lanzaría de forma automática las acciones
previas pertinentes.

Para los ficheros que forman parte de la jerarquía del diseño las acciones posibles son:

• Desing Entry Utilities: nos sirve de comienzo para verificar y simular nuestro diseño.

• User Constraints: nos permite editar las restricciones temporales y de área.

• Synthesis: una vez que los archivos del diseño han sido creados podemos sintetizar
el diseño. Al hacerlo se revisará la sintaxis y la jerarquía del diseño con el fin de
optimizarlo para la arquitectura de diseño que hemos escogido.

• Implement Design: nos permite convertir nuestro diseño lógico a un formato físico
que puede ser implementado en el dispositivo sobre el que vamos a trabajar ya sea
una CPLD o una FPGA.

• Generate Programming File: permite generar el código binario que se cargará en el


dispositivo.

Para los ficheros de test (testbenches) aparecen las opciones de simulación:

• Simulate Behavioral Model: Permite simular el código sin tener que sintetizarlo
antes. Por tanto, no incluye retardos. Útil para verificar el comportamiento lógico
(funcional) del diseño.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 4 de 20
• Simulate Post: Simula el diseño después de completar una determinada fase de
síntesis. Al conocer los bloques implicados y su interconexión ya es posible hacer una
estimación precisa de los retardos.

3.2.3. Consola

La consola nos muestra mensajes de información, avisos y errores. Los avisos se resaltan
con una caja amarilla junto al mensaje, mientras que los errores se indican con una caja roja.
En cualquiera de los dos casos si queremos ir a la parte del código en la que se ha producido
el aviso o el error bastará con seleccionar el mensaje y hacer doble clic sobre él.

3.3. Creación de un nuevo proyecto

A la hora de crear un nuevo proyecto se debe elegir el modo de representación para el nivel
más alto de la jerarquía del diseño: esquemático o HDL. A continuación, se detallan los
pasos a seguir en cada caso:

Utilizando esquemáticos

• Seleccionar New Proyect en el menú File.

• Aparecerá la ventana New Proyect, en Proyect Location indicamos la ubicación del


directorio en el que se guardarán los archivos del proyecto, en Proyect Name
escribimos el nombre del proyecto y en Top Level Module – Type debemos
seleccionar Schematic. Finalmente pulsamos Siguiente.

• En la siguiente ventana podemos definir el dispositivo sobre el que vamos a


implementar el diseño.

• Al pulsar siguiente nos aparece un diálogo que nos pregunta si queremos añadir una
fuente nueva al proyecto o bien una ya existente. Seleccionamos Add New Source.

• Nos aparecerá un diálogo que nos muestra una lista de los diversos tipos de fuente
con los que se puede trabajar. Seleccionamos Schematic. Escribimos el nombre del
diseño en File Name y hacemos click en Siguiente.

• Para concluir presionamos Finalizar.

Automáticamente se abrirá el editor de esquemáticos, Xilinx ECS (Engineering Schematic


Capture).

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 5 de 20
Utilizando código VHDL

• Seleccionar New Proyect en el menú File.

Figura 2. Ventana de creación de un nuevo proyecto.

• Aparecerá la ventana New Proyect, en Proyect Location indicamos la ubicación del


directorio en el que se guardarán los archivos del proyecto, en Proyect Name
escribimos el nombre del proyecto y en Top Level Module – Type debemos
seleccionar HDL. Finalmente pulsamos Siguiente.

• En la siguiente ventana podemos definir el dispositivo sobre el que vamos a


implementar el diseño.

• Al pulsar siguiente nos aparece un diálogo que nos pregunta si queremos añadir una
fuente nueva al proyecto o bien una ya existente. Seleccionamos Add New Source.

• Nos aparecerá un diálogo que nos muestra una lista de los diversos tipos de fuente
con los que se puede trabajar. Seleccionamos VHDL Module. Escribimos el nombre
del diseño en File Name y hacemos click en Siguiente.

• La siguiente ventana nos permite definir las entradas y salidas que tendrá nuestro
módulo, así como el número de bits de que constarán. En Port Name se escribe el
nombre de la entrada o salida, en Direction indicamos si va a ser una entrada, una
salida o una entrada – salida, y finalmente en MSB y LSB indicamos el número de bits.
Una vez definidas todas las entradas/salidas pulsamos Siguiente.

• Para terminar, pulsamos Finalizar.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 6 de 20
Figura 3. Definición de las entradas y salidas que tendrá el módulo.
Al hacerlo se generará automáticamente el código básico en VHDL para definir las entradas
y salidas que tendrá nuestro diseño y que hemos indicado en el paso 6. En este caso vamos
a crear una sencilla puerta “and”. Debido a su sencillez la única línea que es necesario añadir
al código VHDL pre – generado es “S<=A and B”; como se puede apreciar en la siguiente
figura.

Figura 4. Definición de una puerta “and” en VHDL.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 7 de 20
3.4. Uso del editor de esquemáticos

Cuando se abre el editor de esquemáticos veremos una ventana principal en blanco que es
donde podremos dibujar el esquemático. A su izquierda hay dos pestañas llamadas Options
y Symbols.

En Options aparecen varias opciones que nos ofrecen la posibilidad de indicar como
queremos que se comporte la interfaz del programa al usar una herramienta en concreto que
hayamos seleccionado, es decir la pestaña Options cambia dependiendo de la herramienta
seleccionada.

En Symbols hay varios campos:

• Categories: nos permite elegir el tipo de componentes que queremos que aparezcan
en el siguiente campo (symbols) si seleccionamos all symbols en symbols aparecerán
todos los componentes.

• Symbols: aquí elegimos los componentes que deseamos introducir en nuestro


esquemático.

• Symbol Name Filter: en symbols sólo aparecerán los componentes que empiecen por
las letras que aquí escribamos, así, por ejemplo, si tenemos seleccionado all symbols
en Categories y en Symbol Name Filter escribimos en Symbols sólo aparecerán las
puertas and.

• Orientation: se usa para rotar el componente que vamos a colocar en la ventana


principal.

Una vez seleccionado el componente solo resta llevar el cursor al lugar de la ventana
principal donde queremos colocarlo y hacer click.

Para unir los componentes entre sí deberemos usar la herramienta wire, esto se puede
seleccionando Add->Wire en el menú principal. Una vez colocados los componentes y
conectados correctamente entre sí, es imprescindible definir bien las entradas y salidas del
esquema, esto se hace mediante la herramienta marcador de entrada/salida (I/O Marker) que
se encuentra en el menú Add. Para definir el marcador debemos unirlo mediante una línea
(Wire) al componente en cuestión y hacer doble click sobre el marcador; nos aparecerá una
ventana en la que podremos definir la entrada – salida escribiendo el nombre en la celda
Name – Value y el tipo de puerto (entrada, salida o bidireccional) en PortPolarity – Value.

Si queremos dar nombres a los cables, para facilitar su identificación, hay que seleccionar
Add->Net_Name en el menú principal. Para dar nombre al cable debemos escribirlo en la edit

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 8 de 20
box que aparece en la pestaña Options y seguidamente hacer click sube el cable en
cuestión.

Figura 5. Ventana principal del editor de esquemáticos.


Terminado el diseño, el siguiente paso es revisarlo para asegurarse de que todas las
conexiones están bien hechas. Esto se puede hacer fácilmente seleccionando en el menú
principal Tools->Check_Schematic. Aparecerá una ventana que nos indicará si hay algún
error en el circuito. Si todo está correctamente, el último paso es guardar el diseño y volver al
Project Navigator.

3.5. Verificación de la sintaxis y simulación

Para verificar la sintaxis debemos ir a la ventana Processes for Source y hacer doble click en
el icono Synthetisize – XTS, automáticamente se revisará la sintaxis y aparecerá una marca
verde junto al icono si no han aparecido errores o warnings; si hay algún warning aparecerá
una exclamación amarilla y si por contra hay errores veremos una "x" roja. De todos modos,
una forma más rápida y sencilla de ver si hemos cometido algún error en la sintaxis es hacer
doble click en Create Schematic Symbol el cual se encuentra en Design Entry Utilities. Una
vez que la sintaxis es correcta podemos pasar a la simulación.

Tanto si hemos diseñado un circuito programando directamente en VHDL o utilizando


esquemáticos, la simulación resulta un paso imprescindible para saber si los resultados son
los esperados o por el contrario debemos revisar el diseño.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 9 de 20
Para simular lo más cómodo es comenzar creando un banco de pruebas donde
introduciremos los valores que se les aplicarán a las entradas y en función de los cuales se
obtendrá la salida.

Figura 6. Verificación de sintaxis.


Los pasos a seguir son:

• Hacer click con el botón derecho en la pestaña Module View en Sources in Proyect y
seleccionar New Source.
• En la ventana New Source escogemos Test Bench Waveform, damos nombre al
archivo y pulsamos Siguiente.
• Seleccionamos el archivo sobre el que queremos realizar la simulación. Para terminar,
hacemos click en Siguiente y Finalizar.

En la ventana Initialize Timing hay que especificar los parámetros de tiempos que se usarán
en la simulación. Si el diseño que vamos a simular es secuencial, y en consecuencia usa una
señal de reloj, deberemos seleccionar Single Clock y fijar sus condiciones de funcionamiento.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 10 de 20
Figura 7. Generación del testbench.
Al hacer click en Ok nos aparecerá el banco de pruebas donde podremos ver que las
entradas tienen marcas azules y las salidas marcas amarillas y todas están inicializadas a 0.
Ahora debemos definir los valores de las entradas y salidas para poder probar el diseño, para
ello si hacemos click en la zona coloreada de cada celda (azul para las entradas, amarillo
para las salidas) podremos cambiar el valor. En el caso de que la entrada o salida sea un
vector veremos que al hacer click nos aparece un botón en el que pone pattern (en el caso
de que la entrada o salida sea de un bit deberemos hacer doble clic para que salga el botón
pattern) y una caja donde escribir un valor; el botón pattern sirve para definir un patrón en
esa entrada, de forma que, por ejemplo, podríamos hacer que se asignaran valores a partir
de uno dado y se fueran incrementando en uno en cada ciclo de tiempo; por contra si sólo
queremos dar un valor a esa celda escribiremos el número y presionaremos enter.

Cuando hayamos terminado de definir los valores de las entradas y salidas deberemos
guardar el diseño haciendo click en el icono del diskete en la ventana del banco de pruebas.
Al hacer esto veremos que en la ventana Sources in Project se nos añade un nuevo archivo,
si lo seleccionamos aparecerán en Processes for Source los procesos o funciones para ese
archivo que como veremos están todos relacionados con la simulación. Si hacemos doble
click sobre Simulate Behavioral Model se abrirá el Model Sim y se procederá a la simulación.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 11 de 20
Figura 8. Simulación con ModelSim XE de una puerta “and”.
La ventana principal nos da información de los eventos que ocurren en la simulación y nos
informará al final si la simulación ha sido correcta siempre y cuando así lo definamos en el
código VHDL para la simulación.

En la ventana wave podremos ver como varían las entradas y salidas del sistema en el
tiempo. En el caso de que simulemos un diseño sin utilizar ningún banco de pruebas la
ventana signals nos será útil para dar valores a las señales.

3.6. Flujo de diseño para lógica programable

A continuación, se describirán cada una de las etapas o fases que conformar el flujo de
diseño para la lógica programable; en la figura 9 se ve una representación gráfica del
proceso.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 12 de 20
Figura 9. Flujo de diseño para lógica programable.
• Entrada del diseño: Corresponde a la descripción del sistema a implementar ya sea
con lenguaje de alto nivel (VHDL), en forma esquemática, o ambos. Esto se almacena
en un archivo con extensión .vhd que sirve de entrada a la siguiente etapa.

• Síntesis: Esta herramienta permite realizar una revisión de sintaxis del código fuente
.vhd de nuestro proyecto y genera un reporte de advertencias y errores en caso de
existir.

• Banco de prueba: Para poder simular el circuito primero se crea un banco de pruebas
(testbench waveform) donde se definen los estímulos de entrada, en función de los
cuales se obtendrá la salida que deberá coincidir con el valor esperado de acuerdo a
la funcionalidad del circuito. Estos estímulos incluyen señales de reloj, contadores
(ascendentes y descendentes), etc.

• Simulación funcional: Consiste en realizar una simulación puramente lógica del


sistema que se pretende realizar, para lo cual se emplea el banco de pruebas definido
previamente. Esta simulación no toma en cuenta retardos propios de los componentes
con los que se implementará físicamente el sistema, por lo que es una simulación
ideal.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 13 de 20
• Archivo de restricciones: Este archivo consta de las especificaciones de las
terminales del FPGA, el tipo de señal que se va a emplear, voltajes y la señalización
que se realizará al momento de descargar el archivo a la tarjeta de desarrollo.

• Implementación: Después de haber creado la fuente del diseño lógico en el primer


paso del diagrama de flujo, el proceso de implementación convierte este diseño (con
todas las fuentes existentes en forma jerárquica) en un archivo de formato físico que
puede ser programado en el dispositivo. Cabe mencionar que los detalles de
implementación de un diseño CPLD difieren de aquellos pertenecientes a un FPGA.
En la implementación se llevan a cabo las siguientes tareas:

o Traducción: Combina todas las listas de entrada y restricciones de diseño en


una base de datos genérica y nativa de Xilinx (archivo .NGD), la cual describe
el diseño lógico ya reducido mediante primitivas lógicas.
o Mapeo: Convierte la definición lógica realizada por un archivo .NGD a
elementos FPGA, tales como CLBs e IOBs, etc. La salida es un archivo de
descripción nativa del circuito (.NCD), que representa físicamente el diseño de
los componentes como elementos FPGA.
o Colocación y enrutado: A partir del archivo .NCD, se determina cuáles serán y
cómo se interconectarán los componentes del dispositivo FPGA que se
utilizarán para implementar el diseño, y se produce un nuevo archivo .NCD.

• Simulación temporizada: Esta simulación se realiza tomando en cuenta los retardos


propios de los componentes y las rutas de interconexión generados en la etapa previa,
con la finalidad de determinar si la operación de la entidad es correcta en términos de
tiempo y desempeño.

• Programación: Este proceso, genera un archivo de programación .bit que permite


descargar la información del diseño, generada en la etapa de implementación, en el
dispositivo FPGA, para lo cual debe cumplirse con los procesos anteriores.
Comprende los siguientes procesos:

o Generar archivo PROM, ACE o JTAG: Genera el archivo ejecutable ya sea de


tipo PROM, ACE o JTAG, el cual se desea implementar, una vez creado este
archivo generalmente de tipo BIT o ISC, se puede generar un reporte
mostrando las características del mismo.
o Comunicación y descarga a la tarjeta: Se realiza la descarga del programa
ejecutable hacia la tarjeta de práctica, o cualquier dispositivo reconocido por la
herramienta ISE mediante la opción “iMPACT”, la cual enlazará y determinará
las conexiones lógicas de la tarjeta previamente determinadas en el archivo de
restricción.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 14 de 20
Figura 10. Localización de las herramientas dentro del cuadro processes.
4. TRABAJO PREVIO

a. Consultar documentos que detallen el uso del entorno de desarrollo ISE de Xilinx, según la
versión con la que se va a trabajar y según los requerimientos en el desarrollo de la
práctica en aspectos como: asignación de pines y simulación temporal, por mencionar solo
algunos.

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 15 de 20
5. DESARROLLO DE LA PRÁCTICA

CIRCUITOS LÓGICOS COMBINATORIOS


Ejemplo 1: Convertidor de código binario a Gray
Antecedentes: El Código Gray es un caso particular del sistema
binario. Consiste en una ordenación de 2𝑛 números binarios de tal
forma que cada número sólo tenga un dígito binario distinto a su
predecesor. Esta técnica de codificación se originó cuando los
circuitos lógicos digitales se realizaban con válvulas de vacío y
dispositivos electromecánicos. Los contadores necesitaban
potencias muy elevadas a la entrada y generaban picos de ruido
cuando varios bits cambiaban simultáneamente. El uso de código
Gray garantizó que en cualquier transición variaría tan sólo un bit.
En la actualidad, el código Gray se sigue empleando para el diseño
de cualquier circuito electrónico combinatorio, ya que el principio de
diseño de buscar transiciones más simples y rápidas entre estados
sigue vigente, a pesar de que los problemas de ruido y potencia se
hayan reducido.

Es posible realizar esta conversión mediante una operación lógica


XOR entre el número binario a convertir y el mismo número con un
desplazamiento lógico a la derecha.

Desarrollo: Mediante la tabla de verdad anterior, realizar el código VHDL correspondiente


que cumpla con los requerimientos de la misma, emplear el enunciado “with – select – when”
empleando vectores de entrada y de salida para los datos.
Descripción en VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity convertidor is
Port ( b : in STD_LOGIC_VECTOR (3 downto 0);
g : out STD_LOGIC_VECTOR (3 downto 0));
end convertidor;

architecture Arq_convertidor of convertidor is

begin

with b select

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 16 de 20
g <= "0000" when "0000",
"0001" when "0001",
"0011" when "0010",
"0010" when "0011",
"0110" when "0100",
"0111" when "0101",
"0101" when "0110",
"0100" when "0111",
"1100" when "1000",
"1101" when "1001",
"1111" when "1010",
"1110" when "1011",
"1010" when "1100",
"1011" when "1101",
"1001" when "1110",
"1000" when "1111",
"0000" when others;

end Arq_convertidor;

Nota: Una vez verificado el código, realizar el flujo de diseño para lógica programable que se presentó al inicio
de este documento.
Ejemplo 2: Comparador de magnitud
Antecedentes: Los circuitos comparadores son sistemas combinatorios que comparan la
magnitud de dos números binarios de 𝑛 bits e indican cuál de ellos es mayor, menor o si
existe igualdad entre ellos. Dependiendo del número de bits a comparar, será la relación del
comparador. Existen comparadores de 4 bits y de 8 bits. Además de las correspondientes
entradas de datos, disponen de tres entradas más que pueden informar sobre una situación
anterior, y que se usan para conectar en cascada distintos comparadores, de manera que
pueda construirse uno de mayor capacidad.

Desarrollo: Mediante la tabla de verdad, realizar el código VHDL correspondiente que


cumpla con los requerimientos de la misma, emplear el enunciado “if – then – elsif – then”
empleando vectores de entrada y de salida para los datos.
Descripción en VDHL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 17 de 20
entity comparador is

Port ( A,B : in STD_LOGIC_VECTOR (3 downto 0);


Z : out STD_LOGIC_VECTOR (2 downto 0));

end comparador;

architecture Arq_comparador of comparador is

begin

process (A,B)
begin
if (A = B) then
Z <= "001";
elsif (A < B) then
Z <= "100";
else
Z <= "010";
end if;
end process;

end Arq_comparador;

Nota: Una vez verificado el código, realizar el flujo de diseño para lógica programable que se presentó al inicio
de este documento.
Ejemplo 3: Multiplicador de magnitud
Antecedentes: Es un circuito digital capaz de multiplicar dos palabras de 𝑚 y 𝑛 bits para
obtener un resultado de 𝑛 + 𝑚 bits. A veces el tamaño del resultado está limitado al mismo
tamaño que las entradas. Los hay de dos tipos:

• Multiplicador paralelo. Es el más rápido y está formado por una matriz de lógica
combinatoria que, a partir de todas las combinaciones posibles de las entradas,
genera sus productos a la salida.
• Suma y desplazamiento. Está formado por un sumador y un registro de
desplazamiento. El sumador comienza con el valor del multiplicando y lo va
desplazando y le vuelve a sumar el multiplicando cada vez que el bit correspondiente
del multiplicador vale 1. El tiempo en realizar esta operación es igual al número de bits
por el periodo de la señal de reloj.

Desarrollo: Realizar un multiplicador de magnitud para dos señales de 4 bits mediante


operadores aritméticos.
Descripción en VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity multiplicador is

Port ( A,B : in STD_LOGIC_VECTOR (3 downto 0);


P : out STD_LOGIC_VECTOR (7 downto 0));
end multiplicador;

architecture Arq_multiplicador of multiplicador is

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 18 de 20
begin

P <= A * B;

end Arq_multiplicador;

Nota: Una vez verificado el código, realizar el flujo de diseño para lógica programable que se presentó al inicio
de este documento.
Restricciones del usuario para los ejemplos 1, 2 y 3

# Terminales para el comparador de magnitud


NET "Z<0>" LOC = "U18";
# Terminales para el convertidor de código
NET "Z<1>" LOC = "M14";
NET "g<0>" LOC = "U18";
NET "Z<2>" LOC = "N14";
NET "g<1>" LOC = "M14";
NET "A<0>" LOC = "A10";
NET "g<2>" LOC = "N14";
NET "A<1>" LOC = "D14";
NET "g<3>" LOC = "L14";
NET "A<2>" LOC = "C14";
NET "b<0>" LOC = "A10";
NET "A<3>" LOC = "P15";
NET "b<1>" LOC = "D14";
NET "B<0>" LOC = "P12";
NET "b<2>" LOC = "C14";
NET "B<1>" LOC = "R5";
NET "b<3>" LOC = "P15";
NET "B<2>" LOC = "T5";
NET "B<3>" LOC = "E4";
# Terminales para el multiplicador de magnitud
NET "P<0>" LOC = "U18";
NET "P<1>" LOC = "M14";
NET "P<2>" LOC = "N14";
NET "P<3>" LOC = "L14";
NET "P<4>" LOC = "M13";
NET "P<5>" LOC = "D4";
NET "P<6>" LOC = "P16";
NET "P<7>" LOC = "N12";
NET "A<0>" LOC = "A10";
NET "A<1>" LOC = "D14";
NET "A<2>" LOC = "C14";
NET "A<3>" LOC = "P15";
NET "B<0>" LOC = "P12";
NET "B<1>" LOC = "R5";
NET "B<2>" LOC = "T5";
NET "B<3>" LOC = "E4”;

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 19 de 20
6. EVALUACIÓN

a. Realizar la descripción en VHDL del convertidor de código de Binario a Gray mediante el


algoritmo de conversión mencionado.

b. Realizar un comparador de magnitud para dos vectores de 4 bits mediante operadores


lógicos.

c. Realizar el ejercicio del ejemplo 3 modificando los vectores de entrada a 17 bits y


cambiando las propiedades del proceso Synthesize – XST, en HDL Options – Use DSP
Block. Con el objetivo de medir tiempos de retardo de propagación en la simulación
temporizada para cada estilo (empleando bloque multiplicador o celdas lógicas).

Nota 1: La realización de estos ejercicios de evaluación pueden requerir de conceptos previos impartidos en el
curso de “Diseño Digital”.

Nota 2: Presentar un informe con los resultados de la práctica.

7. BIBLIOGRAFÍA

Atlys Spartan-6 FPGA Development Board - Lógica Programable. (n.d.). Retrieved March 6,
2018, from https://sites.google.com/site/logicaprogramable/calculadoras/fpga/digilent---
atlys-spartan-6-fpga-development-board
Castedo, L. (n.d.). Prácticas De Microelectrónica. Madrid: Universidad Politécnica De Madrid.
Retrieved from
http://www.elai.upm.es/webantigua/spain/Asignaturas/uElectronica/archivos/pue.pdf
Domínguez Gómez, M. Á. (2011). Introducción Al Software ISE (Integrated Software
Environment) De Xilinx. España: Universidad De Vigo. Retrieved from
http://mdgomez.webs.uvigo.es/SED/Guia_Inicio_ISE.pdf
Rangel Magdaleno, J. de J., & Romero Troncoso, R. de J. (2006). Manual De Prácticas -
Electrónica Digital II. México: Universidad De Guanajuato. Retrieved from
http://www.hspdigital.org/Documentos/HSP/EDII/LabED-II.pdf
Reyes Barranca, M. A., Arellano Cárdenas, O., & Flores Nava, L. M. (2014). Electrónica
Digital - Prácticas De Laboratorio. Madrid: Universidad Politécnica De Madrid. Retrieved
from http://www.vlsilab.cinvestav.mx/files/Practicas_Spartan_6.pdf

Microelectrónica – Lab02, Introducción Al Entorno ISE de Xilinx


(© Ángelo Joseph Soto Vergel)

Página 20 de 20

Você também pode gostar