1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.NUMERIC_STD.ALL;
|
4 | use IEEE.std_logic_unsigned.all;
|
5 | use work.mytype.all;
|
6 |
|
7 | entity autom_demux is
|
8 | port (
|
9 | clk : in STD_LOGIC;
|
10 | reset : in STD_LOGIC;
|
11 | set: in STD_LOGIC;
|
12 | INPUT : in std_logic_vector(31 downto 0);
|
13 | ADDR : out STD_LOGIC_VECTOR (4 downto 0);
|
14 | OUTPUT_0 : out STD_LOGIC_VECTOR (15 downto 0);
|
15 | OUTPUT_1 : out STD_LOGIC_VECTOR (31 downto 0);
|
16 | OUTPUT_2 : out STD_LOGIC_VECTOR (31 downto 0);
|
17 | OUTPUT_3 : out STD_LOGIC;
|
18 | OUTPUT_4 : out STD_LOGIC_VECTOR (2 downto 0);
|
19 | OUTPUT_5 : out STD_LOGIC;
|
20 | OUTPUT_6 : out STD_LOGIC
|
21 | );
|
22 |
|
23 |
|
24 | end autom_demux;
|
25 |
|
26 |
|
27 | ARCHITECTURE a OF autom_demux IS
|
28 | TYPE STATE_TYPE IS (state0, state1, state2, state3, state4, state5, state6, state7);
|
29 | SIGNAL state : STATE_TYPE;
|
30 |
|
31 | BEGIN
|
32 |
|
33 | PROCESS (clk, reset)
|
34 | BEGIN
|
35 | IF reset = '0' THEN
|
36 | state <= state0;
|
37 | ADDR(4 downto 0) <= "00000";
|
38 | ELSIF (clk'EVENT AND clk = '1') THEN
|
39 | CASE state IS
|
40 | WHEN state0=>
|
41 | IF set = '1' THEN
|
42 | state <= state1;
|
43 | ADDR(4 downto 0) <= "00001";
|
44 | ELSE
|
45 | state <= state0;
|
46 | ADDR(4 downto 0) <= "00000";
|
47 | END IF;
|
48 | WHEN state1=>
|
49 | IF set = '1' THEN
|
50 | state <= state2;
|
51 | ADDR(4 downto 0) <= "00010";
|
52 | ELSE
|
53 | state <= state1;
|
54 | ADDR(4 downto 0) <= "00001";
|
55 | END IF;
|
56 | WHEN state2=>
|
57 | IF set = '1' THEN
|
58 | state <= state3;
|
59 | ADDR(4 downto 0) <= "00011";
|
60 | ELSE
|
61 | state <= state2;
|
62 | ADDR(4 downto 0) <= "00010";
|
63 | END IF;
|
64 | WHEN state3=>
|
65 | IF set = '1' THEN
|
66 | state <= state4;
|
67 | ADDR(4 downto 0) <= "00100";
|
68 | ELSE
|
69 | state <= state3;
|
70 | ADDR(4 downto 0) <= "00011";
|
71 | END IF;
|
72 | WHEN state4=>
|
73 | IF set = '1' THEN
|
74 | state <= state5;
|
75 | ADDR(4 downto 0) <= "00101";
|
76 | ELSE
|
77 | state <= state4;
|
78 | ADDR(4 downto 0) <= "00100";
|
79 | END IF;
|
80 | WHEN state5=>
|
81 | IF set = '1' THEN
|
82 | state <= state6;
|
83 | ADDR(4 downto 0) <= "00110";
|
84 | ELSE
|
85 | state <= state5;
|
86 | ADDR(4 downto 0) <= "00101";
|
87 | END IF;
|
88 | WHEN state6=>
|
89 | IF set = '1' THEN
|
90 | state <= state7;
|
91 | ADDR(4 downto 0) <= "00111";
|
92 | ELSE
|
93 | state <= state6;
|
94 | ADDR(4 downto 0) <= "00110";
|
95 | END IF;
|
96 | WHEN state7=>
|
97 | IF set = '1' THEN
|
98 | state <= state0;
|
99 | ADDR(4 downto 0) <= "00000";
|
100 | ELSE
|
101 | state <= state7;
|
102 | ADDR(4 downto 0) <= "00111";
|
103 | END IF;
|
104 | END CASE;
|
105 | END IF;
|
106 | END PROCESS;
|
107 |
|
108 | PROCESS (state)
|
109 | BEGIN
|
110 | CASE state IS
|
111 | WHEN state0 =>
|
112 | OUTPUT_0 <= INPUT(15 downto 0);
|
113 | WHEN state1 =>
|
114 | OUTPUT_1 <= INPUT(31 downto 0);
|
115 | WHEN state2 =>
|
116 | OUTPUT_2 <= INPUT(31 downto 0);
|
117 | WHEN state3 =>
|
118 | OUTPUT_3 <= INPUT(0);
|
119 | WHEN state4 =>
|
120 | OUTPUT_4 <= INPUT(2 downto 0);
|
121 | WHEN state5 =>
|
122 | OUTPUT_5 <= INPUT(0);
|
123 | WHEN state6 =>
|
124 | OUTPUT_6 <= INPUT(0);
|
125 | WHEN state7 =>
|
126 | NULL;
|
127 | END CASE;
|
128 | END PROCESS;
|
129 |
|
130 | END a;
|