1 -- =============================================================================
2 -- file name is: mux4_1.vhd (mux=multiplexer)
3 -- Author: Kim Petersen
4 -- Created: 00.04.10 last modified: 00.04.13
5 -- =============================================================================
6 -- It is a 4 input multiplexer with the function as:
7 -- sel Input => output comments
8 -- MSB LSB
9 -- 0 0 in0 => output
10 -- 0 1 in1 => output
11 -- 1 0 in2 => output
12 -- 1 1 in3 => output
13 --
14 --------
15 -- IF and CASE can only be used inside a process.
16 -- WHEN and WITH can only be used outside a process.
17 --
18 -- IF corresponds to WHEN
19 -- CASE correpsonds to WITH
20 -- =============================================================================
21
22 library ieee;
23 use ieee.std_logic_1164.all; -- can be different dependent on tool used.
24 use ieee.std_logic_unsigned.all; -- can be different dependent on tool used.
25
26 entity mux4_1 is
27 port (s0 : in STD_LOGIC;
28 s1 : in STD_LOGIC;
29 in0 : in STD_LOGIC;
30 in1 : in STD_LOGIC;
31 in2 : in STD_LOGIC;
32 in3 : in STD_LOGIC;
33 output : out STD_LOGIC
34 );
35 end mux4_1;
36 -- =============================================================================
37 -- =============================================================================
38 architecture if_example of mux4_1 is
39
40 -- =============================================================================
41 begin
42
43 mux : process(s0, s1, in0, in1, in2, in3)
44 begin
45
46 if (s0 = '0' and s1 = '0') then
47 output <= in0;
48 elsif (s0 = '1' and s1 = '0') then
49 output <= in1;
50 elsif (s0 = '0' and s1 = '1') then
51 output <= in2;
52 elsif (s0 = '1' and s1 = '1') then
53 output <= in3;
54 else -- (s0 or s1 are not 0 or 1)
55 output <= 'X';
56 end if;
57
58 end process mux;
59
60 end if_example;
61
62 -- =============================================================================
63 -- =============================================================================
64 architecture case_example of mux4_1 is
65
66 -- =============================================================================
67 begin
68
69 mux : process(s0, s1, in0, in1, in2, in3)
70 variable sel : STD_LOGIC_VECTOR(1 downto 0);
71 begin
72 sel := s1 & s0; -- concatenate s1 and s0
73
74 case sel is
75 when "00" => output <= in0;
76 when "01" => output <= in1;
77 when "10" => output <= in2;
78 when "11" => output <= in3;
79 when others => output <= 'X';
80 end case;
81
82 end process mux;
83
84 end case_example;
85
86 -- =============================================================================
87 -- =============================================================================
88 architecture with_example of mux4_1 is
89
90 signal sel : STD_LOGIC_VECTOR(1 downto 0);
91 -- =============================================================================
92 begin
93 sel <= s1 & s0; -- concatenate s1 and s0
94 with sel select
95 output <= in0 when "00",
96 in1 when "01",
97 in2 when "10",
98 in3 when "11",
99 'X' when others;
100
101 end with_example;
102
103 -- =============================================================================
104 -- =============================================================================
105 architecture when_example of mux4_1 is
106
107 -- =============================================================================
108 begin
109
110 output <= in0 when (s1 & s0) = "00" else
111 in1 when (s1 & s0) = "01" else
112 in2 when (s1 & s0) = "10" else
113 in3 when (s1 & s0) = "11" else
114 'X';
115
116 end when_example;