Bird
Raised Fist0
VHDLprogramming~20 mins

Multiplexer design in VHDL - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Multiplexer Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of 2-to-1 Multiplexer VHDL Code
What is the output of the following 2-to-1 multiplexer VHDL code when sel = '1' and a = '0', b = '1'?
VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity mux2to1 is
    Port ( a : in STD_LOGIC;
           b : in STD_LOGIC;
           sel : in STD_LOGIC;
           y : out STD_LOGIC);
end mux2to1;

architecture Behavioral of mux2to1 is
begin
    y <= a when sel = '0' else b;
end Behavioral;
A'X'
B'0'
C'Z'
D'1'
Attempts:
2 left
💡 Hint
Remember, the output y follows input b when sel is '1'.
🧠 Conceptual
intermediate
1:00remaining
Number of Select Lines for 8-to-1 Multiplexer
How many select lines are needed to design an 8-to-1 multiplexer in VHDL?
A8
B4
C3
D1
Attempts:
2 left
💡 Hint
Number of select lines = log2(number of inputs).
🔧 Debug
advanced
3:00remaining
Identify the Error in 4-to-1 Multiplexer VHDL Code
What error will the following VHDL code produce when compiled?
VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity mux4to1 is
    Port ( a : in STD_LOGIC_VECTOR(3 downto 0);
           sel : in STD_LOGIC_VECTOR(1 downto 0);
           y : out STD_LOGIC);
end mux4to1;

architecture Behavioral of mux4to1 is
begin
    process(a, sel)
    begin
        case sel is
            when "00" => y <= a(0);
            when "01" => y <= a(1);
            when "10" => y <= a(2);
            when "11" => y <= a(3);
            when others => y <= '0';
        end case;
    end process;
end Behavioral;
ASyntax error: missing semicolon after end case
BRuntime error: index out of range
CNo error, code compiles and works correctly
DSyntax error: missing sensitivity list in process
Attempts:
2 left
💡 Hint
Check the syntax of the case statement carefully.
📝 Syntax
advanced
2:00remaining
Correct VHDL Syntax for 8-to-1 Multiplexer Output Assignment
Which option correctly assigns the output y in an 8-to-1 multiplexer using a selected input vector a and select lines sel?
Ay <= a(to_integer(unsigned(sel)));
By <= a(to_integer(sel));
Cy <= a(sel & 0);
Dy <= a(sel);
Attempts:
2 left
💡 Hint
You need to convert the select lines from std_logic_vector to integer index.
🚀 Application
expert
2:30remaining
Output of 4-to-1 Multiplexer with Mixed Inputs
Given the following VHDL code for a 4-to-1 multiplexer, what is the output y when a = "1010" and sel = "10"?
VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity mux4to1 is
    Port ( a : in STD_LOGIC_VECTOR(3 downto 0);
           sel : in STD_LOGIC_VECTOR(1 downto 0);
           y : out STD_LOGIC);
end mux4to1;

architecture Behavioral of mux4to1 is
begin
    y <= a(to_integer(unsigned(sel)));
end Behavioral;
A'1'
B'0'
C'X'
D'Z'
Attempts:
2 left
💡 Hint
Convert sel to integer and use it as index to select bit from a.

Practice

(1/5)
1. What is the main purpose of a multiplexer in VHDL design?
easy
A. To perform arithmetic operations on inputs
B. To store data temporarily
C. To select one input from multiple inputs and send it to the output
D. To generate clock signals

Solution

  1. Step 1: Understand the function of a multiplexer

    A multiplexer chooses one input from many inputs based on selector signals.
  2. Step 2: Identify the correct purpose

    It outputs the selected input to a single output line.
  3. Final Answer:

    To select one input from multiple inputs and send it to the output -> Option C
  4. Quick Check:

    Multiplexer = input selector [OK]
Hint: Multiplexer picks one input to output [OK]
Common Mistakes:
  • Confusing multiplexer with arithmetic unit
  • Thinking multiplexer stores data
  • Assuming multiplexer generates clocks
2. Which of the following is the correct way to declare a 4-to-1 multiplexer selector signal in VHDL?
easy
A. signal sel : integer range 0 to 3;
B. signal sel : std_logic_vector(3 downto 0);
C. signal sel : std_logic;
D. signal sel : std_logic_vector(1 downto 0);

Solution

  1. Step 1: Determine selector size for 4 inputs

    For 4 inputs, selector needs 2 bits (log2(4) = 2).
  2. Step 2: Match selector declaration

    std_logic_vector(1 downto 0) is 2 bits wide, correct for 4-to-1 mux.
  3. Final Answer:

    signal sel : std_logic_vector(1 downto 0); -> Option D
  4. Quick Check:

    2-bit selector for 4 inputs [OK]
Hint: Selector bits = log2(number of inputs) [OK]
Common Mistakes:
  • Using 4 bits for selector of 4 inputs
  • Using single bit for multiple inputs
  • Using integer instead of std_logic_vector
3. Given the following VHDL code for a 2-to-1 multiplexer, what will be the output y when sel = '1' and inputs are a = '0', b = '1'?
process(sel, a, b)
begin
  if sel = '0' then
    y <= a;
  else
    y <= b;
  end if;
end process;
medium
A. '1'
B. '0'
C. 'Z'
D. No output (error)

Solution

  1. Step 1: Check selector value and inputs

    Selector sel = '1', inputs a = '0', b = '1'.
  2. Step 2: Follow if-else logic

    If sel = '0', output y = a; else y = b. Since sel = '1', y = b = '1'.
  3. Final Answer:

    '1' -> Option A
  4. Quick Check:

    sel=1 outputs b=1 [OK]
Hint: If sel=1 output b else a [OK]
Common Mistakes:
  • Confusing sel '0' and '1' cases
  • Assuming output is 'Z' (high impedance)
  • Ignoring input values
4. Identify the error in this 4-to-1 multiplexer VHDL code snippet:
process(sel, d0, d1, d2, d3)
begin
  case sel is
    when "00" => y <= d0;
    when "01" => y <= d1;
    when "10" => y <= d2;
    when others => y <= d3;
  end case;
end process;
medium
A. Selector signal sel is not declared as 2 bits wide
B. Missing sensitivity list signals
C. Using 'when others' instead of explicit cases
D. Output y is not assigned in all cases

Solution

  1. Step 1: Check selector declaration

    The code uses sel as 2-bit vector ("00", "01", "10"), so sel must be declared as std_logic_vector(1 downto 0).
  2. Step 2: Identify missing or incorrect declaration

    If sel is not declared as 2 bits wide, the case statement will cause errors.
  3. Final Answer:

    Selector signal sel is not declared as 2 bits wide -> Option A
  4. Quick Check:

    Selector width must match case values [OK]
Hint: Selector width must match case patterns [OK]
Common Mistakes:
  • Forgetting to declare selector width
  • Leaving out signals in sensitivity list
  • Misusing 'when others' in case
5. You want to design an 8-to-1 multiplexer in VHDL using a case statement. Which of the following selector signal declarations and case statement headers is correct?
hard
A. signal sel : std_logic; ... case sel is when '0' => ... when '1' => ...
B. signal sel : std_logic_vector(2 downto 0); ... case sel is when "000" => ... when "111" => ...
C. signal sel : std_logic_vector(1 downto 0); ... case sel is when "00" => ... when "11" => ...
D. signal sel : std_logic_vector(3 downto 0); ... case sel is when "0000" => ... when "0111" => ...

Solution

  1. Step 1: Determine selector size for 8 inputs

    8 inputs require 3 bits selector (log2(8) = 3), so sel must be 3 bits wide.
  2. Step 2: Match selector declaration and case values

    signal sel : std_logic_vector(2 downto 0); ... case sel is when "000" => ... when "111" => ... uses std_logic_vector(2 downto 0) which is 3 bits, and case values from "000" to "111" which is correct.
  3. Final Answer:

    signal sel : std_logic_vector(2 downto 0); ... case sel is when "000" => ... when "111" => ... -> Option B
  4. Quick Check:

    3-bit selector for 8 inputs [OK]
Hint: Use 3-bit selector for 8 inputs [OK]
Common Mistakes:
  • Using 4 bits for 8 inputs selector
  • Using 1 or 2 bits for 8 inputs
  • Mismatching case values and selector width
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard