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