Está en la página 1de 12

GUÍA DE TRABAJO PRÁCTICO - Código FGL 029

EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

1. IDENTIFICACIÓN DE LA GUÍA

Metodología de diseño e implementación de


Nombre de la guía:
circuitos digitales sobre FPGA
Código de la guía (No.): G1EDL
Taller(es) o Laboratorio(s) aplicable(s): Microelectrónica y Nanotecnología
Tiempo de trabajo práctico estimado: 4 horas
Asignatura(s) aplicable(s): Electrónica Digital y Laboratorio
Tecnología en Automatización Electrónica 
Programa(s) Académico(s) / Facultad(es): Tecnología en Gestión de Redes de Teleco-
municaciones

COMPETENCIAS CONTENIDO TEMÁTICO INDICADOR DE LOGRO


Diseña y analiza circuitos ló-
gicos combinacionales y se-
cuenciales para la resolución
Implementación en HDL
de problemas que involucran
Uso de software para simular e im- (Hardware Description
circuitos electrónicos digita-
plementar sobre FPGA circuitos di- Language), simulación y
les, empleando metodologías
gitales. síntesis de circuito digital
de diseño digital con la ayuda
combinacional básico.
de herramientas computacio-
nales de desarrollo y simula-
ción.

2. FUNDAMENTO TEÓRICO
La implementación de un sistema digital sobre una FPGA (Field Programmable Gate Array)
debe realizarse a través de una metodología de diseño que, de acuerdo a lo sugerido por la
compañía Xilinx [1], consiste de las siguientes fases:

1. Selección del dispositivo y la tarjeta.

2. Creación del diseño.

3. Implementación.

4. Cierre del diseño.

Selección del dispositivo y la tarjeta


Esta fase es crucial para obtener el mejor desempeño posible, tanto en consumo de potencia,
disipación de calor o temporización. La adecuada asignación de pines a las señales de entra-
da/salida y la selección del dispositivo son apenas dos consideraciones cruciales a la hora de
perseguir el mejor diseño.
Durante este curso no será necesario llevar a cabo esta fase del proceso, ya que el dispositivo
con el que haremos todas las prácticas es el Artix-7, y la tarjeta puede ser la Nexy 4 [2] o la
Nexys A7 [3], que son con las que se cuenta en el Laboratorio.

Página 1 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

Creación del diseño


El objetivo durante este curso es que el diseño logre la funcionalidad deseada. Los demás
requisitos de un buen diseño, como alta velocidad, gran conabilidad, bajo consumo de potencia
y bajo costo, no serán perseguidos en este curso. Sin embargo, para desarrollos profesionales
una mala decisión en la selección del dispositivo puede llevar al traste el proyecto.
Esta fase incluye:

Denir la jerarquía del sistema.

Identicar IP existentes que sean de utilidad.

Crear los componentes RTL (Register Transfer Language).

Establecer las restricciones físicas, de potencia y de tiempo.

Especicar restricciones adicionales, atributos y demás elementos usados en las fases de


síntesis e implementación.

Denir la jerarquía del sistema


La partición lógica del diseño es el primer paso a la hora de denir la jerarquía del sistema.
Se deben identicar partes del diseño, bloques, que cumplan funciones especícas bien denidas,
y de esta forma el diseñador puede aislar una pieza de código que puede reutilizarse. Durante
este curso, debido a que es un curso básico, esta pieza de código siempre la implementaremos.
Para proyectos más avanzados se pueden utilizar IP (Intellectual Property) [4] disponibles y
optimizados.
Sin embargo, no solo la funcionalidad debe tenerse en cuenta para denir la jerarquía del
sistema. También es necesario considerar requisitos de temporización, potencia, térmicos, de-
puración, etc. Como se dijo más arriba, por ser este un curso básico, solo las consideraciones
funcionales se tendrán en cuenta para denir la jerarquía del sistema.
Algunas consideraciones a tener en cuenta al momento de denir la jerarquía del sistema
son:

Los componentes con los puertos de entrada salida deben estar en el nivel superior de la
jerarquía. Esto mejora la legibilidad del diseño.

Las señales de reloj del sistema también deben estar en el nivel superior de la jerarquía.
De esta forma se facilita compartir estas señales entre módulos optimizando los recursos,
el desempeño y la disipación de potencia.

Usar registros de almacenamiento para las señales de entrada y salida de los módulos. De
esta forma es posible mantener las rutas críticas dentro de un límite lógico, lo que ayuda
a mantener la trazabilidad a la hora de depurar el código.

Señales que estén relacionadas deben mantenerse dentro del mismo nivel jerárquico, ya
que permite que sean probadas y modicadas con cierta facilidad, lo que mejora el proceso
de depuración.

En lugar de que los atributos se apliquen a nivel de señal, el diseñador debe aplicarlos a
nivel de módulo. De esta forma el código se mantiene más ordenado y escalable, ya que
el atributo se puede propagar a través de todas las señales dentro de la misma jerarquía.

Página 2 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

Identicar IP existentes que sean de utilidad


Un núcleo IP es un bloque lógico o de datos que se utiliza para implementar un circuitos
de aplicación especíca  ASIC (Application Specic Integrated Circuit) dentro de una FPGA.
Utilizar los núcleos IP previamente validados reduce signicativamente el esfuerzo durante la
etapa de diseño, asegurando la funcionalidad y disminuyendo el tiempo de desarrollo. Esta
planicación es de las etapas más importantes durante el desarrollo de nuevos proyectos de alta
complejidad. Pero nuevamente, como en nuestro caso los proyectos son bastante simples, esta
etapa no la desarrollaremos en este curso.

Crear los componentes usando HDL


Nuestro principal esfuerzo se centrará en la fase de creación de los componentes utilizando
un HDL. De esta forma se implementa la funcionalidad de los bloques y la lógica que funciona
como pegamento entre diferentes bloques. Vivado cuenta con un conjunto de plantillas que
facilita el desarrollo de estos módulos, pero el diseñador también puede desarrollar el módulo
completamente desde cero.
En esta parte del diseño deben considerarse las señales de control (set/reset, relojes, habi-
litadores de reloj, etc.) y su conveniencia de uso de acuerdo al impacto que puedan tener en
cuanto al desempeño, la disipación de potencia y el consumo de recursos. Se sugiere tener en
cuenta lo siguiente:

Vericar si un reset global es realmente necesario.

Evitar señales de control asíncronas.

Las señales de reloj, el habilitador de reloj y el reset deben mantener consistencia en


cuanto a su polaridad.

No utilizar señales de set y reset dentro del mismo registro.

Si es absolutamente necesario un reset asíncrono, debe sincronizarse el momento en el que


pasa a ser lógicamente falso.

En este punto el diseñador pasa a la etapa en la cual debe comprender cómo su diseño
se mapeo sobre los recursos de la FPGA, y de esta manera adelantarse a futuros problemas
o contar con mayor información a la hora de tomar ciertas decisiones. Esta fase es de nivel
avanzado y no la realizaremos durante este curso.

Establecer las restricciones físicas, de potencia y de tiempo


La denición de las restricciones es el último paso en el proceso de diseño, y tiene como
objetivo hacer cumplir los requerimientos con el n de que el ujo de compilación se lleve a
cabo ordenadamente y el diseño pueda ser funcional en hardware.
Denir apropiadamente las restricciones es esencial, ya que para un sistema sobrerestringido
o subrestringido se hace difícil hacer cumplir las restricciones temporales.
Dependiendo de la complejidad del sistema es posible que se requieran uno o varios archivos
de restricciones, por ejemplo, uno para restricciones físicas, otro para restricciones temporales,
uno por cada módulo funcional/IP de mediana o alta complejidad, etc.

Página 3 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

Especicar restricciones adicionales


El proceso de síntesis se encarga de mapear la descripción del diseño sobre los recursos del
dispositivo empleando algoritmos controlados por tiempo. El código HDL y las restricciones
establecidas afectan los resultados obtenidos. El modelo de retardo del circuito aquí obtenido es
aproximado y no considera restricciones de ubicación ni efectos complejos como la congestión.
Lo que se obtiene es una lista de conexiones que cumple mínimamente con las restricciones de
tiempo o incluso puede fallar por poco. Durante este curso no estableceremos restricciones de
síntesis.
Por otra parte, las restricciones de implementación, como la asignación de los pines de I/O
a los puertos denidos en la descripción del sistema digital, deben reejar con precisión los
requisitos de la aplicación nal. Esta es la única denición de restricciones que haremos durante
este curso. Sin embargo, a los puertos de I/O adicionalmente se les pueden especicar retardos
con el n de sincronizar los paths del circuito externo con las interfaces de la FPGA. La base
para denir estos retardos es el reloj generado en la tarjeta del sistema, esto es, fuera de la
FPGA.

Implementación
La implementación es el siguiente paso luego de la selección del dispositivo, la conguración
de los IPs, la especicación del sistema y la denición de las restricciones. Implementar consiste
en compilar el diseño a través de la síntesis, y ubicar dentro del dispositivo los recursos a usar
y enrutar los paths de datos para luego generar el archivo con el que se programará la FPGA.
Este proceso puede ser iterativo.

Sintetizando
Durante el proceso de síntesis Vivado toma la descripción y las restricciones temporales del
sistema y genera un netlist optimizado que es funcionalmente equivalente a la descripción HDL.
Esto signica que a partir de cualquier descripción HDL Vivado puede crear la lógica necesaria
que lo implemente. Por supuesto, se requieren restricciones temporales realistas.
Hay dos formas en las cuales Vivado corre la síntesis: globalmente o fuera de contexto. En
este curso siempre sintetizaremos el diseño completo, síntesis global, lo que permite maximizar la
optimización y facilitar el análisis. En la síntesis fuera de contexto ciertos niveles de la jerarquía
estructural del sistema se sintetizan en forma separada lo que reduce el tiempo de compilación
y asegura la estabilidad cuando se realizan cambios en el diseño.

Implementando el diseño
La implementación incluye todos los pasos necesarios para ubicar y enrutar el netlist den-
tro de los recursos del dispositivo, mientras se cumplen las restricciones lógicas, físicas y de
tiempo. Este proceso puede ser incremental con el n de reutilizar ubicaciones de recursos y
enrutamientos existentes.
La optimización lógica consiste en remover celdas sin carga, la propagación de las entradas
constantes y la optimización de la potencia de los bloques de memoria RAM. Así mismo, vuelve
a mapear con el n de disminuir la profundidad del path de datos combinando LUTs (Look Up
Table) en serie.
El motor de ubicación de Vivado posiciona las celdas del netlist en lugares especícos del
dispositivo y analiza los tiempos de holgura negativos (retardo en las señales mayores a un ciclo
de reloj) con el n de corregir restricciones o volver a enrutar la implementación. Opcional-
mente es posible corregir los paths con tiempo de holgura negativo realizando un proceso de
optimización física.

Página 4 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

La etapa nal de la implementación es el enrutamiento, en este el motor de enrutamiento de


Vivado realiza el enrutamiento entre los elementos previamente ubicados y optimiza las rutas
del diseño con el n de garantizar que los tiempos entre ancos de reloj permitan realizar todas
las tareas necesarias en el sistema.

Cierre del diseño


Esta etapa consiste en el cumplimiento de todos los requisitos de temporización, desempeño y
potencia, así como la validación de su funcionalidad en hardware. El cierre del diseño usualmente
toma varias iteraciones entre análisis de resultados, modicación del diseño y modicación de
las restricciones. Esta fase es vista como una optimización entre temporización y potencia, y
ambas deben hacerse en forma simultánea.
En resumen, la metodología a seguir durante las prácticas de laboratorio se puede ver en la
Figura 1, y a continuación la pondremos en práctica con un ejemplo.

/ŶŝĐŝŽ

ŝǀŝĚŝƌĞŶ

ŝƐĞŹĂƌ ĐŽŵƉŽŶĞ ŶƚĞƐLJ

ũĞƌĄƌƋƵŝĐĂŵĞŶƚĞ ĚĞƐĂĐŽƉůĂƌůŽƐ

/ŵƉůĞŵĞŶƚĂƌ
ĞƐĐƌŝďŝƌ
ĨƵŶĐŝŽŶĂůŝĚĂĚĐŽŶ
ĐŽŵƉŽŶĞŶƚĞƐ
s,>ŽsĞƌŝůŽŐ
ĐŽŶ,>

EŽ /ŶƐƚĂŶĐŝĂƌƚŽĚŽƐ ůŽƐ

ĐŽŵƉŽŶĞ ŶƚĞƐĞ

ŝŶƚĞƌĐŽŶĞ ĐƚĂƌůŽƐ
&ŝŶ

ĐŽŵƉŽŶĞ ŶƚĞ͍

ƌĞĂƌĂƌĐŚŝǀŽLJ

ĐŽŶĨŝŐƵƌĂƌ͘ZĞǀŝƐ Ăƌ

/ŶƚĞŐƌĂƌ ĞƐƋƵĞŵĄƚŝĐŽ

ĐŽŵƉŽŶĞŶƚĞƐ

WƵĞƌƚŽƐ ĐŽŶƉŝŶĞƐLJ

ŶŝǀĞůĞƐĚĞǀŽůƚĂũĞ

^ŝŵƵůĂƌ

ZĞǀŝƐ Ăƌ

ĞƐƋƵĞŵĄƚŝĐŽĚĞ &ŝŶ
ĞĨŝŶŝƌƌĞƐƚƌŝĐĐŝŽŶĞƐ
ƌĞĐƵƌƐŽƐ

^ŝŶƚĞƚŝnjĂƌ͕ WƌŽŐƌĂŵĂƌ&W'LJ

ŝŵƉůĞŵĞŶƚĂƌLJ ǀĞƌŝĨŝĐĂƌ

ŐĞŶĞƌĂƌďŝƚƐƚƌĞĂŵ ĨƵŶĐŝŽŶĂŵŝĞŶƚŽ

Figura 1: Metodología de trabajo para el desarrollo de las prácticas.

Ejemplo
El multiplexor es un circuito digital combinacional utilizado en variadas aplicaciones, como
lectores de códigos de barra, transmisores de presión y temperatura, lectores biométricos, siste-
mas de comunicación por video, etc. [5]. En este ejemplo vamos a implementar un multiplexor

Página 5 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

4 a 1, esto es, un circuito que tiene 4 entradas tipo bit y una salida tipo bit y a partir de dos
líneas de selección, también tipo bit, se determina cuál de las entradas pasará a la salida (véase
Figura 2).

X3
X2 Y
Mux4 a 1
X1
X0

S1 S0

Figura 2: Diagrama con los puertos de entrada/salida de un multiplexor 4 a l.

Los datos de entrada de este circuito son X3 X2 X1 X0 (trazo azul), las líneas de selección
son S1 S0 (trazo rojo), y la salida es Y (trazo verde). La combinación de las líneas de selección
determina cuál de las cuatro entradas pasará a la salida.
En VHDL la descripción de un circuito digital consta de dos partes, la declaración de los
puertos de entrada/salida, denominada entidad (entity ), y la descripción de la funcionalidad,
denominada arquitectura (architecture ).
El multiplexor 4 a 1 tiene seis entradas, que las podemos denominar X y S, donde X es de
4 bits y S es de 2 bits, y tiene una salida, Y, de 1 bit. En VHDL la declaración de la entidad
describe un módulo desde un punto de vista externo (véase líneas 4-9 del Código 2.1). Allí se
especica la interfaz que permite que el módulo sea utilizado en un sistema e incluye el nombre
del módulo (línea 4 ) y la declaración de los puertos de entrada/salida (líneas 5-8 ). En este caso
el módulo se llama Mux4To1 y los puertos de entrada son X y S, de 4 y 2 bits respectivamente,
y el puerto de salida es Y, de 1 bit, todos del tipo std_logic. En los puertos con múltiples bits
se debe establecer el peso de estos, por ejemplo, 3 downto 0 signica que el bit de mayor peso
(MSB - Most Signicant Bit) está en la posición 3, y el bit menos signicativo (LSB - Least
Signicant Bit) en la posición 0. También se puede establecer el orden inverso, 0 to 3, con el
MSB en la posición 0 y el LSB en la posición 3. VHDL no es sensible al caso, esto quiere decir
que entity y ENTITY son equivalentes, además casi todas las sentencias nalizan con punto
y coma (;), y los comentarios de una sola línea inician con un doble guión (- -).
La arquitectura especica la operación del módulo (véase líneas 11-22 del Código 2.1),
describiendo su comportamiento o estructura. Una arquitectura debe tener un nombre, en
este caso rtl, y siempre debe estar asociada con una declaración de entidad, en este caso con
Mux4To1 (línea 11 ), y de esta manera poder acceder a los puertos denidos allí. La zona
de declaraciones de la arquitectura es el área entre las palabras reservadas architecture y
begin, y es donde se declaran las señales que no son puertos, pero que sirven para interconectar
elementos como compuertas o módulos, y los componentes, que se utilizan en el modelado
estructural. La descripción del sistema se realiza entre las palabras reservadas begin y end
architecture, líneas 16-22, y para ello se pueden utilizar sentencias concurrentes, procesos e
instancias de componentes, lo cual está directamente relacionado con el modelado por ujo de
datos, comportamental y estructural, respectivamente.
Para describir un circuito se requiere conocer su estructura interna o su comportamiento.
En este caso, el multiplexor 4 a 1 es un circuito que selecciona una de sus entradas para pasarla
a la salida (véase Figura 3).
El funcionamiento de la estructura interna del multiplexor 4 a 1 puede representarse por
medio de una tabla de verdad (véase Tabla 1), en la cual se evidencia que el bit de salida Y
será uno de los bit de la entrada X, el cual se escogerá a partir de las líneas de selección S.
En VHDL existe fundamentalmente dos tipos de instrucciones: concurrentes y secuenciales.

Página 6 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

1 library ieee;
2 use ieee.std_logic_1164.all;
3
4 entity Mux4To1 is
5 port (
6 X : in std_logic_vector(3 downto 0);
7 S : in std_logic_vector(1 downto 0);
8 Y : out std_logic);
9 end Mux4To1;
10
11 architecture rtl of Mux4To1 is
12
13 -- Zona de declaracciones de
14 -- arquitectura
15
16 begin
17 with S select Y <=
18 X(0) when "00",
19 X(1) when "01",
20 X(2) when "10",
21 X(3) when others;
22 end architecture;

Código 2.1: Descripción en VHDL del multiplexor 4 a 1 de la Figura 2.

X3 Mux4 a 1
X2 Y
X1
X0

S1 S0

Figura 3: Estructura interna del multiplexor 4 a 1.

El código concurrente está destinado para el diseño de circuitos combinacionales (sin memo-
ria), como el multiplexor 4 a 1, mientras que el código secuencial se usa tanto para circuitos
combinacionales como secuenciales (circuitos con memoria).
EN VHDL la instrucción with-select-when permite seleccionar de un grupo de señales
de entrada, cual de ellas se asignará a la señal de salida (véase líneas 17-21 del Código 2.1).
Cuando S = 00 a la salida Y se le asigna el bit X(0), cuando S = 01 a Y se le asigna el bit
X(1), cuando S = 10 se le asigna a Y el bit X(2) y en cualquier otro caso de S la salida Y será
igual al bit X(3).
Para vericar el funcionamiento del sistema se debe crear un archivo de simulación, común-
mente conocido como testbench, el cual es un código que aplica algunos estímulos al modelo
y verica la respuesta con el n de establecer el correcto funcionamiento del circuito. De esta
manera, se puede establecer si el código sintetizable cumple o no con lo especicado. El test-

Página 7 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

Tabla 1: Tabla de verdad para el multiplexor 4 a 1.


S1 S0 Y
0 0 X0
0 1 X1
1 0 X2
1 1 X3

bench es una entidad en VHDL sin puertos, que reproduce las condiciones de operación real
del dispositivo bajo prueba (DUT - Device Under Test ) y verica que para cada estímulo de
entrada el diseño satisface los requerimientos. Si por lo menos para una combinación de las
señales de entrada el sistema no produce la salida esperada, se considera que la prueba falló y,
por lo tanto, el dispositivo no fue creado correctamente.
El testbench generalmente consta de tres partes: el generador de estímulos, la declaración
e instancia del DUT y el vericador de salida. En VHDL se debe declarar e instanciar el
componente a probar y el generador de estímulos se puede implementar con un process. De
manera opcional se puede incluir en el proceso un vericador de la respuesta del DUT a cada
una de las diferentes combinaciones de las señales de entrada. El generador de estímulos puede
incluirse todas las combinaciones de las señales de entrada o, si son demasiadas, solo algunas.
Además, se debe dar un intervalo de tiempo para el cambio en los estímulos y con este intervalo
denir la duración del proceso de simulación.
EL Código 2.2 es el testbench en VHDL para el multiplexor 4 a 1. La entidad en este archivo
no tiene puertos declarados, lineas 4-6, la declaración del DUT se ve en las líneas 10-15 y la
instacia en la línea 22, y el generador de estímulos es el proceso denido en las líneas 24-43.
En el Código 2.2 podemos destacar lo siguiente: las señales x_tb, s_tb y y_tb, declaradas
en las líneas 16-18, se utilizan para estimular y obtener la respuesta del DUT ; la constante
delay, declarada en la línea 19, es el intervalo de tiempo entre estímulos (20 ns), establecido en
el generador de estímulos con la instrucción wait for delay ; el valor asignado a la señal x_tb
está en hexadecimal, mientras que el valor de la señal s_tb está en binario, por ejemplo, en la
línea 32 a x_tb se le asignó el valor hexadecimal F (prejo x), esto es, el 15 en decimal o el
1111 en binario, mientras que a la señal s_tb se le asigna el binario 11 (sin prejo) o sea el 3
en decimal; como el proceso no tiene una lista de sensibilidad se ejecuta indenidamente, sin
embargo la instrucción wait de la línea 42 detiene su ejecución, por lo tanto dicho proceso solo
se ejecuta una vez.
La implementación de un sistema digital de mediana o alta complejidad puede requerir la
especicación de múltiples restricciones, por ejemplo, restricciones para las señales de voltaje,
la asignación de pines y la temporización. Algunas de ellas se hacen antes de la síntesis, otras
deben ser postsíntesis. Para este caso en particular solo consideraremos la asignación de puertos
del sistema a pines de entrada/salida de la FPGA, y la indicación de que estos pines son CMOS
de 3,3 V .
Cuando la simulación dio los resultados esperados y los pines fueron asignados se continua
con la síntesis, la implementación y la generación del bitstream. Estos tres pasos son en cadena,
y si alguno falla no se puede continuar. Después de la síntesis es interesante revisar el esque-
mático de los recursos que la FPGA destiná para la implementación y, si es necesario, denir
restricciones de temporización en sistemas secuenciales síncronos.
Finalmente, para programar la FPGA y vericar el funcionamiento se debe abrir el admi-
nistrador de hardware con el n de que la tarjeta sea detectada, y programar la FPGA con el
archivo de extensión bit que genera el proyecto.

Página 8 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
3
4 entity Mux4To1_tb is
5 -- Port ( );
6 end Mux4To1_tb;
7
8 architecture Behavioral of Mux4To1_tb is
9 -- Declaración del componente a simular.
10 component Mux4To1 is
11 port (
12 X : in std_logic_vector(3 downto 0);
13 S : in std_logic_vector(1 downto 0);
14 Y : out std_logic);
15 end component Mux4To1;
16 signal x_tb : std_logic_vector(3 downto 0);
17 signal s_tb : std_logic_vector(1 downto 0);
18 signal y_tb : std_logic;
19 constant delay : time := 20 ns; -- retardo entre estímulos.
20 begin
21 -- Instancia del componente a simular
22 mux_0:Mux4To1 port map(X => x_tb, S => s_tb, Y => y_tb);
23 -- Proceso a ejecutar indefinidamente.
24 process
25 begin
26 x_tb <= x"2"; s_tb <= "00";
27 wait for delay;
28 x_tb <= x"9"; s_tb <= "01";
29 wait for delay;
30 x_tb <= x"5"; s_tb <= "10";
31 wait for delay;
32 x_tb <= x"F"; s_tb <= "11";
33 wait for delay;
34 x_tb <= x"3"; s_tb <= "00";
35 wait for delay;
36 x_tb <= x"6"; s_tb <= "01";
37 wait for delay;
38 x_tb <= x"5"; s_tb <= "10";
39 wait for delay;
40 x_tb <= x"0"; s_tb <= "11";
41 wait for delay;
42 wait; -- detiene la ejecución del proceso.
43 end process;
44 end Behavioral;

Código 2.2: Testbench en VHDL para el multiplexor 4 a 1.

Página 9 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

3. OBJETIVO(S)
Utilizar Vivado para realizar el ujo de diseño completo de un sistema digital básico
utilizando un modelo basado en HDL y un conjunto de restricciones.

Utilizar Vivado para realizar, sobre un sistema digital básico, los procesos de simulación,
síntesis, implementación y generación del bitstream con el n de vericar su funcionalidad
sobre un sistema de desarrollo basado en FPGA.

4. RECURSOS REQUERÍDOS
Estación de trabajo o equipo de cómputo con Vivado.

Sistemas de desarrollo Nexys 4 o Nexys A7.

5. PROCEDIMIENTO O METODOLOGÍA PARA EL DE-


SARROLLO
Cada grupo de trabajo debe implementar para un sistema de desarrollo, Nexys 4 o Nexys
A7, los dos circuitos integrados (Integrated Circuit  IC) asignados (véase la Tabla 2) siguiendo
la hoja de datos del fabricante. Así mismo, deben generar un archivo de simulación para vericar
que la descripción funciona de acuerdo a la hoja de datos. Los integrantes del grupo de trabajo
deben demostrar suciencia en el manejo de la herramienta y la comprensión del funcionamiento
de los IC.

Tabla 2: Asignación de sistemas digitales a cada equipo de trabajo.


GRUPO IC
1 5 y 8
2 1 y 7
3 3 y 4
4 2 y 6
5 4 y 6
6 3 y 7
7 1 y 5
8 2 y 8

El estudiante debe estar en capacidad de sustentar ante el docente los siguientes aspectos
utilizando Vivado:

Crear proyectos.

Modicar los parámetros de conguración del proyecto.

Crear archivos de diseño, simulación y restricciones.

Consultar el esquemático de simulación.

Congurar la simulación.

Simular el sistema e interpretar los resultados: en este paso los estudiantes deben crear
un archivo de simulación con por lo menos ocho combinaciones diferentes de las señales
de entrada (véase Código 2.1).

Página 10 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

Consultar el esquemático con los recursos utilizados por la FPGA para su implementación.

Asignar pines a los puertos de entrada/salida y niveles de tensión.

Sintetizar, implementar y generar el bitstream para programar la FPGA.

Consultar el bitstream y descargarlo en la FPGA.

Sistemas digitales propuestos


1. IC 1: CD54/74AC280  generador/chequeador de paridad de 9 bits.

2. IC 2: SN54LS138-SP  decodicador de 3 a 8.

3. IC 3: SN54F153  multiplexor dual de 4 a 1.

4. IC 4: MC14532B  codicador de prioridad de 8 a 3.

5. IC 5: CD4028B  decodicador BCD a decimal.

6. IC 6: SN74HC151-Q1  multiplexor de 8 a 1.

7. IC 7: CD4063B  comparador de magnitud de 4 bits.

8. IC 8: SN54LS283  sumador completo con acarreo de 4 bits.

6. PARÁMETROS PARA ELABORACIÓN DEL INFOR-


ME
Si la práctica requiere la presentación de un informe el docente facilitará una plantilla en
A
Word para escribirlo. Si los estudiantes lo desean pueden utilizar L TEX empleando los mismos
parámetros de la plantilla propuesta.

7. DISPOSICIÓN DE RESIDUOS
Esta práctica no genera residuos.

Referencias
[1] Xilinx,  UltraFast Design Methodology Guide for the Vivado Design Suite, tech. rep.,
Xilinx, Inc., San Jose, CA, 2020.

[2] Digilent,  Nexys 4 FPGA Board Reference Manual, tech. rep., Digilent, Inc., Pullman, WA,
2016.

[3] Digilent,  Nexys A7 FPGA Board Reference Manual, tech. rep., Digilent, Inc., Pullman,
WA, 2019.

[4] Xilinx,  Vivado Design Suite User Guide: Designing with IP, tech. rep., Xilinx, Inc., San
Jose, CA, 2020.

[5] Texas Instruments Inc.,  SN74LVC2G157 Single 2-Line to 1-Line data selector multiplexer,
tech. rep., Texas Instruments, Inc., Dallas, TX, 1999.

Página 11 de 12
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 02
Talleres y Laboratorios de Docencia ITM Fecha 08-10-2018

Elaborado por: Sergio Ignacio Serna Garcés

Revisado por: Andrés Felipe Tobón

Versión: 5.1

Fecha: marzo 2023

Página 12 de 12

También podría gustarte