implemented busy state
[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                 btn_a : in std_logic;
18                 -- rs232
19                 rxd : in std_logic;
20                 txd : out std_logic;
21                 -- vga
22                 vsync_n : out std_logic;
23                 hsync_n : out std_logic;
24                 r : out std_logic_vector(RED_BITS - 1 downto 0);
25                 g : out std_logic_vector(GREEN_BITS - 1 downto 0);
26                 b : out std_logic_vector(BLUE_BITS - 1 downto 0);
27                 -- ps/2
28                 ps2_clk : inout std_logic;
29                 ps2_data : inout std_logic
30         );
31 end entity calc;
32
33 architecture top of calc is
34         -- ps/2
35         signal new_data : std_logic;
36         signal data : std_logic_vector(7 downto 0);
37         -- vga
38         signal vga_clk, free : std_logic;
39         -- vga/display
40         signal command : std_logic_vector(COMMAND_SIZE - 1 downto 0);
41         signal command_data : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE -1 downto 0);
42         -- history/display
43         signal d_new_eingabe, d_new_result, d_new_bs : std_logic;
44         signal d_zeile : hzeile;
45         signal d_spalte : hspalte;
46         signal d_get, d_done : std_logic;
47         signal d_char : hbyte;
48         -- history/scanner
49         signal s_char : hbyte;
50         signal s_take, s_done, s_backspace : std_logic;
51         -- history/parser
52         signal p_rget : std_logic;
53         signal p_rdone : std_logic;
54         signal p_read : hbyte;
55         signal p_wtake : std_logic;
56         signal p_wdone : std_logic;
57         signal p_write : hbyte;
58         signal p_finished : std_logic;
59         --history/pc_com
60         signal pc_get : std_logic;
61         signal pc_spalte : hspalte;
62         signal pc_zeile : hzeile;
63         signal pc_char : hbyte;
64         signal pc_done : std_logic;
65         signal pc_busy : std_logic;
66         -- parser/scanner
67         signal do_it, finished : std_logic;
68         -- debouncing
69         signal sys_res_n_sync : std_logic;
70         -- rs232
71         signal rx_new, rxd_sync : std_logic;
72         signal rx_data : std_logic_vector (7 downto 0);
73         signal tx_new, tx_done : std_logic;
74         signal tx_data : std_logic_vector (7 downto 0);
75
76         signal btn_a_sync : std_logic;
77
78 begin
79         -- vga/ipcore
80         textmode_vga_inst : entity work.textmode_vga(struct)
81         generic map (
82                 VGA_CLK_FREQ => 25000000,
83                 BLINK_INTERVAL_MS => 500,
84                 SYNC_STAGES => 2
85         )
86         port map (
87                 sys_clk => sys_clk,
88                 sys_res_n => sys_res_n_sync,
89                 command => command,
90                 command_data => command_data,
91                 free => free,
92                 vga_clk => vga_clk,
93                 vga_res_n => sys_res_n_sync,
94                 vsync_n => vsync_n,
95                 hsync_n => hsync_n,
96                 r => r,
97                 g => g,
98                 b => b
99         );
100
101         -- pll fuer vga
102         vpll_inst : entity work.vpll(syn)
103         port map (
104                 inclk0 => sys_clk,
105                 c0 => vga_clk
106         );
107
108         -- display
109         display_inst : entity work.display(beh)
110         port map (
111                 sys_clk => sys_clk,
112                 sys_res_n => sys_res_n_sync,
113                 -- history
114                 d_new_eingabe => d_new_eingabe,
115                 d_new_result => d_new_result,
116                 d_new_bs => d_new_bs,
117                 d_zeile => d_zeile,
118                 d_spalte => d_spalte,
119                 d_get => d_get,
120                 d_done => d_done,
121                 d_char => d_char,
122                 -- vga
123                 command => command,
124                 command_data => command_data,
125                 free => free
126         );
127
128         -- history
129         history_inst : entity work.history(beh)
130         port map (
131                 sys_clk => sys_clk,
132                 sys_res_n => sys_res_n_sync,
133                 -- scanner
134                 s_char => s_char,
135                 s_take => s_take,
136                 s_done => s_done,
137                 s_backspace => s_backspace,
138                 -- display
139                 d_new_eingabe => d_new_eingabe,
140                 d_new_result => d_new_result,
141                 d_new_bs => d_new_bs,
142                 d_zeile => d_zeile,
143                 d_spalte => d_spalte,
144                 d_get => d_get,
145                 d_done => d_done,
146                 d_char => d_char,
147                 -- parser
148                 p_rget => p_rget,
149                 p_rdone => p_rdone,
150                 p_read => p_read,
151                 p_wtake => p_wtake,
152                 p_wdone => p_wdone,
153                 p_write => p_write,
154                 p_finished => p_finished,
155                 -- pc communication
156                 pc_get =>  pc_get,
157                 pc_spalte => pc_spalte,
158                 pc_zeile => pc_zeile,
159                 pc_char => pc_char,
160                 pc_busy => pc_busy,
161                 pc_done => pc_done
162
163         );
164
165         -- parser
166         parser_inst : entity work.parser(beh)
167         port map (
168                 sys_clk => sys_clk,
169                 sys_res_n => sys_res_n_sync,
170                 -- history
171                 p_rget => p_rget,
172                 p_rdone => p_rdone,
173                 p_read => p_read,
174                 p_wtake => p_wtake,
175                 p_wdone => p_wdone,
176                 p_write => p_write,
177                 p_finished => p_finished,
178                 -- scanner
179                 do_it => do_it,
180                 finished => finished
181         );
182
183         -- scanner
184         scanner_inst : entity work.scanner(beh)
185         port map (
186                 sys_clk => sys_clk,
187                 sys_res_n => sys_res_n_sync,
188                 -- ps/2
189                 new_data => new_data,
190                 data => data,
191                 -- history
192                 s_char => s_char,
193                 s_take => s_take,
194                 s_done => s_done,
195                 s_backspace => s_backspace,
196                 -- parser
197                 do_it => do_it,
198                 finished => finished
199         );
200
201         -- ps/2
202         ps2_inst : entity work.ps2_keyboard_controller(beh)
203         generic map (
204                 CLK_FREQ => 33330000,
205                 SYNC_STAGES => 2
206         )
207         port map (
208                 sys_clk => sys_clk,
209                 sys_res_n => sys_res_n_sync,
210                 -- scanner
211                 new_data => new_data,
212                 data => data,
213                 ps2_clk => ps2_clk,
214                 ps2_data => ps2_data
215         );
216
217         -- debouncer fuer sys_res_n
218         sys_res_n_debounce_inst : debounce
219         generic map (
220                 CLK_FREQ => 33330000,
221                 TIMEOUT => 1 ms,
222                 RESET_VALUE => '1',
223                 SYNC_STAGES => 2
224         )
225         port map (
226                 sys_clk => sys_clk,
227                 sys_res_n => '1',
228                 data_in => sys_res_n,
229                 data_out => sys_res_n_sync
230         );
231
232         -- synchronizer fuer rxd
233         sync_rxd_inst : entity work.sync(beh)
234         generic map (
235                 SYNC_STAGES => 2,
236                 RESET_VALUE => '1'
237         )
238         port map (
239                 sys_clk => sys_clk,
240                 sys_res_n => sys_res_n_sync,
241                 data_in => rxd,
242                 data_out => rxd_sync
243         );
244
245         -- debouncer fuer btn_a
246         btn_a_debounce_inst : debounce
247         generic map (
248                 CLK_FREQ => 33330000,
249                 TIMEOUT => 1 ms,
250                 RESET_VALUE => '1',
251                 SYNC_STAGES => 2
252         )
253         port map (
254                 sys_clk => sys_clk,
255                 sys_res_n => '1',
256                 data_in => btn_a,
257                 data_out => btn_a_sync
258         );
259
260         -- rs232-rx
261         rs232rx_inst : entity work.uart_rx(beh)
262         generic map (
263                 CLK_FREQ => 33330000,
264                 BAUDRATE => 115200
265         )
266         port map (
267                 sys_clk => sys_clk,
268                 sys_res_n => sys_res_n_sync,
269                 rxd => rxd_sync,
270                 rx_data => rx_data,
271                 rx_new => rx_new
272         );
273
274         -- rs232-tx
275         rs232tx_inst : entity work.uart_tx(beh)
276         generic map (
277                 CLK_FREQ => 33330000,
278                 BAUDRATE => 115200
279         )
280         port map (
281                 sys_clk => sys_clk,
282                 sys_res_n => sys_res_n,
283                 txd => txd,
284                 tx_data => tx_data,
285                 tx_new => tx_new,
286                 tx_done => tx_done
287         );
288
289         pc_com_inst : entity work.pc_communication(beh)
290         port map (
291                 sys_clk => sys_clk,
292                 sys_res_n => sys_res_n,
293                 --button
294                 btn_a => btn_a_sync,
295                 --uart_tx
296                 tx_data => tx_data,
297                 tx_new => tx_new,
298                 tx_done => tx_done,
299                 --uart_rx
300                 rx_data => rx_data,
301                 rx_new => rx_new,
302                 -- History
303                 pc_zeile => pc_zeile,
304                 pc_spalte => pc_spalte,
305                 pc_get => pc_get,
306                 pc_busy => pc_busy,
307                 pc_done => pc_done,
308                 pc_char => pc_char
309         );
310
311 end architecture top;
312