]>
Commit | Line | Data |
---|---|---|
696ded12 | 1 | -- J.STELZNER |
2 | -- INFORMATIK-3 LABOR | |
3 | -- 23.08.2006 | |
4 | -- File: CONT_FSM.VHD | |
5 | ||
6 | library ieee; | |
2612d712 | 7 | use ieee.std_logic_1164.all; |
696ded12 | 8 | |
9 | entity CONT_FSM is | |
2612d712 | 10 | port |
11 | ( | |
12 | PCI_CLOCK :in std_logic; | |
13 | PCI_RSTn :in std_logic; | |
14 | IO_READ :in std_logic; | |
15 | IO_WRITE :in std_logic; | |
16 | CONF_READ :in std_logic; | |
17 | CONF_WRITE :in std_logic; | |
18 | FIFO_READ :in std_logic; | |
19 | READ :out std_logic;--> MUX_SEL(1) , OE_PCI_AD | |
20 | PERR_CHECK :out std_logic; | |
21 | DEVSELn :out std_logic; | |
22 | OE_PCI_PAR :out std_logic; | |
23 | OE_PCI_PERR :out std_logic; | |
24 | TRDYn :out std_logic; | |
25 | PCI_TRDYn :out std_logic; -- s/t/s | |
26 | PCI_STOPn :out std_logic; -- s/t/s | |
27 | PCI_DEVSELn :out std_logic; -- s/t/s | |
28 | FIFO_RDn :out std_logic | |
29 | ); | |
30 | end entity CONT_FSM; | |
696ded12 | 31 | |
32 | architecture CONT_FSM_DESIGN of CONT_FSM is | |
33 | ||
34 | ||
35 | ||
2612d712 | 36 | --********************************************************** |
37 | --*** CONTROL FSM CODIERUNG *** | |
38 | --********************************************************** | |
39 | -- | |
40 | -- | |
41 | -- | |
42 | -- |----------- HELP | |
43 | -- ||---------- FIFO_READn | |
44 | -- |||--------- OE_PCI_PERR | |
45 | -- ||||-------- PERR_CHECK | |
46 | -- |||||------- TRDYn | |
47 | -- ||||||------ STOPn | |
48 | -- |||||||----- DEVSELn | |
49 | -- ||||||||---- OE_PCI_PAR | |
50 | -- |||||||||--- OE_CONTROL | |
51 | -- ||||||||||-- READ / MUX_SEL(1) / OE_PCI_AD | |
52 | -- |||||||||| | |
53 | constant ST_IDLE :std_logic_vector (9 downto 0) := "0100111000";-- 138 | |
696ded12 | 54 | |
2612d712 | 55 | constant ST_READ_1 :std_logic_vector (9 downto 0) := "0100110011";-- 133 |
56 | constant ST_READ_2 :std_logic_vector (9 downto 0) := "0100000111";-- 107 | |
57 | constant ST_READ_3 :std_logic_vector (9 downto 0) := "0100111111";-- 13F | |
696ded12 | 58 | |
2612d712 | 59 | constant ST_RD_FIFO_1 :std_logic_vector (9 downto 0) := "0000110011";-- 033 |
60 | constant ST_RD_FIFO_2 :std_logic_vector (9 downto 0) := "1100110011";-- 233 | |
696ded12 | 61 | |
62 | ||
2612d712 | 63 | constant ST_WRITE_1 :std_logic_vector (9 downto 0) := "0111110010";-- 1F2 |
64 | constant ST_WRITE_2 :std_logic_vector (9 downto 0) := "0110000010";-- 182 | |
65 | constant ST_WRITE_3 :std_logic_vector (9 downto 0) := "0110111010";-- 1BA | |
696ded12 | 66 | |
2612d712 | 67 | signal CONTROL_STATE :std_logic_vector (9 downto 0); |
696ded12 | 68 | |
69 | ||
2612d712 | 70 | --signal DEVSELn :std_logic; |
71 | signal STOPn :std_logic; | |
72 | --signal TRDYn :std_logic; | |
696ded12 | 73 | |
2612d712 | 74 | --************************************************************ |
75 | --*** FSM SPEICHER-AUTOMAT *** | |
76 | --************************************************************ | |
696ded12 | 77 | |
2612d712 | 78 | attribute syn_state_machine : boolean; |
79 | attribute syn_state_machine of CONTROL_STATE : signal is false; | |
696ded12 | 80 | |
81 | begin | |
82 | ||
2612d712 | 83 | --********************************************************** |
84 | --*** CONTROL FSM *** | |
85 | --********************************************************** | |
696ded12 | 86 | |
2612d712 | 87 | process (PCI_CLOCK, PCI_RSTn) |
88 | begin | |
89 | if PCI_RSTn = '0' then CONTROL_STATE <= ST_IDLE; | |
696ded12 | 90 | |
e687cadb | 91 | elsif (rising_edge(PCI_CLOCK)) then |
696ded12 | 92 | |
2612d712 | 93 | case CONTROL_STATE is |
94 | when ST_IDLE => | |
95 | if IO_READ = '1' then | |
96 | CONTROL_STATE <= ST_READ_1; | |
696ded12 | 97 | |
2612d712 | 98 | elsif CONF_READ = '1' then |
99 | CONTROL_STATE <= ST_READ_1; | |
696ded12 | 100 | |
2612d712 | 101 | elsif IO_WRITE = '1' then |
102 | CONTROL_STATE <= ST_WRITE_1; | |
696ded12 | 103 | |
2612d712 | 104 | elsif CONF_WRITE = '1' then |
105 | CONTROL_STATE <= ST_WRITE_1; | |
696ded12 | 106 | |
2612d712 | 107 | else CONTROL_STATE <= ST_IDLE; |
108 | end if; | |
696ded12 | 109 | |
2612d712 | 110 | -- when ST_READ_1 => |
111 | -- CONTROL_STATE <= ST_READ_2; | |
696ded12 | 112 | |
2612d712 | 113 | when ST_READ_1 => |
114 | if FIFO_READ = '1' then | |
115 | CONTROL_STATE <= ST_RD_FIFO_1; | |
116 | else | |
117 | CONTROL_STATE <= ST_READ_2; | |
118 | end if; | |
696ded12 | 119 | |
2612d712 | 120 | when ST_READ_2 => |
121 | CONTROL_STATE <= ST_READ_3; | |
696ded12 | 122 | |
2612d712 | 123 | when ST_READ_3 => |
124 | CONTROL_STATE <= ST_IDLE; | |
696ded12 | 125 | |
2612d712 | 126 | when ST_RD_FIFO_1=> |
127 | CONTROL_STATE <= ST_RD_FIFO_2; | |
696ded12 | 128 | |
2612d712 | 129 | when ST_RD_FIFO_2=> |
130 | CONTROL_STATE <= ST_READ_2; | |
696ded12 | 131 | |
2612d712 | 132 | when ST_WRITE_1 => |
133 | CONTROL_STATE <= ST_WRITE_2; | |
696ded12 | 134 | |
2612d712 | 135 | when ST_WRITE_2 => |
136 | CONTROL_STATE <= ST_WRITE_3; | |
696ded12 | 137 | |
2612d712 | 138 | when ST_WRITE_3 => |
139 | CONTROL_STATE <= ST_IDLE; | |
696ded12 | 140 | |
2612d712 | 141 | when others => |
142 | CONTROL_STATE <= ST_IDLE; | |
696ded12 | 143 | |
2612d712 | 144 | end case; -- COMM_STATE |
145 | end if; -- CLOCK | |
146 | end process; -- PROCESS | |
696ded12 | 147 | |
2612d712 | 148 | |
149 | READ <= CONTROL_STATE(0); | |
150 | --OE_CONTROL <= CONTROL_STATE(1); | |
151 | OE_PCI_PAR <= CONTROL_STATE(2); | |
152 | DEVSELn <= CONTROL_STATE(3); | |
153 | STOPn <= CONTROL_STATE(4); | |
154 | TRDYn <= CONTROL_STATE(5); | |
155 | PERR_CHECK <= CONTROL_STATE(6); | |
156 | OE_PCI_PERR <= CONTROL_STATE(7); | |
157 | ||
158 | FIFO_RDn <= CONTROL_STATE(8); | |
159 | ||
160 | ||
161 | PCI_DEVSELn <= CONTROL_STATE(3) when CONTROL_STATE(1) = '1' else 'Z'; | |
162 | PCI_STOPn <= STOPn when CONTROL_STATE(1) = '1' else 'Z'; | |
163 | PCI_TRDYn <= CONTROL_STATE(5) when CONTROL_STATE(1) = '1' else 'Z'; | |
164 | ||
165 | end architecture CONT_FSM_DESIGN; |