-
Notifications
You must be signed in to change notification settings - Fork 0
/
mux_8bit_8x1.vhd
128 lines (101 loc) · 3.89 KB
/
mux_8bit_8x1.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity mux_8bit_8x1 is
port (
sel : in std_logic_vector(2 downto 0);
data_in0 : in std_logic_vector(7 downto 0);
data_in1 : in std_logic_vector(7 downto 0);
data_in2 : in std_logic_vector(7 downto 0);
data_in3 : in std_logic_vector(7 downto 0);
data_in4 : in std_logic_vector(7 downto 0);
data_in5 : in std_logic_vector(7 downto 0);
data_in6 : in std_logic_vector(7 downto 0);
data_in7 : in std_logic_vector(7 downto 0);
data_out : out std_logic_vector(7 downto 0)
);
end entity;
architecture struc of mux_8bit_8x1 is
-- signal dec
signal i_data_in0, i_data_in1, i_data_in2, i_data_in3, i_data_in4, i_data_in5, i_data_in6, i_data_in7 : std_logic_vector(7 downto 0);
signal i_sel : std_logic_vector(2 downto 0);
signal i_data_out : std_logic_vector(7 downto 0);
signal i_mux_in0, i_mux_in1, i_mux_in2, i_mux_in3, i_mux_in4, i_mux_in5, i_mux_in6, i_mux_in7 : std_logic_vector(7 downto 0);
-- component dec
component mux_1bit_8x1 is
port (
sel : in std_logic_vector(2 downto 0);
data_in : in std_logic_vector(7 downto 0);
data_out : out std_logic
);
end component;
begin
-- component instantiations
-- bit 7
bit7 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in7,
data_out => i_data_out(7)
);
-- bit 6
bit6 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in6,
data_out => i_data_out(6)
);
-- bit 5
bit5 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in5,
data_out => i_data_out(5)
);
-- bit 4
bit4 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in4,
data_out => i_data_out(4)
);
-- bit 3
bit3 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in3,
data_out => i_data_out(3)
);
-- bit 2
bit2 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in2,
data_out => i_data_out(2)
);
-- bit 1
bit1 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in1,
data_out => i_data_out(1)
);
-- bit 0
bit0 : mux_1bit_8x1 port map (
sel => i_sel,
data_in => i_mux_in0,
data_out => i_data_out(0)
);
-- concurrent signal connections
i_mux_in7 <= i_data_in7(7) & i_data_in6(7) & i_data_in5(7) & i_data_in4(7) & i_data_in3(7) & i_data_in2(7) & i_data_in1(7) & i_data_in0(7);
i_mux_in6 <= i_data_in7(6) & i_data_in6(6) & i_data_in5(6) & i_data_in4(6) & i_data_in3(6) & i_data_in2(6) & i_data_in1(6) & i_data_in0(6);
i_mux_in5 <= i_data_in7(5) & i_data_in6(5) & i_data_in5(5) & i_data_in4(5) & i_data_in3(5) & i_data_in2(5) & i_data_in1(5) & i_data_in0(5);
i_mux_in4 <= i_data_in7(4) & i_data_in6(4) & i_data_in5(4) & i_data_in4(4) & i_data_in3(4) & i_data_in2(4) & i_data_in1(4) & i_data_in0(4);
i_mux_in3 <= i_data_in7(3) & i_data_in6(3) & i_data_in5(3) & i_data_in4(3) & i_data_in3(3) & i_data_in2(3) & i_data_in1(3) & i_data_in0(3);
i_mux_in2 <= i_data_in7(2) & i_data_in6(2) & i_data_in5(2) & i_data_in4(2) & i_data_in3(2) & i_data_in2(2) & i_data_in1(2) & i_data_in0(2);
i_mux_in1 <= i_data_in7(1) & i_data_in6(1) & i_data_in5(1) & i_data_in4(1) & i_data_in3(1) & i_data_in2(1) & i_data_in1(1) & i_data_in0(1);
i_mux_in0 <= i_data_in7(0) & i_data_in6(0) & i_data_in5(0) & i_data_in4(0) & i_data_in3(0) & i_data_in2(0) & i_data_in1(0) & i_data_in0(0);
i_data_in7 <= data_in7;
i_data_in6 <= data_in6;
i_data_in5 <= data_in5;
i_data_in4 <= data_in4;
i_data_in3 <= data_in3;
i_data_in2 <= data_in2;
i_data_in1 <= data_in1;
i_data_in0 <= data_in0;
i_sel <= sel;
-- output driver
data_out <= i_data_out;
end architecture;