Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

29
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS FACULTAD DE INGENIERÍA ELECTRÓNICA ESCUELA DE INGENIERÍA ELECTRÓNICA DISEÑO DIGITAL LABORATORIO No1 INTRODUCCIÓN A LAS HERRAMIENTAS DE SÍNTESIS Y USO DEL ESTILO FLUJO DE DATOS PARA EL DISEÑO E IMPLEMENTACIÓN EN FPGA DE CIRCUITOS COMBINACIONALES

description

diseño

Transcript of Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Page 1: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOSFACULTAD DE INGENIERÍA ELECTRÓNICAESCUELA DE INGENIERÍA ELECTRÓNICA

DISEÑO DIGITAL

LABORATORIO No1

INTRODUCCIÓN A LAS HERRAMIENTAS DE SÍNTESIS Y USO DEL ESTILO FLUJO DE DATOS

PARA EL DISEÑO E IMPLEMENTACIÓN EN FPGA DE CIRCUITOS COMBINACIONALES

Profesores: Ing. Alfredo Granados Ly.

Page 2: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)
Page 3: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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.

Page 4: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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.

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ónbegin

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).

Page 5: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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.

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.

Page 6: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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 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:

Page 7: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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.

Page 8: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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

Page 9: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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.

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;

Page 10: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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“10111111” when ENTRADA = “110” else

“01111111” ;Y <= TEMPORAL when ENA =’1’ else “11111111”;

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:

Page 11: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

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;

Page 12: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

USO DEL MAX+ PLUS II EN LA IMPLEMENTACIÓN DE CIRCUITOS DIGITALES

Ingrese al Max+Plus II:

Seleccione el comando File -- New

Page 13: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Escriba el siguiente programa:

Guarde el programa asignándole como nombre de archivo igual que el nombre de la entidad. El archivo debe tener la extensión VHD. Para eso seleccione la casilla de Automatic Extensión .VHD

Page 14: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Compile el programa previamente seleccione: File-Project–Set Project to Current File

Ahora si puede compilar. Seleccione: Max+Plus II - Compiler

Si el programa no tiene errores se mostrará el siguiente mensaje:

Si es que indica algún tipo de error debe corregirlos antes de pasar al siguiente punto. A continuación vamos a simular el circuito diseñado.

Page 15: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Lo primero que realizamos es crear los estímulos. Seleccione: Max+Plus II–Waveform Editor. Le aparecerá la siguiente ventana:

Pulse un clic derecho en el centro de la ventana, apareciendo la siguiente ventana:

Seleccione Enter Nodes from SNF… apareciendo la siguiente ventana:

Page 16: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Pulse el botón List y los nodos disponibles selecciónelos pulsando el botón: => Pulse OK.Debe tener la siguiente forma de señales de entrada y salida:

Como puede notar todas las entrada se les asigna por defecto el valor 0 y las salidas tienen un valor indeterminado. Debemos asignar los valores que deseamos que tomen las entradas en función del tiempo. Para esto contamos con los siguientes botones:

Coloca a un nivel bajo.

Coloca a un nivel alto.

Describe un nivel indefinido.

Describe una alta impedancia.

Invierte la señal.

Señal de reloj.

Asigna un valor de cuenta a un nodo o grupo tomando como referencia el tamaño del paso.

Page 17: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Para asignar un valor en un determinado tiempo para un nodo, sólo debemos de arrastrar el ratón pulsando el botón izquierdo por todo el intervalo de tiempo que deseamos fijar y posteriormente pulsar uno de los botones descritos anteriormente.

Pulse este botón para ajustar todo el tiempo de simulación (por defecto es de 0ns a 1us).

Debe tener la siguiente presentación:

Seleccione el nodo e y pulse clic derecho, mostrándose el siguiente menú:

Con esta opción separa el grupo e en bits de manera individual mostrándose la siguiente ventana:

Page 18: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Para saber cual es el menor tiempo que podemos asignar un valor seleccionamos del menú Options el comando: Grid Size mostrándose la siguiente ventana:

Podemos cambiar el tamaño del Grid a 20ns.

Para asignar un valor en un determinado tiempo para un nodo, sólo debemos de arrastrar el ratón pulsando el botón izquierdo por todo el intervalo de tiempo que deseamos fijar y posteriormente pulsar uno de los botones descritos anteriormente.

Por ejemplo, seleccione el tiempo 200ns a 500ns en el nodo e2 y pulse el botón se mostrará la siguiente ventana:

Vamos a asignarles valores de señales periódicas. Para eso seleccione el nodo e0 y pulse el botón:

Aparecerá la siguiente ventana:

Page 19: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Pulse el botón OK mostrándose la siguiente salida:

Ahora con lo aprendido hasta el momento realice las siguientes asignaciones de estímulos a las señales de entrada:

Para lograr los valores que toma el nodo sel se utilizó el botón

Mostrándose la siguiente ventana:

Page 20: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Ahora si ya tiene el aspecto del diagrama de tiempos anterior ya podemos simularlo. Previamente debemos guardar este archivo de simulación como:

Pulse OK y luego seleccione: Max+Plus II y luego el comando: Simulator aparecerá la siguiente ventana:

Page 21: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Pulse START apareciendo el siguiente resultado:

Pulse Aceptar y luego en la ventana del Simulador pulse el botón Open SCF Mostrádose el resultado de la simulación:

Como puede apreciar la señal z de salida toma el valor de la señal e0 cuando el valor de la señal sel toma el valor de 00. Lo mismo pasa para las otras señales.

Repita el mismo procedimiento para los siguientes programas:

1. Decodificador de 3 a 8 con habilitador.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity DEC3A8_ENA is Port ( A : in std_logic; B : in std_logic; C : in std_logic; ENA : in std_logic; Y : out std_logic_vector(7 downto 0));end DEC3A8_ENA;

architecture Behavioral of DEC3A8_ENA issignal ENTRADA: std_logic_vector(2 downto 0);signal SALIDAS: std_logic_vector(7 downto 0);

begin

Page 22: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

ENTRADA <= C & B & A;

with ENTRADA select SALIDAS <= "00000001" when "000", "00000010" when "001", "00000100" when "010", "00001000" when "011", "00010000" when "100", "00100000" when "101", "01000000" when "110", "10000000" when others;

Y <= SALIDAS when ENA='1' else (others=>'0');

end Behavioral;

2. ALU de 8 bits.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ALU_8BITS is Port ( A,B : in std_logic_vector(7 downto 0); OPER : in std_logic_vector(2 downto 0); Z : out std_logic_vector(7 downto 0));end ALU_8BITS;

architecture Behavioral of ALU_8BITS isbegin

with OPER select Z <= A + B when "000", A - B when "001", A + 1 when "010", A - 1 when "011", A and B when "100", A or B when "101", A xor B when "110", not A when others;

end Behavioral;

3. Registro con carga y desplazamiento de 1 bit.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity LOAD_SHIFT is Port ( DATA : in std_logic_vector(7 downto 0); SEL : in std_logic_vector(1 downto 0); Q : buffer std_logic_vector(7 downto 0));end LOAD_SHIFT;

architecture Behavioral of LOAD_SHIFT isbegin

with SEL select Q <= DATA when "00",DATA(6 downto 0)&'0' when "01",'0'&DATA(7 downto 1) when "10",

Page 23: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

Q when others;

end Behavioral;

4. Conversor de número binario de 4 bits a BCD.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity binario_bcd is Port ( DATA : in std_logic_vector(3 downto 0); BCD0 : out std_logic_vector(3 downto 0); BCD1 : out std_logic);end binario_bcd;

architecture Behavioral of binario_bcd issignal TEMP: std_logic_vector(4 downto 0);

beginTEMP <= '0'&DATA when DATA < 10 else

"10000" when DATA = 10 else "10001" when DATA = 11 else "10010" when DATA = 12 else "10011" when DATA = 13 else "10100" when DATA = 14 else "10101";

BCD1 <= TEMP(4);BCD0 <= TEMP(3 downto 0);

end Behavioral;

5. Decodificador a 7 segmentos de tipo ánodo común.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity DEC7SEG is Port ( DATA : in std_logic_vector(3 downto 0); DISPLAY : out std_logic_vector(6 downto 0));end DEC7SEG;

architecture Behavioral of DEC7SEG isbegin

--gfedcbaWITH DATA SELECT DISPLAY <= "1000000" WHEN "0000",

"1111001" WHEN "0001","0100100" WHEN "0010","0110000" WHEN "0011","0011001" WHEN "0100","0010010" WHEN "0101","0000011" WHEN "0110","1111000" WHEN "0111","0000000" WHEN "1000","0011000" WHEN "1001","1111111" WHEN OTHERS;

end Behavioral;

Page 24: Laboratorio No1 - Diseño Digital -UNMSM (2012-II)

6. Detector de paridad impar de un número de 8 bits.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity DET_IMPAR is Port ( DATA : in std_logic_vector(7 downto 0); Z : out std_logic);end DET_IMPAR;

architecture Behavioral of DET_IMPAR isbegin

Z <= DATA(7) xor DATA(6) xorDATA(5) xor DATA(4) xorDATA(3) xor DATA(2) xorDATA(1) xor DATA(0);

end Behavioral;

7. Comparador de 4 bits

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity comparador is Port ( A : in std_logic_vector(3 downto 0); B : in std_logic_vector(3 downto 0); IGU : out std_logic; MAY : out std_logic; MEN : out std_logic);end comparador;

architecture Behavioral of comparador isbegin

IGU <= '1' when A = B else '0';MAY <= '1' when A > B else '0';MEN <= '1' when A < B else '0';

end Behavioral