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