Multiplexor

7
Sergio Rodríguez Molina Ing. Sistemas III año

Transcript of Multiplexor

Page 1: Multiplexor

Sergio Rodríguez Molina

Ing. Sistemas III año

Page 2: Multiplexor

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 con varias entradas y una salida de datos, y están dotados de entradas de control capaces de seleccionar una de las entradas de datos para permitir su transmisión desde la entrada 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

Page 3: Multiplexor

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.

Page 4: Multiplexor

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"

Page 5: Multiplexor

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

Page 6: Multiplexor

Entidad 4: Qué hacer para que tenga más canalesAl 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.

Page 7: Multiplexor

Arquitectura 1: Estilo algorítmico  o de comportamiento usando la entidad 4

12345678910 1112 13 1415 16 17 18 19202122

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 isbeginprocess (a, b, c, control, enable)beginif 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 programaEmpieza el programaCabecera de un procesoEmpieza el proceso  Sentencia if     Sentencia elsif      Sentencia case                  Acaba sentencia case  Acaba sentencia if y elsif Acaba el procesoFinaliza 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.