1 | ----------------------------------------------------------------------------------
|
2 | -- Company:
|
3 | -- Engineer:
|
4 | --
|
5 | -- Create Date: 12:20:00 03/25/2013
|
6 | -- Design Name:
|
7 | -- Module Name: Farbansteuerung - Behavioral
|
8 | -- Project Name:
|
9 | -- Target Devices:
|
10 | -- Tool versions:
|
11 | -- Description:
|
12 | --
|
13 | -- Dependencies:
|
14 | --
|
15 | -- Revision:
|
16 | -- Revision 0.01 - File Created
|
17 | -- Additional Comments:
|
18 | --
|
19 | ----------------------------------------------------------------------------------
|
20 | library IEEE;
|
21 | use IEEE.STD_LOGIC_1164.ALL;
|
22 | use IEEE.STD_LOGIC_ARITH.ALL;
|
23 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
24 |
|
25 |
|
26 | entity Farbansteuerung is
|
27 |
|
28 | PORT (
|
29 | REDout : OUT std_logic_vector (2 DOWNTO 0);
|
30 | BLUEout : OUT std_logic_vector (2 DOWNTO 0);
|
31 | GREENout : OUT std_logic_vector (2 DOWNTO 0);
|
32 | vz_inoutin : IN std_logic_vector (9 downto 0);
|
33 | hz_inoutin : IN std_logic_vector (9 downto 0);
|
34 | clk25in : IN std_logic;
|
35 | reset_freigabe_in : IN std_logic;
|
36 | kollision_out : OUT std_logic;
|
37 | bewegung_oben_in : IN std_logic_vector(9 downto 0);
|
38 | bewegung_unten_in : IN std_logic_vector(9 downto 0);
|
39 | bewegung_rechts_in : IN std_logic_vector(9 downto 0);
|
40 | bewegung_links_in : IN std_logic_vector(9 downto 0)
|
41 | --mauer_reset_out : OUT std_logic_vector (9 downto 0)
|
42 | );
|
43 |
|
44 | end Farbansteuerung;
|
45 |
|
46 | architecture Behavioral of Farbansteuerung is
|
47 |
|
48 | --signal mauer_reset: std_logic_vector (9 DOWNTO 0);
|
49 |
|
50 | signal kollision: std_logic := '0';
|
51 |
|
52 | begin
|
53 |
|
54 | process(clk25in,reset_freigabe_in)
|
55 |
|
56 |
|
57 | variable schwarz: std_logic_vector(1 downto 0) := "00";
|
58 | variable spielfigur_x : std_logic_vector(9 downto 0) := "0010001110"; -- + bewegung_rechts_in - bewegung_links_in;
|
59 | variable spielfigur_y : std_logic_vector(9 downto 0) := "0111101111"; -- - bewegung_oben_in + bewegung_unten_in;
|
60 |
|
61 | begin
|
62 |
|
63 | if (clk25in'EVENT AND clk25in = '1') then
|
64 |
|
65 |
|
66 |
|
67 | --mauer_reset <= "0010101011" + bewegung_rechts_in - bewegung_links_in;
|
68 |
|
69 |
|
70 | if(reset_freigabe_in = '1')then
|
71 | REDout <= "000";
|
72 | BLUEout <= "000";
|
73 | GREENout <= "000";
|
74 |
|
75 |
|
76 | if
|
77 | hz_inoutin < "0010010000" --81 positionierungseinstellung bildschirm 21/70
|
78 | or hz_inoutin > "1100010000" --784
|
79 | or vz_inoutin < "0000000011" --3
|
80 | or vz_inoutin > "1000001001" --521
|
81 |
|
82 | THEN
|
83 | REDout <= "000";
|
84 | BLUEout <= "000";
|
85 | GREENout <= "000";
|
86 |
|
87 |
|
88 | --spielfigur (blue)
|
89 | elsif
|
90 | (
|
91 | -- (hz_inoutin > "0010001110" + bewegung_rechts_in - bewegung_links_in) --142
|
92 | --AND (hz_inoutin < "0010101011" + bewegung_rechts_in - bewegung_links_in) --171
|
93 | --AND (vz_inoutin > "0111101111" - bewegung_oben_in + bewegung_unten_in) --495
|
94 | --AND (vz_inoutin < "1000001001" - bewegung_oben_in + bewegung_unten_in) --521
|
95 |
|
96 | -- (hz_inoutin = spielfigur_x) --27 "0000011011"
|
97 | -- AND (vz_inoutin = spielfigur_y) --24 "0000011000"
|
98 |
|
99 |
|
100 | (hz_inoutin > spielfigur_x + bewegung_rechts_in - bewegung_links_in)
|
101 | AND (hz_inoutin < spielfigur_x + bewegung_rechts_in - bewegung_links_in + "0000011011")
|
102 | AND (vz_inoutin > spielfigur_y - bewegung_oben_in + bewegung_unten_in)
|
103 | AND (vz_inoutin < spielfigur_y - bewegung_oben_in + bewegung_unten_in + "0000011000")
|
104 |
|
105 | )
|
106 |
|
107 | THEN
|
108 | REDout <= "000";
|
109 | BLUEout <= "111";
|
110 | GREENout <= "000";
|
111 |
|
112 |
|
113 | --Kollison--
|
114 |
|
115 | --ELSIF
|
116 | --(
|
117 | -- REDout = "000"
|
118 | -- AND BLUEout = "000"
|
119 | -- AND GREENout = "000"
|
120 | --)
|
121 |
|
122 | --THEN
|
123 | --schwarz <= "0000000001";
|
124 |
|
125 |
|
126 | --ELSE
|
127 | --schwarz <= "0000000000";
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 | ELSIF
|
134 | (
|
135 |
|
136 | schwarz = spielfigur_x + bewegung_rechts_in - bewegung_links_in - "0000000001"
|
137 | OR schwarz = spielfigur_x + bewegung_rechts_in - bewegung_links_in + "0000011100"
|
138 | OR schwarz = spielfigur_y - bewegung_oben_in + bewegung_unten_in
|
139 | OR schwarz = spielfigur_y - bewegung_oben_in + bewegung_unten_in + "0000011001"
|
140 |
|
141 | )
|
142 |
|
143 | THEN
|
144 | kollision <= '1';
|
145 |
|
146 |
|
147 | --ELSE
|
148 | --kollision <= '0';
|
149 |
|
150 |
|
151 |
|
152 | --Leveldesign
|
153 | --Hindernis (schwarz)
|
154 | --1
|
155 | ELSIF
|
156 | ( (hz_inoutin > "0011000001") --192
|
157 | AND (hz_inoutin < "0011001011") --203
|
158 | AND (vz_inoutin > "0001011010") --90
|
159 | AND (vz_inoutin < "1000001001") --521
|
160 | )
|
161 |
|
162 | --2
|
163 | OR
|
164 | ( (hz_inoutin > "0011111101") --253
|
165 | AND (hz_inoutin < "0100001000") --264
|
166 | AND (vz_inoutin > "0000100111") --39
|
167 | AND (vz_inoutin < "0101100000") --352
|
168 | )
|
169 |
|
170 | --3
|
171 | OR
|
172 | ( (hz_inoutin > "0011001010") --202
|
173 | AND (hz_inoutin < "0101000011") --323
|
174 | AND (vz_inoutin > "0110010011") --403
|
175 | AND (vz_inoutin < "0110011110") --414
|
176 | )
|
177 |
|
178 | --4
|
179 | OR
|
180 | ( (hz_inoutin > "0100111000") --312
|
181 | AND (hz_inoutin < "0101000011") --323
|
182 | AND (vz_inoutin > "0011010010") --210
|
183 | AND (vz_inoutin < "0110011110") --414
|
184 | )
|
185 |
|
186 | --5
|
187 | OR
|
188 | ( (hz_inoutin > "0100111000") --312
|
189 | AND (hz_inoutin < "1010011010") --666
|
190 | AND (vz_inoutin > "0011010010") --210
|
191 | AND (vz_inoutin < "0011011101") --221
|
192 | )
|
193 |
|
194 | --6
|
195 | OR
|
196 | ( (hz_inoutin > "1010001111") --655
|
197 | AND (hz_inoutin < "1010011010") --666
|
198 | AND (vz_inoutin > "0001011010") --90
|
199 | AND (vz_inoutin < "0011011101") --221
|
200 | )
|
201 |
|
202 | --7
|
203 | OR
|
204 | ( (hz_inoutin > "0100111011") --315
|
205 | AND (hz_inoutin < "1010011010") --666
|
206 | AND (vz_inoutin > "0001011010") --90
|
207 | AND (vz_inoutin < "0001100101") --101
|
208 | )
|
209 |
|
210 | --8
|
211 | OR
|
212 | ( (hz_inoutin > "0011111101") --253
|
213 | AND (hz_inoutin < "1001100111") --615
|
214 | AND (vz_inoutin > "0010010110") --150
|
215 | AND (vz_inoutin < "0010100001") --161
|
216 | )
|
217 |
|
218 | --9
|
219 | OR
|
220 | ( (hz_inoutin > "1011001010") --714
|
221 | AND (hz_inoutin < "1011010101") --725
|
222 | AND (vz_inoutin > "0000100111") --39
|
223 | AND (vz_inoutin < "0111010110") --470
|
224 | )
|
225 |
|
226 | --10
|
227 | OR
|
228 | ( (hz_inoutin > "0101110101") --373
|
229 | AND (hz_inoutin < "1011010101") --725
|
230 | AND (vz_inoutin > "0100001111") --271
|
231 | AND (vz_inoutin < "0100011010") --282
|
232 | )
|
233 |
|
234 | --11
|
235 | OR
|
236 | ( (hz_inoutin > "0101110101") --373
|
237 | AND (hz_inoutin < "0110000000") --384
|
238 | AND (vz_inoutin > "0100001111") --271
|
239 | AND (vz_inoutin < "0111010110") --470
|
240 | )
|
241 |
|
242 | --12
|
243 | OR
|
244 | ( (hz_inoutin > "0011111110") --354
|
245 | AND (hz_inoutin < "0110000000") --384
|
246 | AND (vz_inoutin > "0111001011") --459
|
247 | AND (vz_inoutin < "0111010110") --470
|
248 | )
|
249 |
|
250 | --13
|
251 | OR
|
252 | ( (hz_inoutin > "0111110100") --500
|
253 | AND (hz_inoutin < "0111111111") --511
|
254 | AND (vz_inoutin > "0101001101") --333
|
255 | AND (vz_inoutin < "1000001001") --521
|
256 | )
|
257 |
|
258 |
|
259 | THEN
|
260 | REDout <= "000";
|
261 | BLUEout <= "000";
|
262 | GREENout <= "000";
|
263 | schwarz := "01";
|
264 |
|
265 |
|
266 | --Ziel
|
267 | ELSIF
|
268 | ( (hz_inoutin > "1011010100") --724
|
269 | AND (hz_inoutin < "1100010010") --786
|
270 | AND (vz_inoutin > "0000100111") --39
|
271 | AND (vz_inoutin < "0001000001") --65
|
272 | )
|
273 |
|
274 |
|
275 | THEN
|
276 | REDout <= "000";
|
277 | BLUEout <= "000";
|
278 | GREENout <= "111";
|
279 |
|
280 |
|
281 | else
|
282 | REDout <= "111";
|
283 | BLUEout <= "111";
|
284 | GREENout <= "111";
|
285 | --Kollision--
|
286 | schwarz := "00";
|
287 | kollision <= '0';
|
288 |
|
289 |
|
290 | END IF;
|
291 | END IF;
|
292 | end if;
|
293 |
|
294 |
|
295 |
|
296 | end process;
|
297 |
|
298 | --mauer_reset_out <= mauer_reset;
|
299 | kollision_out <= kollision;
|
300 |
|
301 | end Behavioral;
|