Skip to content

Commit a7b7083

Browse files
author
zhouyiw2
committed
combined keyboard driver and decoder to keyboard handler
1 parent 43e71cf commit a7b7083

File tree

3 files changed

+72
-68
lines changed

3 files changed

+72
-68
lines changed

decoder.v

Lines changed: 0 additions & 39 deletions
This file was deleted.

hangman.v

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,21 @@ module hangman(
1313
assign clk = CLOCK_50;
1414
assign reset = ~KEY[0];
1515

16-
wire valid, makeBreak;
17-
wire [7:0] outCode;
18-
wire [4:0] outLetter;
19-
wire [29:0] word;
20-
wire [25:0] mask;
2116
wire load;
22-
reg [3:0] wrong_time;
23-
assign load = (makeBreak == 1'b1);
24-
assign LEDR[7] = load;
25-
26-
keyboard_press_driver k0(
27-
.CLOCK_50(CLOCK_50),
28-
.valid(valid),
29-
.makeBreak(makeBreak),
30-
.outCode(outCode),
31-
17+
wire [4:0] pressedLetter;
18+
keyboard_handler k0(
19+
.clk(clk),
20+
.reset(reset),
3221
.PS2_DAT(PS2_DAT),
3322
.PS2_CLK(PS2_CLK),
34-
35-
.reset(reset)
36-
);
37-
38-
assign LEDR[9] = valid;
39-
assign LEDR[8] = makeBreak;
4023

41-
decoder d0(
42-
.inCode(outCode),
43-
.outLetter(outLetter)
44-
);
24+
.pressed(load),
25+
.inputLetter(pressedLetter[4:0])
26+
);
27+
28+
wire [29:0] word;
29+
wire [25:0] mask;
30+
reg [3:0] wrong_time;
4531

4632
wire win_game, lost_game;
4733

@@ -51,7 +37,7 @@ module hangman(
5137
.clk(clk),
5238
.reset(reset),
5339

54-
.start_game(((outLetter == 5'd26) && load)),
40+
.start_game(((pressedLetter == 5'd26) && load)),
5541
.win_game(win_game),
5642
.lost_game((wrong_time == 1'b0)),
5743
.select(SW[3:0]),
@@ -68,7 +54,7 @@ module hangman(
6854
.clk(clk),
6955
.reset(reset),
7056
.load(((level_state == 2'd1) && load)),
71-
.load_x(outLetter),
57+
.load_x(pressedLetter),
7258

7359
.mask(mask),
7460

@@ -103,12 +89,12 @@ module hangman(
10389
);
10490

10591
hex_decoder h0(
106-
.hex_digit(outLetter[3:0]),
92+
.hex_digit(pressedLetter[3:0]),
10793
.segments(HEX0[6:0])
10894
);
10995

11096
hex_decoder h1(
111-
.hex_digit({3'b000, outLetter[4:4]}),
97+
.hex_digit({3'b000, pressedLetter[4]}),
11298
.segments(HEX1[6:0])
11399
);
114100

@@ -126,4 +112,6 @@ module hangman(
126112
.hex_digit(wrong_time),
127113
.segments(HEX4[6:0])
128114
);
115+
116+
assign LEDR[9] = load;
129117
endmodule

keyboard_handler.v

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
module keyboard_handler(
2+
input clk, reset,
3+
input PS2_DAT, PS2_CLK,
4+
5+
output pressed,
6+
output reg [4:0] inputLetter
7+
);
8+
9+
wire [7:0] keyboardOutCode;
10+
11+
keyboard_press_driver kDriver0(
12+
.CLOCK_50(clk),
13+
.makeBreak(pressed),
14+
.outCode(keyboardOutCode[7:0]),
15+
16+
.PS2_DAT(PS2_DAT),
17+
.PS2_CLK(PS2_CLK),
18+
19+
.reset(reset)
20+
);
21+
22+
always @(*) begin
23+
case (keyboardOutCode[7:0])
24+
8'h1C: inputLetter[4:0] = 5'd0; // A
25+
8'h32: inputLetter[4:0] = 5'd1;
26+
8'h21: inputLetter[4:0] = 5'd2;
27+
8'h23: inputLetter[4:0] = 5'd3;
28+
8'h24: inputLetter[4:0] = 5'd4;
29+
8'h2B: inputLetter[4:0] = 5'd5;
30+
8'h34: inputLetter[4:0] = 5'd6;
31+
8'h33: inputLetter[4:0] = 5'd7;
32+
8'h43: inputLetter[4:0] = 5'd8;
33+
8'h3B: inputLetter[4:0] = 5'd9;
34+
8'h42: inputLetter[4:0] = 5'd10;
35+
8'h4B: inputLetter[4:0] = 5'd11;
36+
8'h3A: inputLetter[4:0] = 5'd12;
37+
8'h31: inputLetter[4:0] = 5'd13;
38+
8'h44: inputLetter[4:0] = 5'd14;
39+
8'h4D: inputLetter[4:0] = 5'd15;
40+
8'h15: inputLetter[4:0] = 5'd16;
41+
8'h2D: inputLetter[4:0] = 5'd17;
42+
8'h1B: inputLetter[4:0] = 5'd18;
43+
8'h2C: inputLetter[4:0] = 5'd19;
44+
8'h3C: inputLetter[4:0] = 5'd20;
45+
8'h2A: inputLetter[4:0] = 5'd21;
46+
8'h1D: inputLetter[4:0] = 5'd22;
47+
8'h22: inputLetter[4:0] = 5'd23;
48+
8'h35: inputLetter[4:0] = 5'd24;
49+
8'h1A: inputLetter[4:0] = 5'd25; // Z
50+
8'h5A: inputLetter[4:0] = 5'd26; // Enter
51+
default : inputLetter [4:0] = 5'd27;
52+
endcase
53+
end
54+
55+
endmodule

0 commit comments

Comments
 (0)