Sunteți pe pagina 1din 5

Laboratorio 2.

Diseño Jerárquico en VHDL y Vivado, Sistemas


Combinacionales y Secuenciales - ADF.
Espín Vanessa, Lozada Santiago.
Departamento de Eléctrica y Electrónica, Universidad de las Fuerzas Armadas ESPE
Sangolquí-Ecuador

vpespnh@espe.edu.ec
lzsantigo@espe.edu.ec

Resumen- El presente documento da a conocer el desarrollo e TABLA I. DISTRIBUCIÓN DE PINES


implementación de sistemas combinacionales y secuenciales;
mediante un diseño modular que permite la jerarquización del
proceso a desarrollar, el lenguaje empleado para la realización
del presente laboratorio está escrito en VHDL, mediante el
software de Xilinx Vivado 2019.1 e implementado en una tarjeta
de desarrollo Artix-7 FPGA. Las tres macro funciones que
implementa el diseño son: Unidad aritmética – lógica (ALU),
Dividor (DIV) y Máquina de estado (FSM).

Abstract- This document presents the development and El sistema se genera de manera jerárquica, las 3 macro
implementation of combinational and sequential systems; funciones estarán contenidas en un archivo TOP que permitirá
Through a modular design that allows the hierarchy of the
el manejo de cada una a elección.
process to be developed, the language used to carry out this
laboratory is written in VHDL, using the Xilinx Vivado 2019.1
software and implemented in an Artix-7 FPGA development
card. The three macro functions that the design implements are: II. DESCRIPCIÓN DEL PROBLEMA
Arithmetic - logic unit (ALU), Divider (DIV) and State machine
(FSM).
A. Jerarquización del Diseño

En primer lugar es importante definir el archivo TOP, que será


I. INTRODUCCIÓN el que contenga a las 3 macro funciones: ALU, DIV y FSM,
La tarjeta FPGA utilizada para nuestro laboratorio es la además de 3 módulos que realizarán cambios a nuestro
Basys 3 la cual cuenta con 16 interruptores, 5 botones sistema; estos son: 1 Hz Clock Generator, HEX to 7-segment
pulsadores, 17 led, pantalla de 7 segmentos de 4 dígitos, reloj y Mode Selection. El método de jerarquización nos permite
interno de 100 Mhz, entre otros. La BASYS 3 está diseñada determinar la forma de manejar cada módulo dentro del TOP
para ser programada con Vivado Design Suite de Xilinx, que en torno a las respuestas que queremos visualizar.
es una suite de alto rendimiento la cual incluye nuevas
herramientas y mejores flujos de diseño que ayudan al usuario
y mejoran los métodos de diseño. [2] [3]

Fig. 1. Tarjeta BASYS 3.


Fig. 2. Diagrama Jerárquico.
La Tabla I muestra las diferentes partes de la tarjeta en torno
a su numeración.
B. Módulo - ALU TABLA III. TABLA FUNCIONAMIENTO DIVISOR
Entradas al módulo DIV
Diseño de una ALU de 4-bits capaz de realizar cuatro Nombre de la entrada Descripción
operaciones entre dos operandos de entrada de 4-bits cada uno. A Dividendo de 4 bits
Las operaciones son: suma aritmética, resta aritmética, B Divisor de 4 bits
multiplicación, y "right circular shift" de uno de los operandos Salidas del módulo DIV
haciendo uso de concatenación de vectores. Una entrada tipo Nombre de la salida Descripción
vector permite seleccionar la operación. A través de una Y Resultado de la operación
entrada se selecciona la operación cuyo resultado se muestra división de 4 bits
en una salida tipo vector asignada a LEDs y también a un
display. No se considera acarreo de entrada ni de salida.

TABLA II. TABLA FUNCIONAMIENTO ALU


Entradas al módulo ALU
Nombre de la entrada Descripción
A Primer operando de 4 bits
B Segundo operando de 4 bits
Fig. 4. Módulo DIV.
sel Entrada de 2 bits de selección
entre las 4 operaciones
Salidas del módulo ALU
Nombre de la salida Descripción D. Módulo - FSM
data Resultado de la operación
seleccionada 4 bits Diseño de una Finite-State Machine (FSM) correspondiente al
ejercicio 11 propuesto en el libro [2], para la implementación
de la FSM, las entradas se realizarán con switches y las salidas
usando LEDs. La entrada de reset se realiza con un pulsador,
un switch permite seleccionar la fuente de clock, que puede
ser manual con un pulsador o una señal interna de 1Hz.

Ejercicio propuesto 11:


En torno al diagrama de estados presentado en la figura 5, se
Fig. 3. Módulo ALU.
realiza la codificación de una Finite-State Machine que
cumpla con las exigencias y presente las salidas que cada
C. Módulo - DIV estado especifica.
Diseño de un divisor (DIV) genérico, en el cual tanto el
dividendo como el divisor pueden ser cualquier número entero
de 4 bits (rango de 0 a 15). Las entradas se generan a través de
switches y su salida se visualiza en LEDs.

Explicación del algoritmo:


Se quiere calcular y=a/b y y tiene el mismo número (n + 1) de
bits. Para el algoritmo de la división primero se crea una
versión desplazada de b, cuyo tamaño es 2n +1 bit. B_inp(i) Fig. 5. Diagrama de Estados FSM.
es simplemente b desplazado a la izquierda por i posiciones.
El computo de el cociente es realizada asi. Comienza desde el Codificación VHDL:
arriba de la tabla, comparamos a_inp(i) con b_inp(i). Si el
anterior es mas grande o igual que el siguiente, que y(i)=´1´ y
b_inp(i) es sustraído de a_inp(i); de otra manera, y(i)= ‘0’ y
simplemente procedemos a la siguiente línea. Después de n+1
iteración, el computo es completado y el valor izquierdo en
a_inp es el residuo.

Fig. 6. Codificación VHDL FSM.


TABLA VI. TABLA FUNCIONAMIENTO FSM
Entradas al módulo FSM
Nombre de la entrada Descripción
X1 Entrada uno de 1 bit
X2 Entrada dos de 1 bit
CLK Señal de reloj
Fig. 9. Módulo DIVFREQ.
CLR Señal de reset – lleva al estado 1
Salidas del módulo FSM
Nombre de la salida Descripción
Y Codificación del estado de 3 bits F. Módulo – HEX to 7-segment
Z Salida de la FSM según el estado
Se describe en VHDL un conversor de código hexadecimal a
código 7-segmentos que será usado para desplegar resultados
de la ALU en un display de la tarjeta de desarrollo.

TABLA VI. TABLA FUNCIONAMIENTO HEX_7


Entradas al módulo HEX_7
Nombre de la entrada Descripción
data Entrada de 4 bits
Fig. 7. Módulo FSM. Salidas del módulo HEX_7
Nombre de la salida Descripción
disp Salida de 7 bits para el display
E. Módulo – 1 Hz Clock Generator de 7 segmentos ánodo común
Dentro de este módulo se genera una señal de reloj de
manera que sea visible para el ojo humano. La tarjeta
utilizada este laboratorio cuenta con un reloj interno que
oscila a 100MHz.
Para obtener la señal requerida deberemos realizar la siguiente
operación matemática.

𝑓𝑒𝑛𝑡𝑟𝑎𝑑𝑎 100𝑀𝐻𝑧
𝑐𝑙𝑘 = = = 100 𝑀𝐻𝑧 Fig. 10. Módulo HEX_7.
𝑓𝑑𝑒𝑠𝑒𝑎𝑑𝑎 1𝐻𝑧

Se utiliza un contador de módulo 50M (0 - 499999999),


debido a que la señal de reloj mantiene medio ciclo en alto y G. Módulo – Mode Selector
medio ciclo en bajo. El código de este módulo se muestra en
la figura 8. Como modulo selector se ha diseñado un multiplexor que va
Los pines de entrada y salida utilizados en este módulo se los a permitir el paso de las señales resultantes que provienen de
presenta en la Tabla V. los módulos ALU, DIV y FSM, la selección del modo está
establecida mediante switches que envían un valor especifico
TABLA V. TABLA FUNCIONAMIENTO CLK al multiplexor y dependiendo del valor coloca la entrada
Entradas al módulo DIVFREQ indicada en la salida.
Nombre de la entrada Descripción El código de implementación del módulo selector se muestra
CLK Reloj interno 100 MHz en la figura 11.
Salidas del módulo DIVFREQ
Nombre de la salida Descripción TABLA VII. TABLA FUNCIONAMIENTO MUX31
CLK2 Señal de reloj generada a 1 Hz Entradas al módulo MUX31
Nombre de la entrada Descripción
Codificación VHDL: M1 Entrada I0 del Mux de 4 bits
M2 Entrada I1 del Mux de 4 bits
M3 Entrada I2 del Mux de 4 bits
SELMUX Habilitador de salida de 2 bits
Salidas del módulo MUX31
Nombre de la salida Descripción
SMUX Salida del Mux de 4 bits

Codificación VHDL:
Fig. 8. Codificación VHDL Clock 1 Hz.
C. Módulo – FINITE-STATE MACHINE (FSM)

IV. IMPLEMENTACIÓN
Integración Usando VHDL (structural description)

Cuando los componentes se declaran en la arquitectura del archivo


TOP se realiza la interacción con los módulos y sus respectivas
entradas y salidas.
El PORT MAP nos permite relacionar los puertos de los
Fig. 11. Codificación VHDL Mode Selector.
componentes con los de las entidades, se lo puede realizar por dos
formas mediante:

Mapeo posicional: Consiste en escribir los puertos de la entidad en


el orden en el que se desee conectar los puertos del componente
Mapeo nominal: Consiste en indicar el puerto del componente y de
la entidad.

Fig. 12. Módulo MUX31.

III. SIMULACIONES

A. Módulo – ARITMETIC LOGIC UNIT (ALU)

Fig. 16. Puertos de la entidad del archivo TOP.


Siendo estos puertos los que saldrán a la tarjeta FPGA.

Para poder relacionar las salidas de los componentes con las


entradas se necesita signals, los cuales representan cables que
realiza conexiones internas del sistema.

Fig. 13. Simulación ALU.

B. Módulo – HEX to 7-segment (HEX_7) Fig. 17. Señales de conexiones entre componentes.

Se instancia cada uno de los componentes, para lo cual se


realiza el mapeo del sistema.

Fig. 17. Mapeo de los puertos de los componentes.

Al terminar de instanciar el software vivado detecta


automáticamente la jerarquía del diseño que se desea
Fig. 14. Simulación HEX_7. implementar, como se aprecia en la figura 18.
REFERENCIAS
[1] Pedroni. V. A. (2004). Circuit Design with VHDL. Londres. Inglaterra.
MIT press.
[2] Digilent. (2016). Basys 3 FPGA Board Reference Manual.
[3] Lógica Programable. (s.f.). Recuperado el 25 de 06 de 2017, de Basys 3
Artix-7 FPGA Board:
https://sites.google.com/site/logicaprogramable/calculadoras/fpga/basy
s-3-artix-7-fpga-boar

Fig. 18. Jerarquía de módulos en Vivado.

V. CONCLUSIONES
• Con la creación de los archivos de simulación Test
Bench nos permiten saber si nuestro programa está
realizando las operaciones que asignamos para cada
modulo.
• No se deben generar errores en el constraint, ya que
si se hace una declaración errónea en este apartado el
programa desarrollado con anterioridad no se
implementará de manera correcta.
• Para generar el divisor de frecuencia se debe conocer
esta pequeña formula (f_tarjeta/f_deseada), la que
nos da el valor que tendría que tener nuestro ciclo de
reloj para obtener la frecuencia deseada, para el ojo
humano seria de 100Mhz ya que al obtener el periodo
(T=1/f=10 ns) y para 1 seg el valor de la frecuencia
seria (1seg/10 nseg=100MHz).
• Es importante asignar una salida para cada variable
de nuestro TOP para que el programa corra sin
ningún error.
• Para poder utilizar el código de otros proyectos, es
importante añadir un paquete y llamar al proyecto
que deseamos incluir en nuestro TOP con el comando
port map.

VI. RECOMENDACIONES

• Para un diseño de cualquier se recomienda


descomponer jerárquicamente en módulos que
realicen las diferentes funciones del sistema ya que
facilita la comprensión del mismo y se utiliza la
famosa frase “Divide y Vencerás”.
• Se debe tener en cuenta que para el diseño de un
sistema eléctrico digital se debe descomponer en
módulos que ayude a realizar las diferentes funciones
del sistema, con esto es más fácil realizar el proyecto.
• Realizar la simulación de cada módulo es muy
recomendable ya que a partir de esto se verifica el
correcto funcionamiento antes de su
implementación.
• Revisar que en el programa se esté utilizando el
constrains de la tarjeta a utuilizar que en este caso es
la Atix-7 FPGA BASYS 3.
• Cuando se realiza la simulación de cada módulo es
más factible verificar que las operaciones que se
están realizando son correctas.

S-ar putea să vă placă și