You are on page 1of 20

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS FACULTAD DE INGENIERÍA ELECTRÓNICA ESCUELA DE INGENIERÍA ELECTRÓNICA

DISEÑO DIGITAL LABORATORIO No1 ESTILO FLUJO DE DATOS PARA EL DISEÑO E IMPLEMENTACIÓN EN FPGA (XILINX) DE CIRCUITOS COMBINACIONALES

Profesores:

Alfredo Granados Ly y Dario Utrilla Salazar

UNMSM – FIE

Diseño Digital

1. Unidades de diseño.
En un programa VHDL hay dos bloques básicos: La entidad y la arquitectura. Entidad: La entidad, nos sirve para relacionar nuestro diseño con el mundo exterior, es decir, analizamos lo que tratamos de crear como una "caja negra", de la que sólo conocemos sus entradas, salidas y la disposición de las mismas. Sintaxis: entity identificador is [genéricos] [puertos] end [identificador];
Nota: lo que se encuentra entre corchetes [] se considera que su uso es opcional.

Cada señal en una declaración de entidad está referida a un puerto (o grupo de señales), el cual es análogo a un(os) pin(es) del símbolo esquemático. Un puerto es un objeto de información, el cual puede ser usado en expresiones y a la vez se le pueden asignar valores. A cada puerto se le debe asignar un nombre válido.

La declaración de un puerto consta de: - nombre: identifica a un pin de la entidad - modo: indica el flujo de la señal. - tipo: indica el conjunto de valores que puede tomar un objeto, en este caso el puerto. El modo determina como las sentencias de la arquitectura pueden acceder al puerto. Tenemos 4 tipos de modos: - in: es de sólo lectura (no se puede escribir). - out: es de sólo escritura (no se puede leer). - buffer: se comporta como un puerto de salida (out) que se puede leer. - Inout: es de tipo bidireccional, quiere decir que se puede leer y escribir. Sólo para fines de simulación todo puerto puede tener un valor por defecto que determina el valor inicial de la señal, los puertos de entrada pueden dejarse desconectados si tienen un valor por defecto.

A. Granados/ D.Utrilla

2

Laboratorio No1

UNMSM – FIE

Diseño Digital

Arquitectura: En la declaración de la arquitectura es donde reside todo el funcionamiento de un programa, ya que es ahí donde se indica que hacer con cada entrada para obtener la salida. La arquitectura es el conjunto de detalles interiores de la caja negra. Sintaxis: architecture nombre of entidad is - - Zona de declaración begin sentencias concurrentes; sentencias concurrentes; sentencias concurrentes; end nombre; Para describir una arquitectura podemos utilizar tres estilos, teniendo cada uno su propio nivel de abstracción: - Estilo algorítmico (behavioral) - Estilo flujo de datos (dataflow) - Estilo estructural (structure) Cada estilo está basado en sentencias concurrentes que determinan el grado de abstracción del circuito a diseñar, así tenemos que el estilo algorítmico se caracteriza por utilizar las sentencias de los lenguajes de alto nivel, el estilo flujo de datos basado en sentencias que asignan valores a una señal y el estilo estructural que permite interconectar componentes ya elaborados. La descripción de una arquitectura se compone de un conjunto de sentencias concurrentes que se ejecutan en forma asíncrona entre sí y se comunican mediante señales. Estos procesos que se ejecutan concurrentemente deben poder comunicarse (sincronizarse) entre ellos. El elemento necesario para comunicar dos procesos es la señal (signal). En cada uno de los estilos de modelado se utiliza la sentencia de asignación de señales: <=, para esto hay que tener en cuenta que: Las señales a ambos lados del operador de asignación (<=) deben ser del mismo tipo. Si hay varias asignaciones a la misma señal en un mismo proceso, prevalece el valor de la última asignación. Las asignaciones a señales pueden aparecer en sentencias concurrentes (estilo flujo de datos) o sentencias secuenciales (estilo algorítmico).

En la arquitectura las sentencias concurrentes hacen referencia en todo momento a señales, estas señales pueden ser puertos. La señal es un tipo de objeto en VHDL que puede cambiar de valor y tiene un modelo de retardo asociado. Entre los modelos de retardo tenemos: - Retardo de tipo inercial: es el retardo asociado a las compuertas digitales. - Retardo de tipo transporte: es el retardo asociado por las interconexiones que existen entre los diferentes circuitos. El retardo de tipo inercial filtra los cambios de la señal a la entrada del circuito siempre que duren un tiempo menor al retardo de propagación de la compuerta y después retraza la señal. El retardo de tipo transporte no filtra sólo retraza la señal.

A. Granados/ D.Utrilla

3

Laboratorio No1

UNMSM – FIE

Diseño Digital

Analicemos la siguiente sentencia concurrente:

En el gráfico anterior se puede apreciar que la respuesta de la compuerta sale retrazada 5ns. Si la entrada A o B cambia en un tiempo menor a 5ns, ese cambio no afectará a la salida Z.

En el gráfico anterior se puede apreciar que la señal B llega retrazada a C en 5 ns. La expresión : Z <= A and C; no tiene la cláusula after, por lo que el modelo de retardo asociado es el de tipo delta, que es un tipo de retardo inercial cuyo retrazo de la señal es muy pequeño (aproximadamente 0). Tipo: El VHDL es un lenguaje de programación donde los objetos a utilizar (señales, variables, constantes) deben tener asignado un tipo. El tipo define el conjunto de valores que pueden tomar los objetos. Así tenemos por ejemplo el tipo bit (declarado en el paquete Standard de la biblioteca STD) como: TYPE BIT IS ('0', '1') Indica que el tipo bit sólo puede tomar los valores: '0' y '1'. Este es un tipo básico y con el ya podemos crear puertos y nodos internos para interconectar los circuitos digitales. Pero hay un inconveniente: este tipo no permite implementar componentes cuya salida pueda tomar un valor de alta impedancia (Z), no se pueden realizar operaciones aritméticas (sólo lógicas) ya que no hay implementadas funciones para tal fin con este tipo y tampoco pueden unirse más de una señal sobre salidas de varios circuitos porque el tipo bit tampoco tiene asociado una función que
A. Granados/ D.Utrilla 4 Laboratorio No1

UNMSM – FIE

Diseño Digital

permita resolver las múltiples asignaciones a un mismo objeto. Por esta razón es preferible utilizar el tipo de dato std_logic que se encuentra en el paquete STD_LOGIC_1164 de la biblioteca IEEE. El tipo std_logic es un tipo de dato multivaluado como se muestra en parte de la descripción del paquete:

El tipo de dato utilizado por lo general std_logic (que es un sub-tipo del tipo std_ulogic) por las ventajas que hemos mencionado en el párrafo anterior. Para poder utilizar este tipo de dato en el programa VHDL debemos declarar previamente en que paquete se encuentra y a que biblioteca pertenece el paquete, para esto utilizamos las siguientes sentencias:

Con ello tenemos la posibilidad de utilizar todos los elementos que se encuentran declarados en los paquetes: STD_LOGIC_1164, STD_LOGIC_ARITH y STD_LOGIC_UNSIGNED. En el paquete STD_LOGIC_1164 encontramos la declaración de tipos y subtipos de datos, funciones de conversión de un tipo a otro. En el paquete STD_LOGIC_ARITH encontramos funciones aritméticas, lógicas y de relación que se puede utilizar entre los objetos declarados con tipos de datos STD_LOGIC ó STD_LOGIC_VECTOR. El paquete STD_LOGIC_UNSIGNED complementa al paquete STD_LOGIC_ARITH con operaciones aritméticas sin tener en cuenta los bits de signo.

A. Granados/ D.Utrilla

5

Laboratorio No1

UNMSM – FIE

Diseño Digital

2. ESTILO FLUJO DE DATOS PARA EL DISEÑO DE CIRCUITOS COMBINACIONALES Este estilo se caracteriza por utilizar las asignaciones concurrentes a señales (ACS). Tenemos 3 tipos de ACS: - ACS única - ACS condicional - ACS selectiva Estas sentencias terminan asignando un valor a una señal después de evaluar toda una expresión, esta evaluación se realiza cuando ocurre un evento en una de las señales que se encuentran a la derecha del símbolo de asignación a señal (<=). ACS única: se basa en expresiones muy parecidas a las ecuaciones booleanas, en la mayoría de los casos se expresan en suma de términos producto. Sintaxis: señal <= expresión; en la expresión pueden aparecer valores, señales, operadores lógicos o aritméticos. Veamos algunos ejemplos: enable <= „1‟ ; z <= a and b or c ; f <= p1 + p2; temp <= var1 & var2; y <= “10101”; ACS condicional: se basa en expresiones que deben evaluar una condición y dependiendo de la respuesta terminan asignando el resultado de la expresión a la señal. Sintaxis: señal <= expresión1 when condición1 else expresión2; En la declaración anterior, si la condición1 es verdadera entonces la señal toma el resultado de la expresión1, caso contrario (si condición1 es falsa) entonces la señal toma el resultado de la expresión2. La sintaxis de la ACS condicional en su forma general es: señal <= expresión1 when condición1 else expresión2 when condición2 else expresión3 when condición3 else ........ expresiónN when condiciónN else expresiónM ; En la declaración anterior se nota que hay una prioridad en la asignación a señal, por ejemplo para que la señal tome el resultado de la expresión3 debe cumplirse que la condición1 y condición2 sean falsas y la condición3 sea verdadera. La prioridad la tiene la condición1, si esta no se cumple se pasa a evaluar la condición2, si esta no se cumple se pasa a evaluar la condición3 y así sucesivamente se evalúan todas las condiciones hasta que cumpla alguna de ellas. Hay que aclarar que siempre se termina evaluando una expresión y asignando la respuesta a la señal así no se cumpla ninguna condición.

A. Granados/ D.Utrilla

6

Laboratorio No1

UNMSM – FIE

Diseño Digital

Veamos algunos ejemplos: - compuerta AND:

C <= A when B =‟1‟ else „0‟; multiplexor de 2 a 1:

Z <= A when SEL=‟0‟ else B; en el siguiente circuito:

F <= A when Z=‟1‟ else B when Y =‟1‟ else C when X =„1‟ else „0‟; decodificador de 3 a 8;

ENTRADA <= C & B & A; TEMPORAL <= “11111110” when ENTRADA = “000” else “11111101” when ENTRADA = “001” else “11111011” when ENTRADA = “010” else “11110111” when ENTRADA = “011” else “11101111” when ENTRADA = “100” else “11011111” when ENTRADA = “101” else “10111110” when ENTRADA = “110” else “01111111” ; Y <= TEMPORAL when ENA =‟1‟ else “11111111”;

A. Granados/ D.Utrilla

7

Laboratorio No1

UNMSM – FIE

Diseño Digital

ACS selectivo: se utiliza mucho para implementar tablas de verdad de pequeños circuitos. Se evalúa una expresión (la que sigue a la palabra with) y de acuerdo al valor que tome se le asigna a la señal la respuesta de una expresión. Veamos su sintaxis: with expresión select señal <= expresión1 when valor1, expresión2 when valor2, expresión3 when valor3, ............ expresiónN when valorN ; Esta sentencia requiere que se especifique todos los posibles valores que puede tomar la expresión a evaluar, por lo que generalmente la sentencia se escribe de la siguiente manera: with expresión select señal <= expresión1 when valor1, expresión2 when valor2, expresión3 when valor3, ............ expresiónN when others; Con la palabra others se está cubriendo el resto de valores que no han sido especificados en la sentencia. Veamos algunos ejemplos: compuerta AND:

with A select C <= B when ‟1‟ „0‟ when „0‟;
Asumimos que A sólo puede tomar los valores de „0‟ y „1‟ (tipo bit);

-

multiplexor de 2 a 1:

with SEL select Z <= A when „0‟, B when others;
Asumimos que SEL puede tomar otros valores a parte de „0‟ y „1‟ (tipo std_logic).

-

Decoder de 2 a 4:

with E select Y <= “1110” when “00”, “1101” when “01”, “1011” when “10” “0111” when others;

A. Granados/ D.Utrilla

8

Laboratorio No1

UNMSM – FIE

Diseño Digital

Implementación sencilla – uso de led y botón.
a. Inicie el programa Project-Navigator de Xilinx. Seleccione File  New Project.... b. Se creará un proyecto nuevo en la carpeta C:\Tutorial .

c. Seleccionar las características del dispositivo a utilizar:

A. Granados/ D.Utrilla

9

Laboratorio No1

UNMSM – FIE

Diseño Digital

d. Avanzar las siguientes ventanas hasta que tenga la siguiente apariencia:

e. Cree un módulo VHDL con el nombre de led_butt.vhd seleccionando el menú Project  New Source...

A. Granados/ D.Utrilla

10

Laboratorio No1

UNMSM – FIE

Diseño Digital

f. Asignamos el nombre de la arquitectura y definimos las entradas y salidas de la entidad.

g. Pulse el botón Siguiente y añada al archivo creado las siguientes sentencias:

La señal led toma el valor „1‟ cuando la señal boton=‟1‟ caso contrario la señal led tomará el valor de „0‟. La señal enable siempre vale „1‟.

A. Granados/ D.Utrilla

11

Laboratorio No1

UNMSM – FIE

Diseño Digital

h. Verifique la sintaxis, si contiene errores es el momento de corregirlos:

Seleccione el proceso de Síntesis-XST y ejecute el comando Process  Run i. Ingrese al editor de dependencias para asignar los pines de I/O de la entidad en el FPGA.

Seleccione la ficha Ports del editor y asigne los siguientes pines:

Grabar y cerrar el editor de dependencias.

A. Granados/ D.Utrilla

12

Laboratorio No1

UNMSM – FIE

Diseño Digital

j.

Ejecutar el proceso “Place and Routing” para colocar las ecuaciones lógicas del circuito (producto de la síntesis) teniendo en cuenta las asignaciones de los recursos realizadas en el paso anterior.

Revisar el archivo led_butt.pad (opción Pad Report) para verificar si la asignación de las entradas y salidas de la entidad corresponden a los pines del FPGA.

k. Para generar el archivo Bitstream (led_butt.bit) seleccione la opción de propiedades del proceso Generate Programming File.

A. Granados/ D.Utrilla

13

Laboratorio No1

UNMSM – FIE

Diseño Digital

Seleccione primero la ficha Startup options y seleccione en la casilla Start-Up Clock la opción JTAG Clock.

Luego seleccione la ficha Readback options y seleccione la casilla Create Mask File. Pulse finalmente Aceptar y Run para ejecutar el programa: Configura Device (iMPACT).

A. Granados/ D.Utrilla

14

Laboratorio No1

UNMSM – FIE

Diseño Digital

l.

Si la tarjeta está conectada al puerto paralelo se reconocerá el dispositivo de manera automática. Seleccione al dispositivo que se muestre en la siguiente figura y pulse el comando Operations  Program

Pulse OK y espere a que el proceso de Configuración y verificación finalice. Usted puede seleccionar sólo configuración quitando en la casilla la opción Verify.

A. Granados/ D.Utrilla

15

Laboratorio No1

UNMSM – FIE

Diseño Digital

m. Si el proceso finalizó correctamente, se debe mostrar el siguiente mensaje.

n. El FPGA ha sido configurado correctamente. Verifique el funcionamiento del circuito pulsando el botón-1 (BTN1) y visualice que se enciende el led (LD1).

A. Granados/ D.Utrilla

16

Laboratorio No1

UNMSM – FIE

Diseño Digital

IMPLEMENTACIÓN DE CIRCUITOS COMBINACIONALES EN EL MÓDULO FPGA
Todos los circuitos diseñados serán implementados en la tarjeta de desarrollo DigiLab 2SB y la tarjeta Digilab Digital I/O 4 que provee entradas y salidas para la tarjeta DigiLab 2SB. Entre las principales características del módulo Digilab 2SB tenemos: Basado en un FPGA Spartan II de Xilinx (XC2S200PQ208) con 200K compuertas y 350MHz de operación. 143 líneas disponibles para entrada / salida en 6 conectores de expansión. Zócalo para añadir una memoria FLASH. 2 reguladores de 18.v y 3.3v para alimentación. Un oscilador de 50MHz y otro zócalo para un segundo oscilador. Puerto de programación JTAG. Botón y Led para operaciones básicas de entrada / salida.

Entre las características del módulo Digilab Digital IO 4 tenemos: - 4 display a 7 segmentos del tipo ánodo común. - 8 leds que se manejan de manera individual. - Puerto PS2 para mouse ó teclado. - 1 puerto VGA de 3 bits. - 4 botoneras. - 8 switches.

principales

A. Granados/ D.Utrilla

17

Laboratorio No1

UNMSM – FIE

Diseño Digital

Cuando se conectan el módulo D2SB con el módulo DIO4 tenemos el siguiente circuito esquemático:

Podemos apreciar los pines utilizados del FPGA y los dispositivos electrónicos conectados a ellos, con esta información podemos asignar los pines en el momento de realizar la implementación del circuito en el módulo de desarrollo.

A. Granados/ D.Utrilla

18

Laboratorio No1

UNMSM – FIE

Diseño Digital

Utilice las asignaciones concurrentes a señales (ACS) únicas, condicional y selectiva vistas en clase para implementar los siguientes circuitos:

1. Existe una familia conformado por el Padre (P), la Madre (M), un hijo (O) y una hija (A). Ellos tienen un problema cada fin de semana a la hora de ir a cenar. Se le pide que Ud. diseñe un circuito que tome la decisión por ellos: CHIFA (0) o POLLERIA (1). El circuito a diseñar debe tomar la decisión bajo las siguientes condiciones:  Si mamá o papa’ están de acuerdo, ellos toman la decisión.  Si no están de acuerdo, la mayoría manda.  Si hay empate el circuito elige por defecto a la POLLERIA.

2. Implementar un codificador BCD con prioridad. El circuito tiene las entradas desde E1,E2,…..E9 y las salidas Z3, Z2, Z1 y Z0. E9 E8 E7 E6 E5 E4 E3 E2 E1 Z3 Z2 Z1 Z0 1 X X X X X X X X 1 0 0 1 0 1 X X X X X X X 1 0 0 0 0 0 1 X X X X X X 0 1 1 1 …………. 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

3. Implemente un circuito aritmético que realice las siguientes operaciones: OP 00 01 10 11 Operación FA+B FA–B FA+1 FA–1

Las entradas A y B como la salida F son vectores de 8 bits.

4. Implemente un circuito que active una alarma (Z) cuando ocurran las siguientes condiciones:   El sensor de Fuego (F) se active y las Puertas (P) se encuentren cerradas. El sensor de Puertas (P) estén abiertas junto con el sensor de ventanas (V)

A. Granados/ D.Utrilla

19

Laboratorio No1

UNMSM – FIE

Diseño Digital

5. Diseñe un circuito que compare 2 números de 4 bits c/u (A y B). El circuito debe tener 3 salidas: una debe indicar si ambos números son iguales (A =B), otra salida indica si un numero es mayor que otro (A > B) y la ultima salida indica que es menor (A < B).

6. Diseñe un circuito que compare 2 números de 4 bits c/u (A y B). El circuito debe tener 3 salidas: una debe indicar si ambos números son iguales (A =B), otra salida indica si un numero es mayor que otro (A > B) y la ultima salida indica que es menor (A < B).

7. Implemente un circuito generador de paridad par de un conjunto de datos de 8 bits. El circuito debe tener 8 entradas y 9 salidas (las mismas 8 entradas más el bit de paridad par).

NOTA: Presentar los informes en la siguiente semana de clase. Es importante mostrar las simulaciones respectivas.

A. Granados/ D.Utrilla

20

Laboratorio No1