added pc-communication to history
[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                 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         -- parser/scanner
60         signal do_it, finished : std_logic;
61         -- debouncing
62         signal sys_res_n_sync : std_logic;
63         -- rs232
64         signal rx_new, rxd_sync : std_logic;
65         signal rx_data : std_logic_vector (7 downto 0);
66         signal tx_new, tx_done : std_logic;
67         signal tx_data : std_logic_vector (7 downto 0);
68 begin
69         -- vga/ipcore
70         textmode_vga_inst : entity work.textmode_vga(struct)
71         generic map (
72                 VGA_CLK_FREQ => 25000000,
73                 BLINK_INTERVAL_MS => 500,
74                 SYNC_STAGES => 2
75         )
76         port map (
77                 sys_clk => sys_clk,
78                 sys_res_n => sys_res_n_sync,
79                 command => command,
80                 command_data => command_data,
81                 free => free,
82                 vga_clk => vga_clk,
83                 vga_res_n => sys_res_n_sync,
84                 vsync_n => vsync_n,
85                 hsync_n => hsync_n,
86                 r => r,
87                 g => g,
88                 b => b
89         );
90
91         -- pll fuer vga
92         vpll_inst : entity work.vpll(syn)
93         port map (
94                 inclk0 => sys_clk,
95                 c0 => vga_clk
96         );
97
98         -- display
99         display_inst : entity work.display(beh)
100         port map (
101                 sys_clk => sys_clk,
102                 sys_res_n => sys_res_n_sync,
103                 -- history
104                 d_new_eingabe => d_new_eingabe,
105                 d_new_result => d_new_result,
106                 d_new_bs => d_new_bs,
107                 d_zeile => d_zeile,
108                 d_spalte => d_spalte,
109                 d_get => d_get,
110                 d_done => d_done,
111                 d_char => d_char,
112                 -- vga
113                 command => command,
114                 command_data => command_data,
115                 free => free
116         );
117
118         -- history
119         history_inst : entity work.history(beh)
120         port map (
121                 sys_clk => sys_clk,
122                 sys_res_n => sys_res_n_sync,
123                 -- scanner
124                 s_char => s_char,
125                 s_take => s_take,
126                 s_done => s_done,
127                 s_backspace => s_backspace,
128                 -- display
129                 d_new_eingabe => d_new_eingabe,
130                 d_new_result => d_new_result,
131                 d_new_bs => d_new_bs,
132                 d_zeile => d_zeile,
133                 d_spalte => d_spalte,
134                 d_get => d_get,
135                 d_done => d_done,
136                 d_char => d_char,
137                 -- parser
138                 p_rget => p_rget,
139                 p_rdone => p_rdone,
140                 p_read => p_read,
141                 p_wtake => p_wtake,
142                 p_wdone => p_wdone,
143                 p_write => p_write,
144                 p_finished => p_finished,
145                 -- pc communication
146                 pc_get =>  '0',
147                 pc_spalte => (others => '0'),
148                 pc_zeile => (others => '0'),
149                 pc_char => open,
150                 pc_done => open
151
152         );
153
154         -- parser
155         parser_inst : entity work.parser(beh)
156         port map (
157                 sys_clk => sys_clk,
158                 sys_res_n => sys_res_n_sync,
159                 -- history
160                 p_rget => p_rget,
161                 p_rdone => p_rdone,
162                 p_read => p_read,
163                 p_wtake => p_wtake,
164                 p_wdone => p_wdone,
165                 p_write => p_write,
166                 p_finished => p_finished,
167                 -- scanner
168                 do_it => do_it,
169                 finished => finished
170         );
171
172         -- scanner
173         scanner_inst : entity work.scanner(beh)
174         port map (
175                 sys_clk => sys_clk,
176                 sys_res_n => sys_res_n_sync,
177                 -- ps/2
178                 new_data => new_data,
179                 data => data,
180                 -- history
181                 s_char => s_char,
182                 s_take => s_take,
183                 s_done => s_done,
184                 s_backspace => s_backspace,
185                 -- parser
186                 do_it => do_it,
187                 finished => finished
188         );
189
190         -- ps/2
191         ps2_inst : entity work.ps2_keyboard_controller(beh)
192         generic map (
193                 CLK_FREQ => 33330000,
194                 SYNC_STAGES => 2
195         )
196         port map (
197                 sys_clk => sys_clk,
198                 sys_res_n => sys_res_n_sync,
199                 -- scanner
200                 new_data => new_data,
201                 data => data,
202                 ps2_clk => ps2_clk,
203                 ps2_data => ps2_data
204         );
205
206         -- debouncer fuer sys_res_n
207         sys_res_n_debounce_inst : debounce
208         generic map (
209                 CLK_FREQ => 33330000,
210                 TIMEOUT => 1 ms,
211                 RESET_VALUE => '1',
212                 SYNC_STAGES => 2
213         )
214         port map (
215                 sys_clk => sys_clk,
216                 sys_res_n => '1',
217                 data_in => sys_res_n,
218                 data_out => sys_res_n_sync
219         );
220
221         -- synchronizer fuer rxd
222         sync_rxd_inst : entity work.sync(beh)
223         generic map (
224                 SYNC_STAGES => 2,
225                 RESET_VALUE => '1'
226         )
227         port map (
228                 sys_clk => sys_clk,
229                 sys_res_n => sys_res_n_sync,
230                 data_in => rxd,
231                 data_out => rxd_sync
232         );
233
234         -- rs232-rx
235         rs232rx_inst : entity work.uart_rx(beh)
236         generic map (
237                 CLK_FREQ => 33330000,
238                 BAUDRATE => 115200
239         )
240         port map (
241                 sys_clk => sys_clk,
242                 sys_res_n => sys_res_n_sync,
243                 rxd => rxd_sync,
244                 rx_data => rx_data,
245                 rx_new => rx_new
246         );
247
248         -- rs232-tx
249         rs232tx_inst : entity work.uart_tx(beh)
250         generic map (
251                 CLK_FREQ => 33330000,
252                 BAUDRATE => 115200
253         )
254         port map (
255                 sys_clk => sys_clk,
256                 sys_res_n => sys_res_n,
257                 txd => txd,
258                 tx_data => tx_data,
259                 tx_new => tx_new,
260                 tx_done => tx_done
261         );
262 end architecture top;
263