2. Un multiplexor es un dispositivo
lógico que recibe información
por sus dos o más entradas (de
uno o mas bits de ancho) y
mediante una señal de control
decidimos cual de la entradas
aparece reflejada en la salida;
esto es, un convertidor de
paralelo a serie. Si tienen una
señal de "enable" esta hace
que el multiplexor esté
habilitado o no.
Los multiplexores son circuitos combinacionales convarias entradas y una salida de datos, y están dotados deentradas de control capaces de seleccionar una de lasentradas de datos para permitir su transmisión desde laentrada seleccionada a la salida que es única.
Fecha: 1870
Utilidad: Dispositivo que puede recibir varias entradas y
transmitirlas por un medio de transmisión compartido.
Inventor: Émile Baudot
3. Entidad 1: Multiplexor de un bit y dos canales
sin "enable"
entity multiplexor is port(
a,b : in bit;
control : in bit;
enable : in bit;
c : out bit
);
end multiplexor;
En este caso, las entradas
son a y b, la señal de control
es control, la señal de
enable esenable, y la salida
es c. Todas vuelven a ser de
un bit de ancho.
Este primer ejemplo es el más sencillo de todos ya que no se puede concebir un multiplexor
con menos operatividad. Usaremos el tipo bit, que viene predefinido por VHDL, y sirve para
indicar que la señal o variable asociada es de un sólo bit. La nomenclatura usada para
designar a los puertos se mantendrá hasta el final de la práctica, no así como el nombre de
la entidad, que lo cambiaremos.
4. entity multiplexor is port(
a,b : in bit;
control : in bit;
enable : in bit;
c : out bit
);
end multiplexor;
En este caso, las entradas
son a y b, la señal de control
es control, la señal de enable
esenable, y la salida es c. Todas
vuelven a ser de un bit de ancho.
Para que el diseño tenga una señal de
enable, y a efectos de la entidad, solamente
debemos incluirla sin más
Entidad 2: Qué hacer para que tenga señal de "enable"
5. entity multiplexor is port(
a,b:in bit_vector(3 down to 0);
control:in bit;
enable :in bit;
c: out bit_vector(3 downto 0)
);
end multiplexor;
En este caso, las entradas son a y b, la
señal de control es control, la señal de
habilitación esenable, y la salida es c.
Ahora, las entradas a y b son de 4 bits de
ancho, pero como sólo son
dos, control debe seguir siendo de un solo
bit. La salida debe aumentar también para
adaptarse a las entradas.
Si queremos que cada entrada (y la salida, por supuesto), tengan más anchura, es decir, más bits, no nos sirve el
tipo bit, ya que su anchura es de un bit. Para ello deberemos usar vectores de bits, que al igual que bit está
predefinida en VHDL. En este ejemplo usaremos entradas de 4 bits, que para definirlos hay que escribir el número
de mayor peso seguido de la palabra Down to y del número de menor peso.
Entidad 3: Qué hacer para que cada canal sea de mas bits
6. Entidad 4: Qué hacer para que tenga más canales
Al igual que cuando queríamos que tuviese señal de
enable, si ahora queremos más canales, a efectos de la
entidad, sólo debemos añadirlos.
control enable d
XX H HHHH
LL L a
LH L b
HL L c
HH L HHHH
entity multiplexor is port(
a,b,c: in bit_vector(3 downto 0);
control:in bit_vector(1 downto 0);
enable: in bit;
d: out bit_vector(3 downto 0);
);
end multiplexor;
En este caso, las entradas son a, b, y c, la
señal de control es control, la señal de
habilitación es enable, y la salida es d. Las
entradas y la salida siguen siendo de 4 bits
de ancho, y al haber mas de
dos, control debe aumentar su anchura a
dos bits.
7. Arquitectura 1: Estilo algorítmico o de comportamiento usando la
entidad 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
entity multi is port(
a, b, c :in bit_vector(3 downto
0);
enable :in bit;
control :in bit_vector(1 downto
0);
d :out bit_vector(3 downto 0)
);
end multi;
architecture archmul of multi is
begin
process (a, b, c, control,
enable)
begin
if enable='1' then d<="1111";
elsif enable='0' then
case control is
when "00" => d <= a;
when "01" => d <= b;
when "10" => d <= c;
when others => d <= "1111";
end case;
end if;
end process;
end archmul;
Cabecera del programa
Empieza el programa
Cabecera de un proceso
Empieza el proceso
Sentencia if
Sentencia elsif
Sentencia case
Acaba sentencia case
Acaba sentencia if y elsif
Acaba el proceso
Finaliza el programa
El estilo algorítmico es una forma de programación en la cual se usan los elementos propios de un lenguaje de
programación, es decir, ciclos for, while, case,... Para un multiplexor, parece hecha a la medida la
sentencia case, y para comprobar si la entrada enable está habilitada un ciclo for. Una forma de implementar el
multiplexor correspondiente a la entidad 4 sería la siguiente:
Debemos ver lo siguiente en este ejercicio:
Entre las líneas 9 y 22 es donde se encuentra toda la operatividad del programa, es
decir que hacemos con las entradas para que se conviertan en las salidas.
En la línea 10 empieza un proceso (process), el cual acaba en la línea 21. Si
alguna de las variables que están dentro del paréntesis cambia, el proceso se
ejecuta. Una vez ejecutado el proceso cambian las señales, no durante él.
En la línea 12 hay una sentencia que acaba en la línea 20. Si se cumple la
condición que está después de la palabra if, se ejecuta lo que está después de la
palabra then. En caso de que la condición no se cumpla, se evalúa lo que está
detrás de la palabra elsif, y si es verdad se ejecuta lo que está después del
segundo else. Si se cumple la primera condición, es decir, que enable valga "1", el
multiplexor pasa a tener a la salida el valor "1111". Si no se cumple, pasa a
ejecutarse una case. Pulsa aquí para ver la sentencia if. Pulsa aquí para ver la
sentencia case.
La sentencia case empieza en la línea 14 y acaba en la 29. Según los valores que
tome control, la salida d tendrá un valor u otro.
Todas las sentencias que se abran deben estar correctamente cerradas con la
palabra clave end. Debemos saber que al cerrar una sentencia if también cerramos
a la vez todas las sentencias elsif asociadas a ese if. Lo mismo ocurre con el
programa principal, el cual debemos cerrar con end y el nombre de la arquitectura.
La sentencia case debe estar siempre dentro de un proceso para que la sintaxis
esté correcta.