spartan3e: reset-button
[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
10 entity calc is
11         port (
12                 CLK_50MHZ : in std_logic;
13                 sys_res : in std_logic;
14                 -- btnA
15                 -- TODO: pins
16                 -- rs232
17                 -- TODO: pins
18                 -- vga
19                 vsync_n : out std_logic;
20                 hsync_n : out std_logic;
21                 r : out std_logic_vector(RED_BITS - 1 downto 0);
22                 g : out std_logic_vector(GREEN_BITS - 1 downto 0);
23                 b : out std_logic_vector(BLUE_BITS - 1 downto 0);
24                 -- ps/2
25                 ps2_clk : inout std_logic;
26                 ps2_data : inout std_logic;
27                 -- debug
28                 led0 : out std_logic;
29                 led1 : out std_logic
30         );
31 end entity calc;
32
33 architecture top of calc is
34         -- reset
35         signal sys_res_n : std_logic;
36         -- ps/2
37         signal new_data : std_logic;
38         signal data : std_logic_vector(7 downto 0);
39         -- vga
40         signal vga_clk, free : std_logic;
41         -- vga/display
42         signal command : std_logic_vector(COMMAND_SIZE - 1 downto 0);
43         signal command_data : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE -1 downto 0);
44         -- history/display
45         signal d_new_eingabe, d_new_result, d_new_bs : std_logic;
46         signal d_zeile : hzeile;
47         signal d_spalte : hspalte;
48         signal d_get, d_done : std_logic;
49         signal d_char : hbyte;
50         -- history/scanner
51         signal s_char : hbyte;
52         signal s_take, s_done, s_backspace : std_logic;
53
54         -- tmp: history<>scanner
55         signal do_it, finished : std_logic;
56 begin
57         led0 <= '0';
58         led1 <= '1';
59         sys_res_n <= not sys_res;
60
61         -- vga/ipcore
62         textmode_vga_inst : entity work.textmode_vga(struct)
63         generic map (
64                 VGA_CLK_FREQ => 25000000,
65                 BLINK_INTERVAL_MS => 500,
66                 SYNC_STAGES => 2
67         )
68         port map (
69                 sys_clk => CLK_50MHZ,
70                 sys_res_n => sys_res_n,
71                 command => command,
72                 command_data => command_data,
73                 free => free,
74                 vga_clk => vga_clk,
75                 vga_res_n => sys_res_n,
76                 vsync_n => vsync_n,
77                 hsync_n => hsync_n,
78                 r => r,
79                 g => g,
80                 b => b
81         );
82
83         -- pll fuer vga
84         clk_vga_s3e_inst : entity work.clk_vga_s3e(beh)
85         port map (
86                 clk50 => CLK_50MHZ,
87                 clk25 => vga_clk
88         );
89
90         -- display
91         display_inst : entity work.display(beh)
92         port map (
93                 sys_clk => CLK_50MHZ,
94                 sys_res_n => sys_res_n,
95                 -- history
96                 d_new_eingabe => d_new_eingabe,
97                 d_new_result => d_new_result,
98                 d_new_bs => d_new_bs,
99                 d_zeile => d_zeile,
100                 d_spalte => d_spalte,
101                 d_get => d_get,
102                 d_done => d_done,
103                 d_char => d_char,
104                 -- vga
105                 command => command,
106                 command_data => command_data,
107                 free => free
108         );
109
110         -- history
111         history_inst : entity work.history(beh)
112         port map (
113                 sys_clk => CLK_50MHZ,
114                 sys_res_n => sys_res_n,
115                 -- scanner
116                 s_char => s_char,
117                 s_take => s_take,
118                 s_done => s_done,
119                 s_backspace => s_backspace,
120                 -- display
121                 d_new_eingabe => d_new_eingabe,
122                 d_new_result => d_new_result,
123                 d_new_bs => d_new_bs,
124                 d_zeile => d_zeile,
125                 d_spalte => d_spalte,
126                 d_get => d_get,
127                 d_done => d_done,
128                 d_char => d_char,
129                 -- TODO: tmp only!
130                 do_it => do_it,
131                 finished => finished
132         );
133
134         -- scanner
135         scanner_inst : entity work.scanner(beh)
136         port map (
137                 sys_clk => CLK_50MHZ,
138                 sys_res_n => sys_res_n,
139                 -- ps/2
140                 new_data => new_data,
141                 data => data,
142                 -- history
143                 s_char => s_char,
144                 s_take => s_take,
145                 s_done => s_done,
146                 s_backspace => s_backspace,
147                 -- TODO: parser. temporaer mit history verbunden
148                 do_it => do_it,
149                 finished => finished
150         );
151
152         -- ps/2
153         ps2_inst : entity work.ps2_keyboard_controller(beh)
154         generic map (
155                 CLK_FREQ => 50000000,
156                 SYNC_STAGES => 2
157         )
158         port map (
159                 sys_clk => CLK_50MHZ,
160                 sys_res_n => sys_res_n,
161                 -- scanner
162                 new_data => new_data,
163                 data => data,
164                 ps2_clk => ps2_clk,
165                 ps2_data => ps2_data
166         );
167 end architecture top;