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