cda8ee27c37ac4912ffafa2422edf9c095a93ba4
[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 : 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_zeile => d_zeile,
90                 d_spalte => d_spalte,
91                 d_get => d_get,
92                 d_done => d_done,
93                 d_char => d_char,
94                 -- vga
95                 command => command,
96                 command_data => command_data,
97                 free => free
98         );
99
100         -- history
101         history_inst : entity work.history(beh)
102         port map (
103                 sys_clk => sys_clk,
104                 sys_res_n => sys_res_n,
105                 -- scanner
106                 s_char => s_char,
107                 s_take => s_take,
108                 s_done => s_done,
109                 s_backspace => s_backspace,
110                 -- display
111                 d_new_eingabe => d_new_eingabe,
112                 d_new_result => d_new_result,
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                 -- TODO: tmp only!
119                 do_it => do_it,
120                 finished => finished
121         );
122
123         -- scanner
124         scanner_inst : entity work.scanner(beh)
125         port map (
126                 sys_clk => sys_clk,
127                 sys_res_n => sys_res_n,
128                 -- ps/2
129                 new_data => new_data,
130                 data => data,
131                 -- history
132                 s_char => s_char,
133                 s_take => s_take,
134                 s_done => s_done,
135                 s_backspace => s_backspace,
136                 -- TODO: parser. temporaer mit history verbunden
137                 do_it => do_it,
138                 finished => finished
139         );
140
141         -- ps/2
142         ps2_inst : entity work.ps2_keyboard_controller(beh)
143         generic map (
144                 CLK_FREQ => 33330000,
145                 SYNC_STAGES => 2
146         )
147         port map (
148                 sys_clk => sys_clk,
149                 sys_res_n => sys_res_n,
150                 -- scanner
151                 new_data => new_data,
152                 data => data,
153                 ps2_clk => ps2_clk,
154                 ps2_data => ps2_data
155         );
156 end architecture top;
157