pc_com: p_busy ist unnoetig und noch ein paar kleinere fehler ausgebessert
[hwmod.git] / src / calc_s3e.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.sync_pkg.all;
10
11 entity calc is
12         port (
13                 CLK_50MHZ : in std_logic;
14                 sys_res : in std_logic;
15                 -- btnA (here: "btn west")
16                 btn_a : in std_logic;
17                 -- rs232
18                 rxd : in std_logic;
19                 txd : out std_logic;
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         -- reset
34         signal sys_res_n : std_logic;
35         -- ps/2
36         signal new_data : std_logic;
37         signal data : std_logic_vector(7 downto 0);
38         -- vga
39         signal vga_clk, free : std_logic;
40         -- vga/display
41         signal command : std_logic_vector(COMMAND_SIZE - 1 downto 0);
42         signal command_data : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE -1 downto 0);
43         -- history/display
44         signal d_new_eingabe, d_new_result, d_new_bs : std_logic;
45         signal d_zeile : hzeile;
46         signal d_spalte : hspalte;
47         signal d_get, d_done : std_logic;
48         signal d_char : hbyte;
49         -- history/scanner
50         signal s_char : hbyte;
51         signal s_take, s_done, s_backspace : std_logic;
52         -- history/parser
53         signal p_rget : std_logic;
54         signal p_rdone : std_logic;
55         signal p_read : hbyte;
56         signal p_wtake : std_logic;
57         signal p_wdone : std_logic;
58         signal p_write : hbyte;
59         signal p_finished : std_logic;
60         --history/pc_com
61         signal pc_get : std_logic;
62         signal pc_spalte : hspalte;
63         signal pc_zeile : hzeile;
64         signal pc_char : hbyte;
65         signal pc_done : std_logic;
66         -- parser/scanner
67         signal do_it, finished : std_logic;
68         -- rs232
69         signal rx_new, rxd_sync : std_logic;
70         signal rx_data : std_logic_vector (7 downto 0);
71         signal tx_new, tx_done : std_logic;
72         signal tx_data : std_logic_vector (7 downto 0);
73 begin
74         sys_res_n <= not sys_res;
75
76         -- vga/ipcore
77         textmode_vga_inst : entity work.textmode_vga(struct)
78         generic map (
79                 VGA_CLK_FREQ => 25000000,
80                 BLINK_INTERVAL_MS => 500,
81                 SYNC_STAGES => 2
82         )
83         port map (
84                 sys_clk => CLK_50MHZ,
85                 sys_res_n => sys_res_n,
86                 command => command,
87                 command_data => command_data,
88                 free => free,
89                 vga_clk => vga_clk,
90                 vga_res_n => sys_res_n,
91                 vsync_n => vsync_n,
92                 hsync_n => hsync_n,
93                 r => r,
94                 g => g,
95                 b => b
96         );
97
98         -- pll fuer vga
99         clk_vga_s3e_inst : entity work.clk_vga_s3e(beh)
100         port map (
101                 clk50 => CLK_50MHZ,
102                 clk25 => vga_clk
103         );
104
105         -- display
106         display_inst : entity work.display(beh)
107         port map (
108                 sys_clk => CLK_50MHZ,
109                 sys_res_n => sys_res_n,
110                 -- history
111                 d_new_eingabe => d_new_eingabe,
112                 d_new_result => d_new_result,
113                 d_new_bs => d_new_bs,
114                 d_zeile => d_zeile,
115                 d_spalte => d_spalte,
116                 d_get => d_get,
117                 d_done => d_done,
118                 d_char => d_char,
119                 -- vga
120                 command => command,
121                 command_data => command_data,
122                 free => free
123         );
124
125         -- history
126         history_inst : entity work.history(beh)
127         port map (
128                 sys_clk => CLK_50MHZ,
129                 sys_res_n => sys_res_n,
130                 -- scanner
131                 s_char => s_char,
132                 s_take => s_take,
133                 s_done => s_done,
134                 s_backspace => s_backspace,
135                 -- display
136                 d_new_eingabe => d_new_eingabe,
137                 d_new_result => d_new_result,
138                 d_new_bs => d_new_bs,
139                 d_zeile => d_zeile,
140                 d_spalte => d_spalte,
141                 d_get => d_get,
142                 d_done => d_done,
143                 d_char => d_char,
144                 -- parser
145                 p_rget => p_rget,
146                 p_rdone => p_rdone,
147                 p_read => p_read,
148                 p_wtake => p_wtake,
149                 p_wdone => p_wdone,
150                 p_write => p_write,
151                 p_finished => p_finished,
152                 -- pc communication
153                 pc_get =>  pc_get,
154                 pc_spalte => pc_spalte,
155                 pc_zeile => pc_zeile,
156                 pc_char => pc_char,
157                 pc_done => pc_done
158         );
159
160         -- parser
161         parser_inst : entity work.parser(beh)
162         port map (
163                 sys_clk => CLK_50MHZ,
164                 sys_res_n => sys_res_n,
165                 -- history
166                 p_rget => p_rget,
167                 p_rdone => p_rdone,
168                 p_read => p_read,
169                 p_wtake => p_wtake,
170                 p_wdone => p_wdone,
171                 p_write => p_write,
172                 p_finished => p_finished,
173                 -- scanner
174                 do_it => do_it,
175                 finished => finished
176         );
177
178         -- scanner
179         scanner_inst : entity work.scanner(beh)
180         port map (
181                 sys_clk => CLK_50MHZ,
182                 sys_res_n => sys_res_n,
183                 -- ps/2
184                 new_data => new_data,
185                 data => data,
186                 -- history
187                 s_char => s_char,
188                 s_take => s_take,
189                 s_done => s_done,
190                 s_backspace => s_backspace,
191                 -- parser
192                 do_it => do_it,
193                 finished => finished
194         );
195
196         -- ps/2
197         ps2_inst : entity work.ps2_keyboard_controller(beh)
198         generic map (
199                 CLK_FREQ => 50000000,
200                 SYNC_STAGES => 2
201         )
202         port map (
203                 sys_clk => CLK_50MHZ,
204                 sys_res_n => sys_res_n,
205                 -- scanner
206                 new_data => new_data,
207                 data => data,
208                 ps2_clk => ps2_clk,
209                 ps2_data => ps2_data
210         );
211
212         -- synchronizer fuer rxd
213         sync_rxd_inst : entity work.sync(beh)
214         generic map (
215                 SYNC_STAGES => 2,
216                 RESET_VALUE => '1'
217         )
218         port map (
219                 sys_clk => CLK_50MHZ,
220                 sys_res_n => sys_res_n,
221                 data_in => rxd,
222                 data_out => rxd_sync
223         );
224
225         -- rs232-rx
226         rs232rx_inst : entity work.uart_rx(beh)
227         generic map (
228                 CLK_FREQ => 50000000,
229                 BAUDRATE => 115200
230         )
231         port map (
232                 sys_clk => CLK_50MHZ,
233                 sys_res_n => sys_res_n,
234                 rxd => rxd_sync,
235                 rx_data => rx_data,
236                 rx_new => rx_new
237         );
238
239         -- rs232-tx
240         rs232tx_inst : entity work.uart_tx(beh)
241         generic map (
242                 CLK_FREQ => 50000000,
243                 BAUDRATE => 115200
244         )
245         port map (
246                 sys_clk => CLK_50MHZ,
247                 sys_res_n => sys_res_n,
248                 txd => txd,
249                 tx_data => tx_data,
250                 tx_new => tx_new,
251                 tx_done => tx_done
252         );
253
254         -- pc-com
255         pc_com_inst : entity work.pc_communication(beh)
256         port map (
257                 sys_clk => CLK_50MHZ,
258                 sys_res_n => sys_res_n,
259                 --button
260                 btn_a => not btn_a,
261                 --uart_tx
262                 tx_data => tx_data,
263                 tx_new => tx_new,
264                 tx_done => tx_done,
265                 --uart_rx
266                 rx_data => rx_data,
267                 rx_new => rx_new,
268                 -- History
269                 pc_zeile => pc_zeile,
270                 pc_spalte => pc_spalte,
271                 pc_get => pc_get,
272                 pc_done => pc_done,
273                 pc_char => pc_char
274         );
275 end architecture top;