spartan3e: init
[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                 sys_clk_real : 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         -- clk
35         signal sys_clk : 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 : 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
57         COMPONENT dcm_s3e
58         PORT(
59                 CLKIN_IN : IN std_logic;
60                 RST_IN : IN std_logic;
61                 CLKIN_IBUFG_OUT : OUT std_logic;
62                 CLK0_OUT : OUT std_logic;
63                 CLK0_OUT1 : OUT std_logic;
64                 LOCKED_OUT : OUT std_logic
65                 );
66         END COMPONENT;
67
68 begin
69         led0 <= '0';
70         led1 <= '1';
71
72         -- vga/ipcore
73         textmode_vga_inst : entity work.textmode_vga(struct)
74         generic map (
75                 VGA_CLK_FREQ => 25000000,
76                 BLINK_INTERVAL_MS => 500,
77                 SYNC_STAGES => 2
78         )
79         port map (
80                 sys_clk => sys_clk,
81                 sys_res_n => sys_res_n,
82                 command => command,
83                 command_data => command_data,
84                 free => free,
85                 vga_clk => vga_clk,
86                 vga_res_n => sys_res_n,
87                 vsync_n => vsync_n,
88                 hsync_n => hsync_n,
89                 r => r,
90                 g => g,
91                 b => b
92         );
93
94         -- pll fuer vga
95         dcm_s3e_inst : dcm_s3e PORT MAP(
96                 CLKIN_IN => sys_clk_real,
97                 RST_IN => sys_res_n,
98                 CLKIN_IBUFG_OUT => sys_clk,
99                 CLK0_OUT => vga_clk,
100                 CLK0_OUT1 => open,
101                 LOCKED_OUT => open
102         );
103
104         -- display
105         display_inst : entity work.display(beh)
106         port map (
107                 sys_clk => sys_clk,
108                 sys_res_n => sys_res_n,
109                 -- history
110                 d_new_eingabe => d_new_eingabe,
111                 d_new_result => d_new_result,
112                 d_zeile => d_zeile,
113                 d_spalte => d_spalte,
114                 d_get => d_get,
115                 d_done => d_done,
116                 d_char => d_char,
117                 -- vga
118                 command => command,
119                 command_data => command_data,
120                 free => free
121         );
122
123         -- history
124         history_inst : entity work.history(beh)
125         port map (
126                 sys_clk => sys_clk,
127                 sys_res_n => sys_res_n,
128                 -- scanner
129                 s_char => s_char,
130                 s_take => s_take,
131                 s_done => s_done,
132                 s_backspace => s_backspace,
133                 -- display
134                 d_new_eingabe => d_new_eingabe,
135                 d_new_result => d_new_result,
136                 d_zeile => d_zeile,
137                 d_spalte => d_spalte,
138                 d_get => d_get,
139                 d_done => d_done,
140                 d_char => d_char,
141                 -- TODO: tmp only!
142                 do_it => do_it,
143                 finished => finished
144         );
145
146         -- scanner
147         scanner_inst : entity work.scanner(beh)
148         port map (
149                 sys_clk => sys_clk,
150                 sys_res_n => sys_res_n,
151                 -- ps/2
152                 new_data => new_data,
153                 data => data,
154                 -- history
155                 s_char => s_char,
156                 s_take => s_take,
157                 s_done => s_done,
158                 s_backspace => s_backspace,
159                 -- TODO: parser. temporaer mit history verbunden
160                 do_it => do_it,
161                 finished => finished
162         );
163
164         -- ps/2
165         ps2_inst : entity work.ps2_keyboard_controller(beh)
166         generic map (
167                 CLK_FREQ => 50000000,
168                 SYNC_STAGES => 2
169         )
170         port map (
171                 sys_clk => sys_clk,
172                 sys_res_n => sys_res_n,
173                 -- scanner
174                 new_data => new_data,
175                 data => data,
176                 ps2_clk => ps2_clk,
177                 ps2_data => ps2_data
178         );
179 end architecture top;