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