debouncing sys_res_n
[hwmod.git] / src / calc.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
4 use work.gen_pkg.all;
5 use work.textmode_vga_component_pkg.all;
6 use work.textmode_vga_pkg.all;
7 use work.textmode_vga_platform_dependent_pkg.all;
8 use work.ps2_keyboard_controller_pkg.all;
9 use work.debounce_pkg.all;
10 use work.sync_pkg.all;
11
12 entity calc is
13         port (
14                 sys_clk : in std_logic;
15                 sys_res_n : in std_logic;
16                 -- btnA
17                 -- TODO: pins
18                 -- rs232
19                 -- TODO: pins
20                 -- vga
21                 vsync_n : out std_logic;
22                 hsync_n : out std_logic;
23                 r : out std_logic_vector(RED_BITS - 1 downto 0);
24                 g : out std_logic_vector(GREEN_BITS - 1 downto 0);
25                 b : out std_logic_vector(BLUE_BITS - 1 downto 0);
26                 -- ps/2
27                 ps2_clk : inout std_logic;
28                 ps2_data : inout std_logic
29         );
30 end entity calc;
31
32 architecture top of calc is
33         -- ps/2
34         signal new_data : std_logic;
35         signal data : std_logic_vector(7 downto 0);
36         -- vga
37         signal vga_clk, free : std_logic;
38         -- vga/display
39         signal command : std_logic_vector(COMMAND_SIZE - 1 downto 0);
40         signal command_data : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE -1 downto 0);
41         -- history/display
42         signal d_new_eingabe, d_new_result, d_new_bs : std_logic;
43         signal d_zeile : hzeile;
44         signal d_spalte : hspalte;
45         signal d_get, d_done : std_logic;
46         signal d_char : hbyte;
47         -- history/scanner
48         signal s_char : hbyte;
49         signal s_take, s_done, s_backspace : std_logic;
50         -- history/parser
51         signal p_rget : std_logic;
52         signal p_rdone : std_logic;
53         signal p_read : hbyte;
54         signal p_wtake : std_logic;
55         signal p_wdone : std_logic;
56         signal p_write : hbyte;
57         signal p_finished : std_logic;
58         -- parser/scanner
59         signal do_it, finished : std_logic;
60         -- debouncing
61         signal sys_res_n_sync : std_logic;
62 begin
63         -- vga/ipcore
64         textmode_vga_inst : entity work.textmode_vga(struct)
65         generic map (
66                 VGA_CLK_FREQ => 25000000,
67                 BLINK_INTERVAL_MS => 500,
68                 SYNC_STAGES => 2
69         )
70         port map (
71                 sys_clk => sys_clk,
72                 sys_res_n => sys_res_n_sync,
73                 command => command,
74                 command_data => command_data,
75                 free => free,
76                 vga_clk => vga_clk,
77                 vga_res_n => sys_res_n_sync,
78                 vsync_n => vsync_n,
79                 hsync_n => hsync_n,
80                 r => r,
81                 g => g,
82                 b => b
83         );
84
85         -- pll fuer vga
86         vpll_inst : entity work.vpll(syn)
87         port map (
88                 inclk0 => sys_clk,
89                 c0 => vga_clk
90         );
91
92         -- display
93         display_inst : entity work.display(beh)
94         port map (
95                 sys_clk => sys_clk,
96                 sys_res_n => sys_res_n_sync,
97                 -- history
98                 d_new_eingabe => d_new_eingabe,
99                 d_new_result => d_new_result,
100                 d_new_bs => d_new_bs,
101                 d_zeile => d_zeile,
102                 d_spalte => d_spalte,
103                 d_get => d_get,
104                 d_done => d_done,
105                 d_char => d_char,
106                 -- vga
107                 command => command,
108                 command_data => command_data,
109                 free => free
110         );
111
112         -- history
113         history_inst : entity work.history(beh)
114         port map (
115                 sys_clk => sys_clk,
116                 sys_res_n => sys_res_n_sync,
117                 -- scanner
118                 s_char => s_char,
119                 s_take => s_take,
120                 s_done => s_done,
121                 s_backspace => s_backspace,
122                 -- display
123                 d_new_eingabe => d_new_eingabe,
124                 d_new_result => d_new_result,
125                 d_new_bs => d_new_bs,
126                 d_zeile => d_zeile,
127                 d_spalte => d_spalte,
128                 d_get => d_get,
129                 d_done => d_done,
130                 d_char => d_char,
131                 -- parser
132                 p_rget => p_rget,
133                 p_rdone => p_rdone,
134                 p_read => p_read,
135                 p_wtake => p_wtake,
136                 p_wdone => p_wdone,
137                 p_write => p_write,
138                 p_finished => p_finished
139         );
140
141         -- parser
142         parser_inst : entity work.parser(beh)
143         port map (
144                 sys_clk => sys_clk,
145                 sys_res_n => sys_res_n_sync,
146                 -- history
147                 p_rget => p_rget,
148                 p_rdone => p_rdone,
149                 p_read => p_read,
150                 p_wtake => p_wtake,
151                 p_wdone => p_wdone,
152                 p_write => p_write,
153                 p_finished => p_finished,
154                 -- scanner
155                 do_it => do_it,
156                 finished => finished
157         );
158
159         -- scanner
160         scanner_inst : entity work.scanner(beh)
161         port map (
162                 sys_clk => sys_clk,
163                 sys_res_n => sys_res_n_sync,
164                 -- ps/2
165                 new_data => new_data,
166                 data => data,
167                 -- history
168                 s_char => s_char,
169                 s_take => s_take,
170                 s_done => s_done,
171                 s_backspace => s_backspace,
172                 -- parser
173                 do_it => do_it,
174                 finished => finished
175         );
176
177         -- ps/2
178         ps2_inst : entity work.ps2_keyboard_controller(beh)
179         generic map (
180                 CLK_FREQ => 33330000,
181                 SYNC_STAGES => 2
182         )
183         port map (
184                 sys_clk => sys_clk,
185                 sys_res_n => sys_res_n_sync,
186                 -- scanner
187                 new_data => new_data,
188                 data => data,
189                 ps2_clk => ps2_clk,
190                 ps2_data => ps2_data
191         );
192
193         -- debouncer fuer sys_res_n
194         sys_res_n_debounce_inst : debounce
195         generic map (
196                 CLK_FREQ => 33330000,
197                 TIMEOUT => 1 ms,
198                 RESET_VALUE => '1',
199                 SYNC_STAGES => 2
200         )
201         port map (
202                 sys_clk => sys_clk,
203                 sys_res_n => '1',
204                 data_in => sys_res_n,
205                 data_out => sys_res_n_sync
206         );
207 end architecture top;
208