Skip to main content

Multiplexer

A multiplexer (mux) selects one of several inputs and forwards it to the output based on a selection signal.

2-to-1 Multiplexer

Selects between two inputs based on a single selection bit.

Truth Table

SelOut
0A
1B

SHDL Implementation

component Mux2(A, B, Sel) -> (Out) {
not1: NOT;
and1: AND;
and2: AND;
or1: OR;

connect {
# Invert selection signal
Sel -> not1.A;

# Select A when Sel = 0
A -> and1.A;
not1.O -> and1.B;

# Select B when Sel = 1
B -> and2.A;
Sel -> and2.B;

# Combine results
and1.O -> or1.A;
and2.O -> or1.B;
or1.O -> Out;
}
}

4-to-1 Multiplexer

Selects one of four inputs using 2 selection bits.

SHDL Implementation

use mux2::{Mux2};

component Mux4(A, B, C, D, Sel[2]) -> (Out) {
mux1: Mux2; # A or B
mux2: Mux2; # C or D
mux3: Mux2; # Result of mux1 or mux2

connect {
# First level: select within pairs
A -> mux1.A;
B -> mux1.B;
Sel[1] -> mux1.Sel;

C -> mux2.A;
D -> mux2.B;
Sel[1] -> mux2.Sel;

# Second level: select between pairs
mux1.Out -> mux3.A;
mux2.Out -> mux3.B;
Sel[2] -> mux3.Sel;

mux3.Out -> Out;
}
}

8-to-1 Multiplexer

use mux4::{Mux4};
use mux2::{Mux2};

component Mux8(In[8], Sel[3]) -> (Out) {
mux1: Mux4; # Inputs 1-4
mux2: Mux4; # Inputs 5-8
mux3: Mux2; # Final selection

connect {
In[1] -> mux1.A;
In[2] -> mux1.B;
In[3] -> mux1.C;
In[4] -> mux1.D;
Sel[:2] -> mux1.Sel[:2];

In[5] -> mux2.A;
In[6] -> mux2.B;
In[7] -> mux2.C;
In[8] -> mux2.D;
Sel[:2] -> mux2.Sel[:2];

mux1.Out -> mux3.A;
mux2.Out -> mux3.B;
Sel[3] -> mux3.Sel;

mux3.Out -> Out;
}
}

16-bit 2-to-1 Multiplexer

For multi-bit data paths:

use mux2::{Mux2};

component Mux2_16(A[16], B[16], Sel) -> (Out[16]) {
>i[16]{
mux{i}: Mux2;
}

connect {
>i[16]{
A[{i}] -> mux{i}.A;
B[{i}] -> mux{i}.B;
Sel -> mux{i}.Sel;
mux{i}.Out -> Out[{i}];
}
}
}

This uses a generator to create 16 individual 2-to-1 muxes, all controlled by the same selection signal.