Hallo,
ich hab da ein kleineres Problem:
Ich habe einen code für eine Bildschirmausgabe über VGA geschrieben, bis
hierhin funktioniert auch alles. Allerdings würde ich jetzt gerne ein
Viereck ("Spielfigur") steuerbar/verschiebbar und zwar mithilfe der
Pfeiltasten auf der Tastatur machen. Mein code für das Steuerungsmodul:
1 | --Steuerung
|
2 |
|
3 | --**MAKE-Codes**
|
4 | --Pfeiltaste Oben 63h = 1100011
|
5 | --Pfeiltaste Unten 60h = 1100000
|
6 | --Pfeiltaste Links 61h = 1100001
|
7 | --Pfeiltaste Rechts 6Ah = 1101010
|
8 |
|
9 | --**Break-Codes**
|
10 | --Pfeiltaste Oben F063h = 1111000001100011
|
11 | --Pfeiltaste Unten F060h = 1111000001100000
|
12 | --Pfeiltaste Links F061h = 1111000001100001
|
13 | --Pfeiltaste Rechts F06Ah = 1111000001101010
|
14 |
|
15 | --**PS2 I/O**
|
16 | --http://www.computer-engineering.org/ps2protocol/
|
17 |
|
18 | --KBDATA Pin = G19
|
19 | --KBCLOCK Pin = F20 [10 - 16,7 Khz]
|
20 | --
|
21 | --vert_pos == Signal Oben
|
22 | --vert_neg == Signal Unten
|
23 | --hor_neg == Signal Links
|
24 | --hor_pos == Signal Rechts
|
25 |
|
26 |
|
27 | --*************************************************--
|
28 |
|
29 | ENTITY Steuerung IS
|
30 |
|
31 | PORT (
|
32 |
|
33 | KBclock_in : in STD_LOGIC;
|
34 | KBdata_in : in STD_LOGIC;
|
35 | vert_pos : out STD_LOGIC;
|
36 | vert_neg : out STD_LOGIC;
|
37 | hor_neg : out STD_LOGIC;
|
38 | hor_pos : out STD_LOGIC
|
39 |
|
40 |
|
41 | );
|
42 |
|
43 | END Steuerung;
|
44 |
|
45 |
|
46 | ARCHITECTURE Behavioral OF Steuerung IS
|
47 |
|
48 | SIGNAL Oben : STD_LOGIC := '0';
|
49 | SIGNAL Unten : STD_LOGIC := '0';
|
50 | SIGNAL Links : STD_LOGIC := '0';
|
51 | SIGNAL Rechts : STD_LOGIC := '0';
|
52 |
|
53 |
|
54 |
|
55 | BEGIN
|
56 | PROCESS (KBclock_in)
|
57 | BEGIN
|
58 |
|
59 | IF (KBclock_in'event AND KBclock_in='1') THEN
|
60 |
|
61 |
|
62 | --**Pfeiltaste oben**--
|
63 |
|
64 | --**Make**--
|
65 | IF (KBdata_in = "1100011") THEN
|
66 |
|
67 | Oben <= "0000000101";
|
68 |
|
69 | END IF;
|
70 |
|
71 | --**Break**--
|
72 | IF (KBdata_in = "1111000001100011") THEN
|
73 |
|
74 | Oben <= "0000000000";
|
75 |
|
76 | END IF;
|
77 |
|
78 |
|
79 | --**Pfeiltaste unten**--
|
80 |
|
81 | --**Make**--
|
82 | IF (KBdata_in = "1100000") THEN
|
83 |
|
84 | Unten <= "0000000101";
|
85 |
|
86 | END IF;
|
87 |
|
88 | --**Break**--
|
89 | IF (KBdata_in = "1111000001100000") THEN
|
90 |
|
91 | Unten <= "0000000000";
|
92 |
|
93 | END IF;
|
94 |
|
95 |
|
96 | --**Pfeiltaste links**--
|
97 |
|
98 | --**Make**--
|
99 | IF (KBdata_in = "1100001") THEN
|
100 |
|
101 | Links <= "0000000101";
|
102 |
|
103 | END IF;
|
104 |
|
105 | --**Break**--
|
106 | IF (KBdata_in = "1111000001100001") THEN
|
107 |
|
108 | Links <= "0000000000";
|
109 |
|
110 | END IF;
|
111 |
|
112 |
|
113 | --**Pfeiltaste rechts**--
|
114 |
|
115 | --**Make**--
|
116 | IF (KBdata_in = "1101010") THEN
|
117 |
|
118 | Rechts <= "0000000101";
|
119 |
|
120 | END IF;
|
121 |
|
122 | --**Break**--
|
123 | IF (KBdata_in = "1111000001101010") THEN
|
124 |
|
125 | Rechts <= "0000000000";
|
126 |
|
127 | END IF;
|
128 |
|
129 |
|
130 | END IF;
|
131 |
|
132 | END PROCESS;
|
133 |
|
134 |
|
135 | vert_pos <= Oben;
|
136 | vert_neg <= Unten;
|
137 | hor_neg <= Links;
|
138 | hor_pos <= Rechts;
|
139 |
|
140 |
|
141 | END Behavioral;
|
142 |
|
143 | --*************************************************--
|
Idee dahinter sollte sein das dass drücken einer Pfeiltaste den Wert von
5 speichert und in ein anderes Modul übergibt, in welchem der Code für
die Spielfigur ist. Dieser Wert wird also zu den vorhandenen
"Koordinaten" (Hsync/Vsync) der Spielfigur hinzu addiert.
Nun zu meinen fragen:
1. KBCLOCK ist ein pin des PS2 Anschlusses, hat die Tastatur einen
eigenen Frequenzgenerator oder muss ich die Frequenz mithilfe des FPGA's
bereitstellen?
2. KBDATA: Kann es sein dass die Daten hier seriell reinkommen? Also
müsste ich wenn ich so etwas machen will: KBdata_in = "1100011" erst
einen Seriell->Parallelwandler nach dem Dateneingang einbauen?