[MÚSICA] Hola. Continuamos con Módulo 6. Bloques de circuitos combinacionales. Y partamos con Multiplexores. you sé que vimos Multiplexores, pero vamos a verlos con un poco más de detalle. Entonces, you hemos visto circuitos combinacionales, que son circuitos que no tienen memoria. Eso es lo que hemos visto. Circuitos secuenciales los vamos a ver después, más adelante. Hemos visto combinacionales y hemos aprendido compuertas lógicas, álgebra booleana para manipulación algebraica. Aprendimos optimización y aprendimos números binarios y cómo se representan. Y ahora vamos a subir un nivel más arriba, asumiendo que you podemos diseñar compuertas lógicas que hagan todo lo anterior y vamos a estudiar esas compuertas lógicas con más detalle. Veamos Multiplexores, otra vez. Eligen una. [TOS] Perdón. Una de entre varias entradas. Aquí eligen entre x1 y x2, la salida es s. f va a valer x1 cuando s vale 0. f va a valer x2 cuando s vale 1. En general, uno puede tener muchas entradas. s puede ser un bus o un bus con n cables. Y eso de n cables van a elegir entre 2 elevado a n entradas, esa es la idea. En este caso, n es 1. Esto es un solo cable, por lo tanto elige entre dos entradas. La entrada que eligen, por ejemplo, este s representa un número binario de n bites y la entra que eligen es la entrada 0, 1, 2, etcétera, hasta la entrada 2 a la n menos 1. En este caso, como n es 1, me elige entre dos entradas. Entre la entrada 0 y la entrada 1. Muy bien, podemos tener multiplexores con más entradas, potencia de 2 como dije recientemente. Esto significa que es del tipo 2 a la n, donde n vale 1 en adelante. Para un multiplexor con n entradas, se necesita un selector con logaritmo en base 2 de n bites. Eso sale de la matemática. Aquí tenemos un ejemplo que tiene cuatro entradas y necesitamos un multiplexor con logaritmo en base 2 de 4, es decir, dos entradas. Esto de aquí es ceiling, esto que está aca, es la función ceiling, por lo tanto siempre tenemos que aproximar hacia arriba para saber el número de entrada. Lo ideal es que sean potencia de 2 y de esa forma, no tenemos que aproximar nada. En este caso, tenemos cuando s0, s1, valen 0,0 f es x1. Cuando valen 0,1 f es x2. Cuando valen 1,0 f es x3. Cuando valen 1,1 f es x4. Y las entradas además pueden ser palabras de múltiples bits. O sea, podemos tener en paralelo, diferentes multiplexores con diferentes entradas. Aquí tenemos dos bits de entrada que son multiplexados a 2 bits de salida, pero podemos tener un número arbitrario, de multiplexor en paralelo, que es equivalente a tener por ejemplo, m bits de entrada y m bits de salida, en cada una de las n entradas. Muy bien. Uno puede hacer multiplexores en Verilog y aquí hay ejemplos. Aquí hay un mux de 2 a 1, mux es la desviación. Tenemos x0 y x1 como entrada. Tenemos s y tenemos f y aquí está la entrada, aquí está la salida y decimos f es, dependiendo de s. Si s es 1, la salida es x1, si s es 0, la salida es x0. Y eso es todo. Aquí hay otra implementación más de comportamiento con un módulo always, con un bloque always y con if. Y con if, uno puede hacer multiplexores, incluso mejor aún si lo hacemos con keys. Tenemos multiplexores de dos entradas y hay diferentes formas de implementarlos. Uno es con compuertas lógicas haciendo una suma de productos y otro es con compuertas de transmisión, en cuyo caso el ruido pasa, no es una lógica que restaura los 1 y 0 pero funcionan bien. Entonces, estos son multiplexores. ¿Cómo sería uno de 4 entradas? Bueno, tenemos la opción de hacerlo también con suma de productos. Esta es la suma de productos, aquí tenemos ese 0 y ese 1 que es nuestro selector que elige diferentes entradas. Por ejemplo, cuado s0 es 0 y s1 es 0, estos dos son 1 y el único que pasa es x1 y así sucesivamente uno puede también hacer multiplexores de múltiples entradas en Verilog, en este caso con una instrucción assign o más bien con assign directamente. Lo hacemos f igual, si s1 es 1 entonces elija este y s1 es 0, elija este otro y dentro de cada uno de esto también hay una elección. Queda más claro para no anidar el operador condicional, queda mucho más claro hacerlo con case. Esta es otra opción, hacerlo con if y else. Para un gran número de entradas, yo creo que lo mejor es case. Aquí hay de 4, 16 entradas, podemos hacer implementaciones jerárquicas. Por ejemplo, podríamos tener un multiplexores de a 2 para crear uno de a 4. Como es este caso o podemos tener multiplexores de a 4 y usar 5 de ellos para crear uno de 16. Y eso mismo se aplica también en Verilog. Podemos hacer multiplexores combinando varios multiplexores. Podemos hacer circuitos con multiplexores y derivar diferentes entradas a diferentes salidas. Por ejemplo podemos hacer que x1 vaya a y1 o que x1 vaya a y2. Y que x2 vaya a y2 o que x2 vaya a y1, usando dos multiplexores. Entonces los multiplexores nos permiten cruzar entradas a salidas. Muy bien, ¿qué aprendimos? Aprendimos multiplexores de múltiples entradas que son fáciles de implementar en Verilog y que además podemos implementarlos con multiplexores de menos entradas. Y también vimos cómo implementar circuitos que permiten cruzar entradas con salidas a partir de varios multiplexores. Muchas gracias por ver esta clase. [AUDIO_EN_BLANCO]