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