Multiplexing for multiple displays.
2-to-1 Multiplexer
Truth Table
sel | a | b | out |
---|---|---|---|
0 | 0 | X | 0 |
0 | 1 | X | 1 |
1 | X | 0 | 0 |
1 | X | 1 | 1 |
Code
module mux_2to1(
input wire a, b, // Boolean inputs
input wire sel, // Selector input
output wire [6:0] out // 7-segment output (A-G)
);
wire mux_out; // Intermediate wire for multiplexer output
// 2-to-1 Multiplexer Logic
assign mux_out = (sel) ? b : a;
// Mapping multiplexer output to 7-segment display
assign out = (sel & ~b) ? 7'b1000000 : // 0 when sel=1 and b=0
(sel | a) ? 7'b1111001 : // 1 when sel=0 and a=1, or sel=1 and b=1
7'b1111111; // Otherwise, turn off all segments
endmodule
Pin Planner
Node Name | Direction | Location |
---|---|---|
sel | Input | PIN_C10 |
a | Input | PIN_C11 |
b | Input | PIN_D12 |
out[6] | Output | PIN_C17 |
out[5] | Output | PIN_D17 |
out[4] | Output | PIN_E16 |
out[3] | Output | PIN_C16 |
out[2] | Output | PIN_C15 |
out[1] | Output | PIN_E15 |
out[0] | Output | PIN_C14 |
Output
4-to-1 Multiplexer
Truth Table
sel[1] | sel[0] | a[1] | a[0] | b[1] | b[0] | out (7-segment) |
---|---|---|---|---|---|---|
0 | 0 | X | X | X | X | 0 (off) |
0 | 1 | X | X | X | X | 0 (off) |
1 | 0 | 0 | 0 | X | X | 0 (off) |
1 | 0 | 0 | 1 | X | X | 1 |
1 | 0 | 1 | 0 | X | X | 0 (off) |
1 | 0 | 1 | 1 | X | X | 1 |
1 | 1 | X | X | 0 | 0 | 0 (off) |
1 | 1 | X | X | 0 | 1 | 1 |
1 | 1 | X | X | 1 | 0 | 0 (off) |
1 | 1 | X | X | 1 | 1 | 1 |
Code
module mux_4to1(
input wire [1:0] sel, // Selector input
input wire a1, a0, // Input bits for a
input wire b1, b0, // Input bits for b
output reg [6:0] out // 7-segment output (A-G), changed to 'reg'
);
// Enhanced mapping using truth table for multiplexer output to 7-segment display
always @(*) begin
case (sel)
2'b00: out = 7'b1000000; // Output 0
2'b01: out = 7'b1000000; // Output 0
2'b10: begin
case ({a1, a0})
2'b00: out = 7'b1000000; // Output 0
2'b01: out = 7'b1111001; // Output 1
2'b10: out = 7'b1000000; // Output 0
2'b11: out = 7'b1111001; // Output 1
endcase
end
2'b11: begin
case ({b1, b0})
2'b00: out = 7'b1000000; // Output 0
2'b01: out = 7'b1111001; // Output 1
2'b10: out = 7'b1000000; // Output 0
2'b11: out = 7'b1111001; // Output 1
endcase
end
endcase
end
endmodule
Pin Planner
Node Name | Direction | Location |
---|---|---|
sel[1] | Input | PIN_B12 |
sel[0] | Input | PIN_A12 |
a1 | Input | PIN_C12 |
a0 | Input | PIN_D12 |
b1 | Input | PIN_C11 |
b0 | Input | PIN_C10 |
out[6] | Output | PIN_C17 |
out[5] | Output | PIN_D17 |
out[4] | Output | PIN_E16 |
out[3] | Output | PIN_C16 |
out[2] | Output | PIN_C15 |
out[1] | Output | PIN_E15 |
out[0] | Output | PIN_C14 |
Output
Reference
Lesson 27 - VHDL Example 14: Multiplexing 7-Segment Displays (opens in a new tab)