You are on page 1of 42

Instituto Tecnolgico Superior de Teziutln 1

PRCTICAS DE MECATRONICA
CDIGO
3

N PRCTICA

DAC
REA DE
CONOCIMIENTO

ELT
LABORATORIO
DE
ELECTRNICA

NOMBRE DE LA PRCTICA:
Multiplexores y Demultiplexores
Parte 1: Material para el alumno
Objetivos de aprendizaje
Realizar la implementacin fsica en una CPLD con VHDL de circuitos que
funcionen con Multiplexores y demultiplexores.

Actividad(es) de aprendizaje
Usar Quartus II para elaborar funciones booleanas y programar un CPLD para que
el estudiante evalu funciones booleanas definidas en formas cannicas y no
estndar.

Materias relacionadas

Ninguna

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 2

PARTES Y EQUIPO REQUERIDO


DESCRIPCIN

No. DE PARTE

Equipo de cmputo con puertos USB.


Software con IDE Quartus II Altera
Programador USB Blaster
Led (1)
Resistencias de 10k (7)
Resitencia de 100 (1)
Botones pulsadores (7)
Tarjeta con CPLD Altera

PRECAUCIONES Y MEDIDAS DE SEGURIDAD

El responsable debe asegurar que ninguna persona no autorizada trabaje


con o en el equipo.
Nunca deje objetos extraos en el rea de trabajo (cables, pinzas,
desarmadores, etc.).
Solo utilice el material adecuado para la operacin que valla a realizar.
Maneje con cuidado herramientas y piezas con bordes afilados para evitar
heridas.
No use ropa suelta durante la realizacin de la prctica.
Si tiene algn problema con el funcionamiento del equipo o herramienta que
utiliza, pida ayuda a su docente o al encargado del laboratorio.
Reporte cualquier anomala a su docente o al encargado del laboratorio.

ELABOR:

REVIS:

AUTORIZ:

M.S.C. MIGUEL MONTIEL

ACADEMIA DE INGENIERA

JEFE DE CARRERA

MARTNEZ

MECATRNICA

INGENIERA MECATRNICA

NOMBRE Y FIRMA

NOMBRE Y FIRMA

NOMBRE Y FIRMA

FECHA

FECHA

FECHA

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 3

ndice de contenido
Introduccin................................................................................................................4
Antecedentes.............................................................................................................5

Arquitectura..................................................................................................... 5
Bloques lgicos............................................................................................ 5
Matriz de trminos producto y su distribucin.............................................5
Macroceldas.................................................................................................. 6
Multiplexores................................................................................................. 7
Sntesis de funciones lgicas mediante multiplexores..................................9
Sntesis de multiplexores mediante la Expansin de Shannon...................10
Demultiplexores.......................................................................................... 12
TestBench probando los diseos en VHDL..................................................13
Modelado Estructural con VHDL..................................................................18
Desarrollo.................................................................................................................22

Creacin de un proyecto en Quartus II...........................................................22


Asignacin de seales concurrentes...........................................................23
Simulacin con UMHDL............................................................................... 25
Compilacin del Proyecto en Quartus II......................................................29
Compilando el circuito................................................................................... 31
Programacin del dispositivo......................................................................31
Asignacin de Seal Seleccionada..............................................................33
Implementacin de Multiplexor por medio de sentencia CASE y PROCESS.34
Trabajando funciones con Multiplexores modelado Estructural...................36
BIBLIOGRAFIA...........................................................................................................41

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 4

Introduccin
Los CPLD extienden el concepto de un PLD (del acrnimo ingls
Programmable Logic Device) a un mayor nivel de integracin ya que
permite implementar sistemas ms eficaces, ya que utilizan menor
espacio, mejoran la fiabilidad del diseo, y reducen costos. Un CPLD se
forma con mltiples bloques lgicos, cada uno similar a un PLD. Los
bloques lgicos se comunican entre s utilizando una matriz programable
de interconexiones, lo cual hace ms eficiente el uso del silicio,
conduciendo a una mejor eficiencia a menor costo. A continuacin se
explican brevemente las principales caractersticas de la arquitectura de
un CPLD.

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 5

Antecedentes
Estas estructuras extienden el concepto de de PLD a un nivel de integracin
superior; esto es, se dispone de mayor nmero de puertas y de
entradas/salidas en un circuito programable (con lo que se disminuye el
tamao del diseo, el consumo y el precio). En vez de hacer estos circuitos con
mayor nmero de trminos producto por macrocelda, o de mayor nmero de
entradas/salidas, cada CPLD contiene bloques lgicos, cada uno de ellos similar
a una estructura PAL o GAL. Estos bloques lgicos se comunican entre s por
medio de interconexiones programables, con lo que se optimizan los recursos
incorporados en el chip. Interconexiones programables.(Dueck, 2011)
Las interconexiones programables, conducen las seales de los dispositivos de
entrada/salida (I/O) hacia los bloques lgicos. Cada uno de estos bloques tiene un
nmero predeterminado de entradas.
La mayora de Ias CPLDs utilizan una de las siguientes estrategias para la
implementacin de la interconexin programable:

Interconexin basada en estructura matricial.

Interconexin basada en multiplexores.

Arquitectura
Bloques lgicos
Un bloque lgico equivale a una pequea estructura PAL: Dispone de una matriz
que implementa trminos producto y macroceldas. Las celdas de I/O son a veces
consideradas parte de un bloque lgico. El tamao de un bloque lgico es una
medida de su capacidad (cuanta lgica se puede implementar) y se expresa,
habitualmente en trminos del nmero de macroceldas, el nmero de entradas y el
nmero de trminos producto, as de cmo su distribucin.

Matriz de trminos producto y su distribucin


Adems del tamao de la matriz (importante par identificar el nmero de trminos
producto promedio por macrocleda), es interesante conocer la distribucin por
macroceldas.
La familia MAX3 est organizada de forma que cada macrocelda tiene cuatro
trminos producto fijos por macrocelda. Adems dispone de una serie de trminos
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 6


producto (expander product terms) que se pueden asociar a una o varias
macroceldas. Si este trmino se utiliza por una nica macrocelda se denomina
"product-term steering", mientras que si se puede utilizar por varias a la vez se
denomina "product-term sharing". Versiones ms evolucionadas de este concepto
se encuentran en las familias MACH de Advanced Micro Devices o en la familia
7000 de Altera

Macroceldas
Como en las PLD ms sencillas; las CPLD incluyen macroceldas en las que se
dispone de biestables y seales de control de polaridad4. Adems se aumenta
la flexibilidad de las mismas. Por ejemplo muchas CPLDs ofrecen la posibilidad
de configurar los biestables como tipo D o T, para mejorar el proceso de
implementacin. Adems los CPLDs suelen disponer de macroceldas de I/O
(esto es, asociada con una entrada/salida) y macroceldas con salidas slo a la
matriz programable (buried macrocell).
Veamos algunos ejemplos. La familia MAX340 dispone de una macrocelda con
un alto grado de configurabilidad. La suma de trminos producto sirve como
entrada de una puerta o-exclusiva, mientras que la otra entrada es un nico
trmino producto5. De esta forma se puede configurar la polaridad de la salida.
Tambin se puede seleccionar la seal de reloj de la macrocelda, o configurar
el biestable como T, JK o RS. La salida de la macrocelda tambin se puede
configurar como puramente combinacional o a travs de un biestable.

Esta salida puede ser realimentada a la matriz programable, tanto a nivel


local6 como a nivel global.
La familia MAX340 dispone de macroceldas ocultas (buried7); esto es, que no
estn disponibles en las entradas/salidas. Son idnticas a las asociadas a las
I/O excepto que sus salidas slo se utilizan para la realimentacin de la matriz
programable.
Un ejemplo de CPLD en las que las macroceldas internas son distintas a las
asociadas a las lneas de I/O lo encontramos en la familia Flash370.

Otras macroceldas con una funcin especializada son las macroceldas de


entrada, que son utilizadas para dotar al dispositivo de unas lneas adicionales
de entrada, que pueden tener funciones tales como seales de reloj, entradas

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 7

de la matriz programable, etc. (Jara & Maxinez, 2003; Morillo, 2006;


pyroelectro, 2011)

Multiplexores
Un circuito multiplexor tiene varias entradas de datos, una o ms entradas de
seleccin y una salida. Pasa el valor de seal de una de las entradas de datos a
la salida. La entrada de datos se elige mediante los valores de las entradas de
seleccin.(Brown, 2006)

Ilustracin 1: Mux 2 a 1
En la Ilustracin 1 se muestra un multiplexor dos a uno. En el inciso a) se
presenta el smbolo que suele usarse para representar un multiplexor. La entrada
select t (seleccin), s, elige como salida del multiplexor cualquiera de las entradas
w0 o w1 . La funcionalidad del multiplexor queda descrita con una tabla de verdad,
como se muestra en el inciso b) de la figura. En el inciso c) se presenta una
implementacin en suma de productos del multiplexor dos a uno, y en el inciso d
d) se ilustra cmo construirlo con compuertas de transmisin.
En la Ilustracin 2 se describe un multiplexor ms grande con cuatro entradas de
datos, w0 , . . ., w3 , y dos entradas de seleccin, s1 y s0 . Como se muestra en la
tabla de verdad del inciso b) de la figura, los nmeros de dos bits representados
por s1 s0 escogen una de las entradas de datos como la salida del multiplexor. En el

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 8


inciso c) aparece una implementacin en suma de productos de un multiplexor
cuatro a uno.

Ilustracin 2: Mux 4 a 1
Esa implementacin realiza la funcin multiplexora:

f =s1 s0 w0 + s1 s 0 w1 +s 1 s0 w 2+ s 1 s0 w 3
Es posible construir multiplexores mas grandes a partir de multiplexores mas
pequeos; de modo general el numero de entrada de datos n, es una potencia
entera de dos, Un multiplexor con n entradas de datos w 0, ...wn-1 requiere (log2 n)
entradas de seleccin.

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 9

Ilustracin 3: Mux 4 a 1 a partir de mux 2


a1
Sntesis de funciones lgicas mediante multiplexores
Los multiplexores pueden usarse de una forma mas general para sintetizar
funciones lgicas Considrese por ejemplo la Ilustracin 4, donde la tabla de
verdad define la funcin

f =w 1w2 la cual puede implementarse por medio de

un multiplexor de 4 a 1 en el que los valores de f de cada fi la de la tabla de verdad


se conectan como constantes a las entradas de datos del multiplexor. Las entradas
de seleccin del multiplexor son manejadas por w1 y w2. Por lo tanto, para
combinacin de w1w2 , la salida f es igual al valor de la funcin en la fila
correspondiente de la tabla de verdad.
La anterior es una implementacin directa, sin embargo no es la mas adecuada.
Una mejor forma, puede derivarse al manipular la tabla de verdad como se indica
en el inciso b), lo cual permite que f se implemente con solo un multiplexor de 2 a
uno. Una de las seales de entrada se elije como entrada de seleccin del
multiplexor. La tabla de verdad se dibuja de nuevo para indicar el valor de f para
cada valor de w1 (entrada). Esto lleva a que f tendr el valor de w 2 si w1 = 0, y f
tendr el valor de ~w2 si w1 = 0.

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 10

Ilustracin 4: Funcin implementada con


Multiplexor
Sntesis de multiplexores mediante la Expansin de Shannon
Las implementaciones de funciones lgicas con multiplexores requieren que una
funcin se descomponga en trminos de las variables empleadas como entradas
de seleccin. Esto se logra mediante un teorema propuesto por Claude Shannon. El
cual menciona que toda expresin booleana f(w1, w2, , wn) puede escribirse en la
forma:

f (w1, w2, ... , wn)=w1f (0, w 2, ..., w n)+ w1f (1, w2, ... , wn )
Esta expansin puede efectuarse en trminos de cualquiera de las n variables.
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 11


Por ejemplo, sea

f (w1 , w2 , w3 )=w1 w2 +w 1 w 3 +w2 w 3 de la cual al aplicar la

expansin de Shannon, se obtiene lo siguiente:

f (w1 , w2 , w3 )= w1 (0w2 +0w3 + w2 w3 )+ w1 (1w2 +1w 3+ w2 w 3)


f (w 1 , w 2 , w3)=w1 (w2w3)+ w1 (w 2+ w3 + w2 w3 )
f (w1 , w 2 , w 3)= w1 (w 2w 3)+w 1 (w2 + w31+w 2w3 )
factorizando w3
f (w1 , w2 , w3)=w1( w2w3)+ w1 (w 2+ w3(1+w 2))
f (w 1 , w 2 , w 3)= w1 ( w2w 3)+w 1 (w 2+ w3(1))
f (w 1 , w 2 , w 3)=w1 ( w2w 3)+ w1 (w 2+ w3 )
El circuito se muestra en la Ilustracin 5

Ilustracin 5: Implementacin de funcin booleana


con Teorema de expansin de Shannon

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 12

Demultiplexores
El propsito del circuito multiplexor es multiplexar r las n entradas de datos en la
salida de datos bajo el control de las entradas de seleccin. Un circuito que realiza
la funcin opuesta, es decir, que coloca el valor de una sola entrada de datos en
varias salidas, se llama demultiplexor.
Un demultiplexor puede implementarse con un circuito decodificador. Por ejemplo,
un decodificador de 2 a 4 de la Ilustracin 6 puede usarse como un demultiplexor
uno a cuatro.

Ilustracin 6: Decodificador 2 a 4
En este caso la entrada EN, funciona como la entrada de datos del demultiplexor y
las salidas y0 , , y3 funcionan como la salida de los datos. Las combinaciones de
las entradas w1w0 definen cual de las salidas se establecer al valor de EN.
En general, un circuito decodificador de n a 2 n puede usarse como un
demultiplexor uno a n, pero en la practica un decodificador no se usa como demux.
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 13

TestBench probando los diseos en VHDL


Una vez que se tiene un diseo en VHDL, no sabemos a ciencia cierta el
funcionamiento del mismo. Para comprobarlo, se realiza la elaboracin de un
archivo de prueba denominado TestBench.

Ilustracin 7: Modelo de Testbench en VHDL


Con VHDL, no solo es posible modelar el hardware, sino adems, generar una
secuencia de estmulos, los cuales permitirn analizar los resultados.
TestBench para un multiplexor
La declaracin de una entidad para un banco de pruebas (test bench) se declara
generalmente vacia, y eso es por que en s, el test bench no tiene entradas o
salidas. Los vectores de prueba se inyectan a travs del Dispositivo Bajo Prueba.
Componentes
La declaracin de un componente es necesaria, ya que tiene la finalidad de jalar
la entidad mux4_1 en el banco de pruebas. Piense que la declaracin del
componente es como colocar el soquet de un circuito. (vase la Ilustracin 7).
A fin de que el simulador VHDL pueda hacer encajar la entidad mux4_1 en el
componente mux4_1, los nombres y los tipos de los puertos, deben coincidir entre
la entidad y el componente.

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 14


A continuacin se coloca una plantilla para el testbench de nuestro simulador

Tabla 1 Plantilla para la elaboracin de testbench sencillos


entity TEST_MUX4 is
end;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
architecture BENCH of TEST_MUX4 is
component MUX4
...
end component;
-- signals
begin
-- signal assignments to create stimulus
M: MUX4 port map (...);
end BENCH;

Escribiendo un TestBench
Un testbench es un modelo que es usado para verificar un modelo de hardware, el
cual tiene tres propsitos:
1. Generar estimulos para la simulacin ( formas de onda).
2. Aplicar estos estmulos a la entidad bajo prueba y monitorear las respuestas
de salida.
3. Comparar las respuestas de salida con los esperados.
Una forma tpica de un testbench la cual controla a un dispositivo bajo prueba es la
siguientes

entity TEST_BENCH is
end;

architecture TB_BEHAVIOR of TEST_BENCH is


component ENTITY_UNDER_TEST
port(lista de puertos sus tipos y modelos);
end component;
Declaracin de seales locales;

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 15


begin
Genera las formas de onda usando constructos de comportamiento;
Aplicar al DUT;
EUT: ENTITY_UNDER_TEST port map( asociaciones de los puertos);
Monitorear valores y comparar con los valores esperados;
end TB_BEHAVIOR;

La aplicacin de un estmulo a la entidad bajo prueba se completa


automticamente en el instante en el que la entidad en el testbench.

Generacin de formas de onda

Existen dos enfoques principales para la generacin de estmulos:


1. Crear formas de onda y aplicar estimulos a determinados intervalos de
tiempo.
2. Generar estmulos basados en el estado de la entidad, esto es, basados en
las respuestas de salida de la entidad.

Patrn Repetitivo

Un patrn repetitivo consiste en un delay on-off constante, el cual puede ser


creado usando una seal concurrente por asignacin.

A <= not A after 20 ns; --Se asume que la seal es de tipo bit

Una seal de reloj con periodo on-off variable puede ser creado usando una
sentencia proceso, por ejemplo:

Seal D_CLK de tipo bit

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 16

process
constant OFF_PERIOD: TIME :=30 ns;
constant ON_PERIOD: TIME:= 20 ns;
begin
wait for OFF_PERIOD;
D_CLK <= '1';
wait for ON_PERIOD;
D_CLK <= '0';
end process;

Ilustracin 8: Patrn repetitivo


Un problema con este tipo de enfoque, es que si la simulacin no tiene manera de
controlar el tiempo que dura la simulacin, el proceso temrinar hasta que llegue
al valor lmite, ocasionando un gran desperdicio de tiempo. Una forma de evitar
esto, es por medio de la instruccin ASSERT, lo cual ocasionara un error despus
de un tiempo especfico. Por ejemplo:

assert(NOW <= 100 ns)


report Simulacin completada exitosamente
severity ERROR;

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 17

Una forma alternativa de generar una seal de reloj con un periodo variable es
usando una seal de asignacin condicional:

D_CLK <= '1' after OFF_PERIOD when D_CLK = '0' else


'0' after ON_PERIOD;

Un conjunto secuencial de valores pueden ser generados por una seal usando
mltiples formas de onda en una asignacin de seal concurrente. Por ejemplo:

RESET <= '0','1' after 100ns, '0' after 180 ns, '1' after 210 ns;

Lo cual generar la siguiente forma de onda

La anterior forma de onda puede hacerse repetitiva al colocar la seal de


asignacin dentro de un proceso. El siguiente ejemplo de un reloj de doble fase
muestra como se repite esta forma de onda

signal CLK1, CLK2: MVL :='0';

TWO_PHASE: process
begin
CLK1 <= 'U' after 5 ns, '1' after 10 ns, 'U' after 20 ns, '0' after 25 ns;

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 18


CLK2 <= 'U' after 10 ns, '1' after 20 ns, 'U' after 25 ns, '0' after 30 ns;

wait for 35 ns;


end process;

Ilustracin 9: Reloj de dos fases


Modelado Estructural con VHDL
Es necesaria la conformacin de bloques dentro del diseo digital, una forma de
conectar multiples mdulos con la finalidad de elaborar una implementacin
jerrquica, es por medio de el modelado estructural, como ejemplo se tiene la
implementacin del siguiente circuito generador de paridad de 9 bits (Bhasker,
1999).

Ilustracin 10: Generador de paridad de 9 bits


Ntese que se tiene un conjunto de 9 entradas, 8 compuertas xor de dos entradas,
una compuerta inversora, siete seales intermedias y dos salidas, que son la
paridad.
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 19


Cabe aclarar que se hace realmente necesaria la implementacin de una seal
ms, la cual se denominar h1.
Primero se crea el archivo vhdl que representa a la funcin xor de dos entradas

Tabla 2 Compuerta XOR de dos entradas


--------------------------------------------------------------------------------- Company : ITS Teziutln Acadmia Ing. Mecatrnica
-- Engineer: Miguel Montiel Mtz
--- Create Date:
21/07/2015 01:00:21
-- Project Name:
xor2
-- Module Name:
xor2.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para unsigned

entity xor2 is
port(
a,b : in bit;
z
: out bit
);
end xor2;
architecture arq1 of xor2 is
begin
z <= a xor b;
end arq1;

Ahora se representa la funcin VHDL del inversor

Tabla 3 Compuerta Inversora


--------------------------------------------------------------------------------- Company : ITS Teziutln Acadmia Ing. Mecatrnica
-- Engineer: Miguel Montiel Mtz
--- Create Date:
21/07/2015 01:03:25
-- Project Name:
inv2
-- Module Name:
inv2.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para unsigned

entity inv2 is
port(
a :in bit;
z :out bit
);
end inv2;

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 20


architecture arq1 of inv2 is
begin
z <= not a;
end arq1;

Ahora se elabora la estructura del archivo VHDL del generador de paridad, para
ello tengase en mente la Ilustracin 10.

Tabla 4 Generador de Paridad de 9 bits


--------------------------------------------------------------------------------- Company : ITS Teziutln
-- Engineer: Miguel Montiel Mtz
--- Create Date:
21/07/2015 00:59:17
-- Project Name:
Estructura1
-- Module Name:
Estructura1.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para unsigned

entity Estructura1 is
port(
d : in bit_vector (8 downto 0);
par : out bit;
impar: out bit
);
end Estructura1;
architecture arq1 of Estructura1 is
--declaracion de los componentes
component xor2
port (a,b: in bit; z: out bit);
end component;
component inv2
port(a: in bit; z: out bit);
end component;
-- seales que conectan a las diferentes compuertas
signal e0,e1,e2,e3,f0,f1,h0,h1: bit;
begin
XE0: xor2 port map(d(0), d(1), e0);
XE1: xor2 port map(d(2), d(3), e1);
XE2: xor2 port map(d(4), d(5), e2);
XE3: xor2 port map(d(6), d(7), e3);
XF0: xor2 port map(e0, e1, f0);
XF1: xor2 port map(e2, e3, f1);
XH0: xor2 port map(f0, f1, h0);
Xpar: xor2 port map(h0, d(8), h1);
Ximpar: inv2 port map(h1, impar);
par <= h1;
end arq1;

Finalmente se desarrolla el banco de pruebas para esta nueva entidad creada

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 21

Tabla 5 Banco de Pruebas para generador de paridad


--------------------------------------------------------------------------------- Company : ITS Teziutln Ing Mecatrnica
-- Engineer: Miguel Montiel Mtz
--- Create Date:
21/07/2015 00:59:17
-- Project Name:
Estructura1
-- Module Name:
Estructura1_tb.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para signed, unsigned

entity Estructura1_tb is
end
Estructura1_tb;
architecture Testbench of Estructura1_tb is
-- Component Declaration for the Unit Under Test (UUT)
component Estructura1
port(
d : in bit_vector (8 downto 0);
par : out bit;
impar: out bit
);
end component;
--Seales de conexion al componente
signal d : bit_vector(8 downto 0);
signal par,impar : bit;
begin
-- Instantiate the Unit Under Test (UUT)
uut: Estructura1 port map (d,par, impar);
d(0) <= not
d(1) <= not
d(2) <= not
d(3) <= not
d(4) <= not
d(5) <= not
d(6) <= not
d(7) <= not
d(8) <= not
end Testbench;

d(0)
d(1)
d(2)
d(3)
d(4)
d(5)
d(6)
d(7)
d(8)

after
after
after
after
after
after
after
after
after

1 ns;
2 ns;
4 ns;
8 ns;
16 ns;
32 ns;
64 ns;
128 ns;
256 ns;

Este banco de pruebas genera una secuencia de paridad par e impar, la cual a su
vez es complementaria, y que al visualizarla con gtkwave, se mostrarn las seales
de entrada y su respectiva paridad. Vase la Ilustracin 10.
Puede verse adems que en la simulacin en el panel SST la uut (unidad bajo
prueba unit under test) se encuentra compuesta por las seales internas
declaradas en el archivo testbench.

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 22

Ilustracin 11: Salidas del generador de paridad de 9 bits

Desarrollo
Creacin de un proyecto en Quartus II
1. Da clic en File New Project Wizard y en la ventana que abre, da clic en
siguiente

2. Elije una ruta para guardar tu proyecto, y dale un nombre al mismo, en


este caso, se utiliza el nombre de Multiplexor. Presiona el botn FINISH

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 23

3. Al dar clic en la secuencia File New, aparece una ventana como la que
se muestra a continuacin y presiona Finish.
4. Da clic en File New y
5. Del cuadro selecciona Desing Files VHDL File

6. La accin anterior abrir un panel, en el cual podrs escribir tu cdigo en


VHDL; la forma en que se puede esctructurar un multiplexor son
mltiples. A continuacin se mostrarn algunas de las formas en las que
se puede construir un multiplexor en VHDL

Asignacin de seales concurrentes

7. Recuerde que la forma que tiene una seal concurrente es la siguiente:


__signal <= __expresin;
8. Este formato permite la descripcin de una funcin booleana que
describe al multiplexor 4 a 1
9. A continuacin escribe el siguiente cdigo fuente
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 24

Tabla 1 Multiplexor en formato concurrente


--------------------------------------------------------------------------------- Company : Instituto Tecnolgico Superior de Teziutlan - Mecatrnica
-- Engineer: Miguel Montiel Mtz
--- Create Date:
13/07/2015 13:55:41
-- Project Name:
mux4_1
-- Module Name:
mux4_1.vhd
-- Description:
--- Additional Comments:
--------------------------------------------------------------------------------- mux4.vhd
-- Multiplexor 4 a 1
-- Direcciona una de cuatro seales de entrada (d0 a d3) hacia la salida
-- dependiendo del estado de los bits de seleccion
ENTITY mux4_1 is port(
d0,d1,d2,d3 : in bit;
--s
s0,s1
: in bit;
y
END mux4_1;

: in bit_vector (1 downto 0);


: out bit);

architecture mux4to1 of mux4_1 is


begin
-- Asignacion de seales concurrentes
y<= ((not(s1)) and (not(s0)) and d0)
or ((not(s1)) and s0 and d1)
or (s1 and (not s0) and d2)
or (s1 and s0 and d3);
end mux4to1;

10.El multiplexor que se muestra a continuacin tendr las seales


siguiente:

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 25

11.La respuesta esperada ante los estmulos que se muestran a


continuacin es la siguiente:

Simulacin con UMHDL


12. Abrir el programa UMHDL
13.generar el testbench o banco de pruebas para el multiplexor (en la Tabla
2)

Tabla 2 Testbench para el multiplexor 4 a 1


--------------------------------------------------------------------------------- Company : ITS Teziutlan
-- Engineer: Miguel Montiel Mtz
--- Create Date:
13/07/2015 13:55:41

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 26


-- Project Name:
mux4_1
-- Module Name:
mux4_1_tb.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------ENTITY mux4_1_tb is
END mux4_1_tb;
ARCHITECTURE muxtb OF mux4_1_tb is
COMPONENT mux4_1
PORT(
d0,d1,d2,d3 : in bit;
--s
s0,s1
: in bit;
y
END COMPONENT;

: in bit_vector (1 downto 0);


: out bit);

SIGNAL d0,d1,d2,d3: bit;


SIGNAL s0,s1: bit;
SIGNAL y: bit;
BEGIN
u0: mux4_1
d0 <=
d1 <=
d2 <=
d3 <=

PORT MAP (d0,d1,d2,d3,s0,s1,y);


'1' after 0 ns, '0' after 5 ns,
'1' after 0 ns, '0' after 10 ns,
'1' after 0 ns, '0' after 20 ns,
'1' after 0 ns, '0' after 40 ns,

s0 <= '0' after 0 ns, '1' after 1 ns,


s1 <= '0' after 0 ns, '1' after 2 ns,
END muxtb;

'1'
'1'
'1'
'1'

after
after
after
after

10
20
40
80

ns,
ns,
ns,
ns,

'0' after 2 ns,


'0' after 4 ns,

'0'
'0'
'0'
'0'

after
after
after
after

'1' after
'1' after

15
30
60
90

ns;
ns;
ns;
ns;

4 ns;
8 ns;

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 27

14.Los intervalos de tiempo para la simulacin se definen en la instancia u0


15.Dado que por defecto la simulacin del software genera un tiempo de
30000 us, el cual generara un archivo .vcd muy grande, se reconfigura
desde la opcin Opciones >> Configurar .. (vase la Ilustracin 12)

Ilustracin 12: Opciones para configurar UMDHL para GHDL


16.En este caso, el tiempo de paro de la simulacin es de 30 us indicado
por medio del argumento adicional stop-time = 30us
17.Dar clic en Compilar el proyecto actual del men ejecucin o en el icono
del martillo
18.Verificar que no exista errores en la compilacin, en caso de haberlas,
revisa la pestaa errores.

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 28

19.Dar clic en el cono Compilar y simular el proyecto actual, el cual es una


engrane de color verde.
20.Dar clic en el cono Revisar las formas de onda resultantes...
21.Este ltimo paso abre el programa GTKwave

Ilustracin 13: GTKWave con las seales de la simulacin propuesta


22.Ahora con la ventana de GTKWave abierta, arrastrar las seales y tipo
hacia el panel Signals

Ilustracin 14: Seales simuladas, sin ajuste en el


tiempo

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 29

23.Para una visualizacin adecuada de las seales, Time >> Zoom >>
Zoom best fit

Ilustracin 15: Simulacin del multiplexor 4 a 1 con GHDL


Compilacin del Proyecto en Quartus II
24.De clic en el men Assignments >> Device para elegir la CPLD que se
encuentra en la persiana Family del cuadro Device que se abri
25.El dispositivo a utilizar es de la Familia MAX II y en el cuadro inferior
Available Devices, se ecoge la CPLD EPM240T100C5 y dar clic en OK
26.De clic en el men Assignments >> Pin Planner para escoger las
terminales que va a conectar de su dispositivo. (vase la Ilustracin 16).

Ilustracin 16: Distribucin de terminales para el multiplexor


27.Los textos que colocamos son los de la columna Location
28.Finalizada la edicin de las conexiones, dar clic en File >> Close
29.En la Ilustracin 17 se muestra la conexin de la tarjeta CPLD en circuito
protoboard.
30.Recuerde que la alimentacin de la CPLD es de 3.3V y no de 5V.
31.La conexin de los pushbuttons es de tipo lgica negativa

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 30

Ilustracin 17: Conexin de CPLD con dispositivos para la prctica de


multiplexores
32.Ahora hay que definir que hacer con las conexiones no usadas para el
circuito.
33.Para este paso, dar clic en men Assignments >> Device, lo cual abre
un nuevo cuadro, donde existe el botn Device and Pin Options

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 31

Ilustracin 18: Configuracin de pines sin uso


34.Esto abre un nuevo cuadro, donde la categoria Unused Pins tiene la
opcin por defecto: As output driving ground
35.Dar clic en el comboBox que esta habilitado por defecto y selecciona As
Input tri-stated with weak pull-up.
36.Dar clic en Ok y nuevamente en Ok

Compilando el circuito
37.Para la compilacin se presiona el botn RUN y el cual har que se inicie
el proceso de compilacin y sntesis

Programacin del dispositivo


38.Para llevar a cabo la programacin del CPLD, debe conectar primero el
programador JTAG a la tarjeta y hacia el puerto USB.
39.Dar clic en el menu Tools >> Programmer ..
40.Al realizar este paso, se abre una nueva ventana, la cual permite la
grabacin de la estructura lgica diseada en VHDL.
41.En caso de que no aparezca el dispositivo seleccionado, o que exista otro
dispositivo en la cadena JTAG, borre el dispositivo para el segundo caso,
y/o agregue un nuevo elemento, es decir el CPLD MAX II EMP240
42.Para el primer caso, selecciona el dispositivo y da clic en el botn borrar,
que esta en el panel izquierdo.
43.Para agregar un dispositivo, selecciona Add File
44.Del cuadro que aparece, selecciona la carpeta Output_files
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 32

45.Selecciona el archivo mux4_1.pof con un doble clic o con un clic sobre el


botn Open
46.Da un clic sobre las casillas de verificacin Program/Configure

47.Solo resta dar clic en el botn Start 1

1 Para el caso de ArchLinux y probablemente en Ubuntu, hay problema con los


permisos de usuario normal, que apesar de la definicin de reglas de reglas en
udev, el programador no responde, para arreglar este problema un workaround se
propone por Carl (2013), donde se menciona que hay que matar primero al
demonio jtagd de la siguiente manera
$ sudo killall -9 jtagd

# Kill jtagd, ...

$ sudo killall -9 jtagd

# ...and verify jtagd is indeed not running.

jtagd: no process found

# Good, verified.

$ sudo jtagconfig

# Will also start jtagd as root

ahora resta correr el jtagconfig como usuario normal y verificar que as lo haga,
cierra el Quartus y abrelo de nueva cuenta para trabajar.
Se puede revisar el link http://iemontiel.blogspot.mx/2015/07/grabando-un-cpldaltera-en-manjaro.html donde existe una explicacin a mayor detalle.
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 33

Asignacin de Seal Seleccionada


48.El multiplexor 4 a 1 puede ser descrito en VHDL de la siguiente manera

Tabla 3
--------------------------------------------------------------------------------- Company : ITS Teziutlan
-- Engineer: Miguel Montiel Martinez
--- Create Date:
17/07/2015 01:16:38
-- Project Name:
mux4_1b
-- Module Name:
mux4_1b.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity mux4_1b
port(
d
s
y
);
end mux4_1b;

-- Para std_logic
-- Para unsigned

is
: in bit_vector(3 downto 0);
: in bit_vector(1 downto 0);
: out bit

architecture arq1 of mux4_1b is


begin
M: with s select
y <=
d(0) when "00",
d(1) when "01",
d(2) when "10",
d(3) when others;
end arq1;

49. Y el banco de pruebas es el siguiente

Tabla 4
--------------------------------------------------------------------------------------- Company : ITS Teziutlan
---- Engineer: Miguel Montiel Mtz
------- Create Date:
17/07/2015 01:16:39
---- Project Name:
mux4_1b
---- Module Name:
mux4_1b_tb.vhd
---- Description:
------- Additional Comments:
--------------------------------------------------------------------------------------ENTITY mux4_1b_tb is
--END mux4_1b_tb;
---ARCHITECTURE muxtb OF mux4_1b_tb is
-- COMPONENT mux4_1b
-PORT(
-d
: in bit_vector (3 downto 0);

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 34


-s
: in bit_vector (1 downto 0);
-y
: out bit);
-- END COMPONENT;
--- SIGNAL d: bit_vector(3 downto 0);
-- SIGNAL s: bit_vector(1 downto 0);
-- SIGNAL y: bit;
--- BEGIN
-u0: mux4_1b PORT MAP (d,s,y);
-d(0) <= '1' after 0 ns, '0' after 1 ns, '1' after 2 ns, '0' after 3
-d(1) <= '1' after 0 ns, '0' after 2 ns, '1' after 4 ns, '0' after
-d(2) <= '1' after 0 ns, '0' after 4 ns, '1' after 8 ns, '0' after
-d(3) <= '1' after 0 ns, '0' after 8 ns,'1' after 16 ns, '0' after 32
--s(0) <= '0' after 0 ns,'1' after 8 ns,'0' after 16 ns, '1' after
-s(1) <= '0' after 0 ns, '1' after 16 ns, '0' after 32 ns;
--END muxtb;

ns;
8 ns;
16 ns;
ns;
24 ns;

50.Verifique que la salida del multiplexor sea la siguiente

Implementacin de Multiplexor por medio de sentencia CASE y PROCESS


51.La implementacin del multiplexor es la siguiente:

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 35

Tabla 5
--------------------------------------------------------------------------------- Company : ITS Teziutlan
-- Engineer: Miguel Montiel Mtz
--- Create Date:
18/07/2015 13:00:54
-- Project Name:
mux4_1c
-- Module Name:
mux4_1c.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity mux4_1c
port(
d
s
y
);
end mux4_1c;

-- Para std_logic
-- Para unsigned

is
: in bit_vector(3 downto 0);
: in bit_vector(1 downto 0);
: out bit

architecture arq1 of mux4_1c is


begin
process (s)
begin
case s is
when "00"
when "01"
when "10"
when "11"
end case;
end process;

=>
=>
=>
=>

y
y
y
y

<=
<=
<=
<=

d(0);
d(1);
d(2);
d(3);

end arq1;

52.Y el testbench es el siguiente

Tabla 6
--------------------------------------------------------------------------------- Company : ITS Teziutlan
-- Engineer: Miguel Montiel Mtz
--- Create Date:
18/07/2015 13:00:54
-- Project Name:
mux4_1c
-- Module Name:
mux4_1c_tb.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para signed, unsigned

entity mux4_1c_tb is
end
mux4_1c_tb;

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 36


architecture Testbench of mux4_1c_tb is

);

-- Component Declaration for the Unit Under Test (UUT)


component mux4_1c
port(
d
: in bit_vector(3 downto 0);
s
: in bit_vector(1 downto 0);
y
: out bit
end component;

signal d : bit_vector(3 downto 0);


signal s : bit_vector(1 downto 0);
signal y : bit;
begin
u0: mux4_1c PORT
d(0) <= not
d(1) <= not
d(2) <= not
d(3) <= not

MAP (d,s,y);
d(0) after 1
d(1) after 2
d(2) after 4
d(3) after 8

ns;
ns;
ns;
ns;

s(0) <= not s(0) after 8 ns;


s(1) <= not s(1) after 16 ns;
assert(NOW <= 50 ns)
report "Simulacin completada exitosamente"
severity ERROR;
end Testbench;

Trabajando funciones con Multiplexores modelado Estructural


53.La estructura jerrquica de VHDL permite la implementacin de
funciones a travs de multiplexores.
54. sea

f (w1 , w2 , w3 )=w1 w2 +w 1 w 3 +w2 w 3 de la cual al aplicar la expansin de

Shannon, se obtiene lo siguiente:

f (w1 , w2 , w3 )= w1 (0w2 +0w3 + w2 w3 )+ w1 (1w2 +1w 3+ w2 w 3)


f (w 1 , w 2 , w3)=w1 (w2w3)+ w1 (w 2+ w3 + w2 w3 )
f (w1 , w 2 , w 3)= w1 (w 2w 3)+w 1 (w2 + w31+w 2w3 )
factorizando w3
f (w1 , w2 , w3)=w1( w2w3)+ w1 (w 2+ w3(1+w 2))
f (w 1 , w 2 , w 3)= w1 ( w2w 3)+w 1 (w 2+ w3(1))
f (w 1 , w 2 , w 3)=w1 ( w2w 3)+ w1 (w 2+ w3 )
55. El circuito se muestra en la Ilustracin 5

56.El circuito contiene un multiplexor 2 a 1, una compuerta or de dos


terminales y una compuerta and de dos terminales, siendo la entrada w 1
la que se conecte a la entrada selectora.

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 37

57.El circuito en VHDL es el que se describe a continuacin

Tabla 7 multiplexor 2 a 1 linea


--------------------------------------------------------------------------------- Company : Instituto Tecnolgico Superior de Teziutln - Mecatrnica
-- Engineer: Miguel Montiel Martnez
--- Create Date:
21/07/2015 09:26:58
-- Project Name:
mux2_1
-- Module Name:
mux2_1.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para unsigned

entity mux2_1 is
port(
d : in bit_vector(1 downto 0);
s : in bit;
-- seleccion
y : out bit --salida
);
end mux2_1;

-- datos

architecture arq1 of mux2_1 is


begin
M: with s select
y <= d(0) when '0',
d(1) when '1';
end arq1;

Tabla 8 Implementacin de la funcin con multiplexor


--------------------------------------------------------------------------------- Company : Instituto Tecnolgico Superior de Teziutln - Mecatrnica
-- Engineer: Miguel Montiel Martnez
--- Create Date:
21/07/2015 16:57:47
-- Project Name:
Funcion1
-- Module Name:
Funcion1.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para unsigned

entity Funcion1 is
port(
w1,w2,w3 : in bit;
f
: out bit
);
end Funcion1;
architecture arq1 of Funcion1 is
--declaracin de componentes

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 38


component mux2_1
port(
d : in bit_vector(1 downto 0);
s : in bit;
-- seleccion
y : out bit --salida
);
end component;

-- datos

--Seales para cableado del circuito interno


signal e : bit_vector(1 downto 0);
begin
e(0) <= w2 and w3;
e(1) <= w2 or w3;
u0: mux2_1 port map(e,w1,f);
end arq1;

Tabla 9 Testbench para la funcin


--------------------------------------------------------------------------------- Company : Instituto Tecnolgico Superior de Teziutln - Mecatrnica
-- Engineer: Miguel Montiel Martnez
--- Create Date:
21/07/2015 16:57:48
-- Project Name:
Funcion1
-- Module Name:
Funcion1_tb.vhd
-- Description:
--- Additional Comments:
-------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

-- Para std_logic
-- Para signed, unsigned

entity Funcion1_tb is
end
Funcion1_tb;
architecture Testbench of Funcion1_tb is
-- Component Declaration for the Unit Under Test (UUT)
component Funcion1
port(
w1,w2,w3 : in bit;
f
: out bit
);
end component;
signal w1,w2,w3,f : bit;
begin
-- Instantiate the Unit Under Test (UUT)
uut: Funcion1 port map (w1,w2,w3,f);
w1 <= not w1 after 1 ns;
w2 <= not w2 after 2 ns;
w3 <= not w3 after 4 ns;
end Testbench;

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 39

58.La salida lgica de este sistema implementado por medio de


multiplexores es la siguiente:

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 40

Actividades
1. Elabora un banco de pruebas para el multiplexor bajo los siguientes
criterios de simulacin
1. Cada canal de entrada de datos del multiplexor ser seleccionado en
una secuencia ascendente al aplicar un conteo binario a las entradas
de seleccin.
2. Cada entrada de datos, deber ser fcilmente reconocida al tener
una firma en su forma de onda.
3. La forma de onda de salida, deber desplegar una serie nica de
formas de onda, la cual indica la seleccin del canal de datos en una
correcta secuencia
4. Los tiempos propuestos son:

Tabla 10 tiempos propuestos para el testbench


Tiempo Final

100 us

S[1..0]

25 us

D3

1 us

D2

2 us

D1

0.5 us

D0

4 us

2. Verifique los cuatro tipos de elaborar un multiplexor 4 a 1 en VHDL con


este testbench propuesto.
3. Utilice mutliplexores para evaluar los puntos que se muestran en la 40,
tanto de forma prctica, as como simulada.

Tabla 11 Actividades de la prctica


Num

Funcin

Valor solicitado

Respuesta

F( A , B , C , D, E , F , G)=(0,3,5,23,56,77,89,100,101) F(23)
F(45)
F(34)
F(88)

PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 41

F(100)
2

F( A , B , C , D)=(0,1,2,5,7,12,15)

F(0)
F(7)
F(15)
F(2)

F( A , B , C , D, E , F)=( AB 'DF )+(C 'E)'( A ' + EF ' ) F(0)


F(3)
F(27)
F(33)
F(45)
F(55)
F(62)

BIBLIOGRAFIA
Bhasker, J. (1999). A VHDL Primer (Vol. 1). Prentice Hall.
Brown, S. A. (2006). Fundamentos de lgica digital con diseo VHDL (Vol. 1).
McGraw-Hill.
Dueck, R. (2011). Digital Design with CPLD Applications and VHDL (2 edition).
Clifton Park, NY: Delmar Cengage Learning.
Jara, J. A., & Maxinez, D. G. (2003). VHDL El Arte de Programar Sistemas Digitales.
Cecsa.
Morillo, N. (2006, February 22). Fundamentos Sistemas Digitales. Retrieved
December 13, 2010, from about:blank
PR-MEC-ELT-LE

Instituto Tecnolgico Superior de Teziutln 42

pyroelectro. (2011). An Introduction To FPGA And CPLD: The Intro [Tutoriales de


electronica]. Retrieved from
http://www.pyroelectro.com/edu/fpga/introduction/
user2746930. (2013, September 9). linux - Unable to lock chain (Insufficient port
permissions) - Stack Overflow. Retrieved June 4, 2015, from
http://stackoverflow.com/questions/18704913/unable-to-lock-chaininsufficient-port-permissions

PR-MEC-ELT-LE

You might also like