Está en la página 1de 23

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERA ELECTRNICA


ESCUELA DE INGENIERA ELECTRNICA

DISEO DIGITAL
LABORATORIO No1 - 2

INTRODUCCIN A LAS HERRAMIENTAS DE


SNTESIS Y USO DEL ESTILO FLUJO DE DATOS PARA
EL DISEO E IMPLEMENTACIN EN FPGA DE
CIRCUITOS COMBINACIONALES

Profesores: Ing. Alfredo Granados Ly.


UNMSM FIEE Diseo Digital

1. Unidades de diseo.

En un programa VHDL hay dos bloques bsicos: La entidad y la arquitectura.

Entidad: La entidad, nos sirve para relacionar nuestro diseo con el mundo
exterior, es decir, analizamos lo que tratamos de crear como una "caja negra",
de la que slo conocemos sus entradas, salidas y la disposicin de las mismas.
Sintaxis:

entity identificador is
[genricos]
[puertos]
end [identificador];

Nota: lo que se encuentra entre corchetes [] se considera que su uso es opcional.

Cada seal en una declaracin de entidad est referida a un puerto (o grupo de


seales), el cual es anlogo a un(os) pin(es) del smbolo esquemtico. Un
puerto es un objeto de informacin, 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 vlido.

La declaracin de un puerto consta de:


- nombre: identifica a un pin de la entidad
- modo: indica el flujo de la seal.
- 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 slo lectura (no se puede escribir).
- out: es de slo 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.

Ing. Alfredo Granados Ly 2 Laboratorio No1


UNMSM FIEE Diseo Digital

Slo para fines de simulacin todo puerto puede tener un valor por defecto que
determina el valor inicial de la seal, los puertos de entrada pueden dejarse
desconectados si tienen un valor por defecto.

Arquitectura: En la declaracin 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 declaracin
begin
sentencias concurrentes;
sentencias concurrentes;
sentencias concurrentes;
end nombre;

Para describir una arquitectura podemos utilizar tres estilos, teniendo cada uno
su propio nivel de abstraccin:
- Estilo algortmico (behavioral)
- Estilo flujo de datos (dataflow)
- Estilo estructural (structure)

Cada estilo est basado en sentencias concurrentes que determinan el grado


de abstraccin del circuito a disear, as tenemos que el estilo algortmico 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 seal y el estilo
estructural que permite interconectar componentes ya elaborados.

La descripcin de una arquitectura se compone de un conjunto de sentencias


concurrentes que se ejecutan en forma asncrona entre s y se comunican
mediante seales. Estos procesos que se ejecutan concurrentemente deben
poder comunicarse (sincronizarse) entre ellos. El elemento necesario para
comunicar dos procesos es la seal (signal).

En cada uno de los estilos de modelado se utiliza la sentencia de asignacin de


seales: <=, para esto hay que tener en cuenta que:

- Las seales a ambos lados del operador de asignacin (<=) deben ser
del mismo tipo.
- Si hay varias asignaciones a la misma seal en un mismo proceso,
prevalece el valor de la ltima asignacin.
- Las asignaciones a seales pueden aparecer en sentencias concurrentes
(estilo flujo de datos) o sentencias secuenciales (estilo algortmico).

En la arquitectura las sentencias concurrentes hacen referencia en todo


momento a seales, estas seales pueden ser puertos. La seal es un tipo de

Ing. Alfredo Granados Ly 3 Laboratorio No1


UNMSM FIEE Diseo Digital

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 seal a la entrada del circuito
siempre que duren un tiempo menor al retardo de propagacin de la
compuerta y despus retraza la seal. El retardo de tipo transporte no filtra
slo retraza la seal.

Ing. Alfredo Granados Ly 4 Laboratorio No1


UNMSM FIEE Diseo Digital

Analicemos la siguiente sentencia concurrente:

En el grfico 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 grfico anterior se puede apreciar que la seal B llega retrazada a C en 5


ns. La expresin :
Z <= A and C; no tiene la clusula 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 seal es muy pequeo (aproximadamente 0).

Tipo: El VHDL es un lenguaje de programacin donde los objetos a utilizar


(seales, 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 slo puede tomar los valores: '0' y '1'. Este es un tipo
bsico y con el ya podemos crear puertos y nodos internos para interconectar

Ing. Alfredo Granados Ly 5 Laboratorio No1


UNMSM FIEE Diseo Digital

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 aritmticas (slo lgicas) ya
que no hay implementadas funciones para tal fin con este tipo y tampoco
pueden unirse ms de una seal sobre salidas de varios circuitos porque el tipo
bit tampoco tiene asociado una funcin que permita resolver las mltiples
asignaciones a un mismo objeto. Por esta razn 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 descripcin 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 prrafo 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

Ing. Alfredo Granados Ly 6 Laboratorio No1


UNMSM FIEE Diseo Digital

STD_LOGIC_UNSIGNED. En el paquete STD_LOGIC_1164 encontramos la


declaracin de tipos y subtipos de datos, funciones de conversin de un tipo a
otro. En el paquete STD_LOGIC_ARITH encontramos funciones aritmticas,
lgicas y de relacin 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 aritmticas sin tener en cuenta los bits de signo.

2. ESTILO FLUJO DE DATOS PARA EL DISEO DE CIRCUITOS


COMBINACIONALES

Este estilo se caracteriza por utilizar las asignaciones concurrentes a seales


(ACS). Tenemos 3 tipos de ACS:
- ACS nica
- ACS condicional
- ACS selectiva

Estas sentencias terminan asignando un valor a una seal despus de evaluar


toda una expresin, esta evaluacin se realiza cuando ocurre un evento en una
de las seales que se encuentran a la derecha del smbolo de asignacin a
seal (<=).

ACS nica: se basa en expresiones muy parecidas a las ecuaciones booleanas,


en la mayora de los casos se expresan en suma de trminos producto.
Sintaxis:
seal <= expresin;

en la expresin pueden aparecer valores, seales, operadores lgicos o


aritmticos. 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 condicin y


dependiendo de la respuesta terminan asignando el resultado de la expresin a
la seal.
Sintaxis:
seal <= expresin1 when condicin1 else expresin2;

En la declaracin anterior, si la condicin1 es verdadera entonces la seal toma


el resultado de la expresin1, caso contrario (si condicin1 es falsa) entonces la
seal toma el resultado de la expresin2.

La sintaxis de la ACS condicional en su forma general es:

seal <= expresin1 when condicin1 else


expresin2 when condicin2 else
expresin3 when condicin3 else

Ing. Alfredo Granados Ly 7 Laboratorio No1


UNMSM FIEE Diseo Digital

........
expresinN when condicinN else expresinM ;

En la declaracin anterior se nota que hay una prioridad en la asignacin a


seal, por ejemplo para que la seal tome el resultado de la expresin3 debe
cumplirse que la condicin1 y condicin2 sean falsas y la condicin3 sea
verdadera. La prioridad la tiene la condicin1, si esta no se cumple se pasa a
evaluar la condicin2, si esta no se cumple se pasa a evaluar la condicin3 y
as sucesivamente se evalan todas las condiciones hasta que cumpla alguna
de ellas.

Hay que aclarar que siempre se termina evaluando una expresin y asignando
la respuesta a la seal as no se cumpla ninguna condicin.

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;

Ing. Alfredo Granados Ly 8 Laboratorio No1


UNMSM FIEE Diseo Digital

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


pequeos circuitos. Se evala una expresin (la que sigue a la palabra with) y
de acuerdo al valor que tome se le asigna a la seal la respuesta de una
expresin. Veamos su sintaxis:

with expresin select seal <= expresin1 when valor1,


expresin2 when valor2,
expresin3 when valor3,
............
expresinN when valorN ;

Esta sentencia requiere que se especifique todos los posibles valores que
puede tomar la expresin a evaluar, por lo que generalmente la sentencia se
escribe de la siguiente manera:

with expresin select seal <= expresin1 when valor1,


expresin2 when valor2,
expresin3 when valor3,
............
expresinN 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 slo puede tomar los valores de 0 y 1 (tipo bit);
- multiplexor de 2 a 1:

Ing. Alfredo Granados Ly 9 Laboratorio No1


UNMSM FIEE Diseo Digital

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;

Ing. Alfredo Granados Ly 10 Laboratorio No1


UNMSM FIEE Diseo Digital

USO DEL MAX+ PLUS II EN LA IMPLEMENTACIN DE CIRCUITOS DIGITALES

Ingrese al Max+Plus II:

Seleccione el comando File -- New

Ing. Alfredo Granados Ly 11 Laboratorio No1


UNMSM FIEE Diseo Digital

Escriba el siguiente programa:

Guarde el programa asignndole como nombre de archivo igual que el nombre de la


entidad. El archivo debe tener la extensin VHD. Para eso seleccione la casilla de
Automatic Extensin .VHD

Ing. Alfredo Granados Ly 12 Laboratorio No1


UNMSM FIEE Diseo Digital

Compile el programa previamente seleccione: File-ProjectSet 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 algn tipo de error debe corregirlos antes de pasar al siguiente punto. A
continuacin vamos a simular el circuito diseado.

Ing. Alfredo Granados Ly 13 Laboratorio No1


UNMSM FIEE Diseo Digital

Lo primero que realizamos es crear los estmulos. Seleccione: Max+Plus IIWaveform


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:

Ing. Alfredo Granados Ly 14 Laboratorio No1


UNMSM FIEE Diseo Digital

Pulse el botn List y los nodos disponibles seleccinelos pulsando el botn: => Pulse OK.
Debe tener la siguiente forma de seales 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 funcin 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 seal.

Seal de reloj.

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

Para asignar un valor en un determinado tiempo para un nodo, slo debemos de arrastrar el
ratn pulsando el botn izquierdo por todo el intervalo de tiempo que deseamos fijar y
posteriormente pulsar uno de los botones descritos anteriormente.

Pulse este botn para ajustar todo el tiempo de simulacin (por defecto es de 0ns
a 1us).

Ing. Alfredo Granados Ly 15 Laboratorio No1


UNMSM FIEE Diseo Digital

Debe tener la siguiente presentacin:

Seleccione el nodo e y pulse clic derecho, mostrndose el siguiente men:

Con esta opcin separa el grupo e en bits de manera individual mostrndose la siguiente
ventana:

Ing. Alfredo Granados Ly 16 Laboratorio No1


UNMSM FIEE Diseo Digital

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

Podemos cambiar el tamao del Grid a 20ns.

Para asignar un valor en un determinado tiempo para un nodo, slo debemos de


arrastrar el ratn pulsando el botn 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 botn


se mostrar la siguiente ventana:

Vamos a asignarles valores de seales peridicas. Para eso seleccione el nodo e0 y pulse
el botn:

Aparecer la siguiente ventana:

Pulse el botn OK mostrndose la siguiente salida:

Ing. Alfredo Granados Ly 17 Laboratorio No1


UNMSM FIEE Diseo Digital

Ahora con lo aprendido hasta el momento realice las siguientes asignaciones de


estmulos a las seales de entrada:

Para lograr los valores que toma el nodo sel se utiliz el botn

Mostrndose la siguiente ventana:

Ahora si ya tiene el aspecto del diagrama


de tiempos anterior ya podemos simularlo.
Previamente debemos guardar este archivo
de simulacin como:

Ing. Alfredo Granados Ly 18 Laboratorio No1


UNMSM FIEE Diseo Digital

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


siguiente ventana:

Pulse START apareciendo el siguiente resultado:

Pulse Aceptar y luego en la ventana del Simulador pulse el botn Open SCF Mostrdose
el resultado de la simulacin:

Ing. Alfredo Granados Ly 19 Laboratorio No1


UNMSM FIEE Diseo Digital

Como puede apreciar la seal z de salida toma el valor de la seal e0 cuando el valor de
la seal sel toma el valor de 00. Lo mismo pasa para las otras seales.

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 is


signal ENTRADA: std_logic_vector(2 downto 0);
signal SALIDAS: std_logic_vector(7 downto 0);
begin
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;

Ing. Alfredo Granados Ly 20 Laboratorio No1


UNMSM FIEE Diseo Digital

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 is


begin
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 is


begin

with SEL select Q <= DATA when "00",


DATA(6 downto 0)&'0' when "01",
'0'&DATA(7 downto 1) when "10",
Q when others;

end Behavioral;

4. Conversor de nmero 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 is


signal TEMP: std_logic_vector(4 downto 0);
begin
TEMP <= '0'&DATA when DATA < 10 else
"10000" when DATA = 10 else
"10001" when DATA = 11 else
"10010" when DATA = 12 else

Ing. Alfredo Granados Ly 21 Laboratorio No1


UNMSM FIEE Diseo Digital

"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 comn.


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 is


begin
--gfedcba
WITH 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;

6. Detector de paridad impar de un nmero 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 is


begin

Z <= DATA(7) xor DATA(6) xor


DATA(5) xor DATA(4) xor
DATA(3) xor DATA(2) xor
DATA(1) xor DATA(0);

end Behavioral;

7. Comparador de 4 bits
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

Ing. Alfredo Granados Ly 22 Laboratorio No1


UNMSM FIEE Diseo Digital

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 is


begin

IGU <= '1' when A = B else '0';


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

end Behavioral

Ing. Alfredo Granados Ly 23 Laboratorio No1

También podría gustarte