Documente Academic
Documente Profesional
Documente Cultură
Autor:
Alexander B. H ILARIO TACURI
1. OBJETIVOS
• Introducción de programación VHDL para FPGAs
• Aprender a escribir test − benchs en VHDL
• Aprender el flujo de diseño con el ISE: Sı́ntesis, simulación y generación del Bitstream
• Aprender como asignar pins de entrada y salida del FPGA y cargar el Bitstream en el
Nexys-4 DDR Artix-7 FPGA Board.
2. CODIFICACIÓN VHDL
• Revise el material referente al curso.
3. NEXYS-4 DDR ARTIX-7 FPGA
• La placa Nexys-4 DDR puede recibir alimentación de su puerto USB. Conecte la placa al
computador via cable USB. Si no enciende, conecte la fuente de alimentación de la placa.
4. DESARROLLO DEL LABORATORIO
PARTE 1
1
4.1. Flujo de diseño
• Escriba el test-bench VHDL para probar el circuito para todas las posibles combinaciones
de las entradas.
• Implemente su diseño.
PARTE 2
4.2 Sumador completo
2
tres salidas A = B, A > B y A < B. Solo una de estas salidas estará a 1 y las demás estarán a 0
dependiendo de los valores de las entradas.
Diseñar, implementar, demostrar y documentar un comparador de 4 bits en VHDL. El compara-
dor tendrá:
• Escriba el test-bench VHDL para probar el circuito para todas las posibles combinaciones
de las entradas.
• Asignación de entradas y salidas para el sumador completo: Crear un archivo UCF. Use
SW0-SW2 en la placa Nexys-4 DDR para las entradas y LED(0)-LED(1) para la salida.
• Asignación de entradas y salidas para el comparador: Crear un archivo UCF. Use SW0-
SW7 en la placa Nexys-4 DDR para las entradas y LED(0)-LED(2) para la salida.
3
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN
MICROELECTRÓNICA
Prof. PhD. Alexander B. Hilario T.
LABORATORIO 2
1. OBJETIVOS
2. CODIFICACIÓN VHDL
3. DESARROLLO DE LA PRACTICA
• Problema: Unidad aritmética lógica de 4 bits. Este circuito selecciona entre operaciones
aritméticas (Valor absoluto y suma) y operaciones lógicas (XOR y AND). Solo un re-
sultado (valor hexadecimal) puede ser mostrado en un display de 7 segmentos. Este es
seleccionado por la entrada sel(1..0).
• Operaciones aritméticas: Las entradas A y B de 4 bits son tratadas como números un-
signed.
– A+B
– |A − B|: Resultado de 4 bits.
• Operaciones lógicas (A xnor B, A nand B). Estas operaciones son bit a bit.
• Nexys-4 DDR: Cada display de 7 segmentos tiene entradas activas-bajas y una habil-
itación activa-baja. Asegúrese de que sólo está activada una pantalla de 7 segmentos (por
ejemplo: AN0 = 0, AN1-AN7 = 1 para usar sólo la pantalla de 7 segmentos más a la
derecha).
4. FLUJO DE DISEÑO
1
• Crear un nuevo proyecto ISE. Seleccionar el dispositivo: XC7A100T-1CSG324 Artix-7
FPGA.
• Escriba el test-bench VHDL para probar el circuito y pruebe los casos mas representa-
tivos.
• Asignación de entradas y salidas: Crear un archivo UCF. Use SW0 a SW7 en la placa
Nexys-4 DDR para las entradas A y B, SW8 a SW10 para las entradas se1 y EN y CA-
CG para la salida de 7-bits.
2
Figure 1: ALU
3
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN
MICROELECTRÓNICA
Prof. PhD. Alexander B. Hilario T.
LABORATORIO 3
Fecha de entrega: 04/05 de Octubre
1. OBJETIVOS
• Utilizar la descripción estructural en VHDL.
• Probar circuitos combinacionales en un FPGA.
2. CODIFICACIÓN VHDL
• Revise el material del curso.
3. DESARROLLO DE LA PRACTICA
• Problema: Implementar la forma alternativa para resolver una multiplicación de dos
números unsigned de 4 bits según el diagrama mostrado en la Figura 1.
4. FLUJO DE DISEÑO
• Crear un nuevo proyecto ISE. Seleccionar el dispositivo: XC7A100T-1CSG324 Artix-7
FPGA.
• Escriba el código VHDL para el circuito de la Figura 1. Use la descripción estructural:
Crear archivos separados para el sumador completo, la Unidad de procesamiento y el
archivo principal.
• Escriba el test-bench VHDL para probar el circuito y pruebe los casos mas representa-
tivos.
• Realice la Functional Simulation y la Timing Simulation (Simulación de comportamiento
y temporal).
• Asignación de entradas y salidas: Crear un archivo UCF. Use SW0 a SW7 en la placa
Nexys-4 DDR para las entradas, y dos displays para mostrar el resultado final.
• Generar el archivo bitstream
• Descargar el bitstream en el FPGA.
1
a1(3) a1(2) a1(1) a1(0)
ab a
b b1(0)
b1(2)
b1(3)
Figure 1: Multiplicador
2
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN
MICROELECTRÓNICA
Prof. PhD. Alexander B. Hilario T.
LABORATORIO 4
Fecha de entrega: 18/19 de Octubre
1. OBJETIVOS
• Utilizar la descripción estructural y la descripción concurrente en VHDL.
• Probar circuitos combinacionales en un FPGA.
2. CODIFICACIÓN VHDL
• Revise el material del curso.
3. DESARROLLO DE LA PRACTICA
• Problema: En este laboratorio se requiere diseñar un generador de números pseudo-
aleatorios de 8 bits. Un generador de números pseudo-aleatorios es un algoritmo para
generar una secuencia de números cuyas propiedades se aproximan a las propiedades de
secuencias de números aleatorios. La secuencia generada no es verdaderamente aleato-
ria, porque está completamente determinada por un conjunto relativamente pequeño de
valores iniciales.
Pasos a seguir:
– Declarar la entidad CLOCK como entrada y 8 bits de salida.
– Declara 2 variables temporales,una tan largo como su salida (Rand) y otro de un
solo bit (Temp).
– Inicializa random de tal manera que su bit mas significativo (MSB) sea ”1” y todos
los demás sean ”0” (para obtener un numero aleatorio también pueden ser difer-
entes).
– La variable de un solo bit temp se inicializa en ”0”.
– Utilizar una instrucción if para el aumento de Reloj.
– Realizar un XOR entre el MSB y el MSB-1 del numero random y asignarlo a la
variable temp.
– Asigna los valores de random (MSB-1 a 0) a (MSB a 1) y luego asigna el valor de
temp a random(0).
1
– Terminar la sentencia if y todo el proceso.
• Para esta aplicación en FPGA también se necesita un divisor de reloj para observar la
secuencia en la tarjeta Nexys 4 ddr
• El divisor de reloj tendrá una entrada ClOCK y una salida de 1 bit, la salida es uno de los
bit de salida del contador (que serán las señales para nuestro uso).
4. FLUJO DE DISEÑO
• Escriba el test-bench VHDL para probar el proyecto y pruebe los casos mas representa-
tivos.
• Asignación de entradas y salidas: Crear un archivo UCF. Use los display de 7 segmentos
CA-CG para las salidas (número aleatorio).
2
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN
MICROELECTRÓNICA
Prof. PhD. Alexander B. Hilario T.
LABORATORIO 5
1. OBJETIVOS
2. CODIFICACIÓN VHDL
3. DESARROLLO DE LA PRACTICA
• Escritura en la memoria: (wr rd = 1): La entrada de 4 bits Din se escribe en uno de los
registros. La señal address[2..0] selecciona el registro a ser escrito. Aquı́, el display de
7 segmentos debe mostrar 0. Ejemplo: Si address = 101, entonces Din es escrito en el
registro 5.
4. FLUJO DE DISEÑO
1
• Escriba el código VHDL para el circuito de la Figura 1. Crear un archivo separado para i)
Registro con habilitador, ii) MUX con habilitador, iii) Decodificador con habilitador, iv)
decodificador de 7 segmentos-hexadecimal y v) archivo principal.
• Asignación de entradas y salidas: Crear un archivo UCF. Use SW0 a SW7 en la placa
Nexys-4 DDR para las entradas, CLK100MHZ para la entrada clock, el pulsador CPU RESET
para resetN y el display de 7 segmentos para la salida.
Figure 1: RAM
2
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN
MICROELECTRÓNICA
Prof. PhD. Alexander B. Hilario T.
LABORATORIO 6
Fecha de entrega: 22/23 de Noviembre
1. OBJETIVOS
• Describir maquinas de estado finito en VHDL.
• Implementar un sistema digital: Camino de datos y unidad de control
2. CODIFICACIÓN VHDL
• Revise el material del curso.
3. DESARROLLO DE LA PRACTICA
• Problema: Dado dos números unsigned A y B, diseñe un circuito que produce el cociente
Q y el residuo R. El algoritmo que implementa la division tradicional es:
• Una arquitectura iterativa es mostrada en la Figura 2 para A con 6 bits y B con 4 bits. El
registro R guarda el residuo. En este diseño, una operación de division comienza cuando
E = 1 (Donde los valores A y B son capturados). Entonces, a cada ciclo del reloj se
ejecuta i) Cambio en el siguiente bit de A o ii) Cambio en el siguiente bit de A y restamos
B. La señal done es creada para indicar que la operación ha sido completada y el resultado
aparece en Q y R.
1
Figure 2: Circuito para la división iterativa
• El contador de modulo 6 incluye una entrada sı́ncrona sclr que limpia el contador cuando
E = sclr = 1 y una salida zC que es activada cuando el contador llega a 5.
• Le f t −shit register: Note que uno de los registros de cambio incluye una entrada sı́ncrona
sclr que limpia la salida de los registros cuando E = sclr = 1.
• Escriba el código VHDL para el circuito de la Figura 2. Crear un archivo separado para
i) contador de modulo 6, ii) shi f t register, iii) shi f t register con entrada sclr, iv) registro,
v) sumador, vi) decodificador de 7 segmentos y vii) archivo principal.
2
• Escriba el test-bench VHDL para probar el circuito(Debe de generar una entrada de reloj
de 100 Mhz para las simulaciones) para probar los siguientes casos:
• Asignación de entradas y salidas: Crear un archivo UCF. Use SW0 a SW10 en la placa
Nexys-4 DDR para las entradas, CLK100MHZ para la entrada clock, el pulsador CPU RESET
para resetn, un LED para done, 6 LEDs para Q, y el display de 7 segmentos para R.