history: ram modul hinzugefuegt
[hwmod.git] / src / history.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
4 use work.gen_pkg.all;
5
6 entity history is
7         port (
8                 sys_clk : in std_logic;
9                 sys_res_n : in std_logic;
10                 -- PC-komm
11                 -- TODO: pins
12                 -- Scanner
13                 s_char : in hbyte;
14                 s_take : in std_logic;
15                 s_done : out std_logic;
16                 s_backspace : in std_logic;
17                 -- Display
18                 d_new_eingabe : out std_logic;
19                 d_new_result : out std_logic;
20                 d_zeile : in hzeile;
21                 d_spalte : in hspalte;
22                 d_get : in std_logic;
23                 d_done : out std_logic;
24                 d_char : out hbyte;
25                 -- Parser
26                 -- TODO: pins
27
28                 -- TODO: tmp only!
29                 do_it : in std_logic;
30                 finished : out std_logic
31         );
32 end entity history;
33
34 architecture beh of history is
35         type HISTORY_STATE is (SIDLE);
36         signal state_int, state_next : HISTORY_STATE;
37         signal s_done_int, s_done_next : std_logic;
38         signal d_new_eingabe_int, d_new_eingabe_next : std_logic;
39         signal d_new_result_int, d_new_result_next : std_logic;
40         signal d_done_int, d_done_next : std_logic;
41         signal d_char_int, d_char_next : hbyte;
42
43         signal finished_int, finished_next : std_logic;
44
45         -- ram
46         signal address, address_next, address_int : std_logic_vector(H_RAM_WIDTH - 1 downto 0);
47         signal data_out, data_in, data_in_next, data_in_int : hbyte;
48         signal wr, wr_next, wr_int : std_logic;
49 begin
50         s_done <= s_done_int;
51         d_new_eingabe <= d_new_eingabe_int;
52         d_new_result <= d_new_result_int;
53         d_done <= d_done_int;
54         d_char <= d_char_int;
55
56         finished <= finished_int;
57
58         address <= address_int;
59         data_in <= data_in_int;
60         wr <= wr_int;
61
62         process(sys_clk, sys_res_n)
63         begin
64                 if sys_res_n = '0' then
65                         -- internal
66                         state_int <= SIDLE;
67                         -- out
68                         s_done_int <= '0';
69                         d_new_result_int <= '0';
70                         d_new_eingabe_int <= '0';
71                         d_done_int <= '0';
72                         d_char_int <= (others => '0');
73
74                         finished_int <= '0';
75
76                         address_int <= (others => '0');
77                         data_in_int <= x"00";
78                         wr_int <= '0';
79                 elsif rising_edge(sys_clk) then
80                         -- internal
81                         state_int <= state_next;
82                         -- out
83                         s_done_int <= s_done_next;
84                         d_new_result_int <= d_new_result_next;
85                         d_new_eingabe_int <= d_new_eingabe_next;
86                         d_done_int <= d_done_next;
87                         d_char_int <= d_char_next;
88
89                         finished_int <= finished_next;
90
91                         address_int <= address_next;
92                         data_in_int <= data_in_next;
93                         wr_int <= wr_next;
94                 end if;
95         end process;
96
97         -- next state
98         process(state_int)
99         begin
100                 state_next <= state_int;
101
102                 case state_int is
103                         when SIDLE =>
104                                 null;
105                 end case;
106         end process;
107
108         -- out
109         process(state_int)
110         begin
111                 case state_int is
112                         when SIDLE =>
113                                 null;
114                 end case;
115         end process;
116
117         sp_ram_inst : entity work.sp_ram(beh)
118         generic map (
119                 ADDR_WIDTH => H_RAM_WIDTH
120         )
121         port map (
122                 sys_clk => sys_clk,
123                 sys_res_n => sys_res_n,
124                 address => address,
125                 data_out => data_out,
126                 wr => wr,
127                 data_in => data_in
128         );
129 end architecture beh;