Skip to content

Commit 00cefdd

Browse files
author
Even Zhou
committed
rearrange
1 parent e445fe1 commit 00cefdd

File tree

5 files changed

+123
-98
lines changed

5 files changed

+123
-98
lines changed

game_handler.v

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
module game_handler(
2+
input clk, reset,
3+
input load,
4+
input [4:0] load_x,
5+
input [25:0] mask,
6+
7+
output reg [25:0] guessed_mask,
8+
output [1:0] game_state,
9+
output reg [3:0] wrong_time
10+
);
11+
12+
localparam START = 2'd0,
13+
INGAME = 2'd1,
14+
WINGAME = 2'd2,
15+
LOSTGAME = 2'd3;
16+
17+
wire win, wrong;
18+
19+
always(@negedge wrong, posedge reset) begin
20+
if (reset)
21+
wrong_time <= 4'd10;
22+
else if (load)
23+
wrong_time <= wrong_time - 1'd1;
24+
end
25+
26+
game_status status0(
27+
.clk(clk),
28+
.reset(reset),
29+
30+
.start_game((load_x[4:0] == 5'd26) && load),
31+
.win_game(win),
32+
.lost_game(wrong_time[4:0] == 1'd0),
33+
34+
.current_state(game_state[1:0])
35+
);
36+
37+
game_process process0(
38+
.clk(clk),
39+
.reset(reset),
40+
41+
.load(((game_state[1:0] == INGAME) && load)),
42+
.load_x(load_x[4:0]),
43+
.mask(mask[25:0]),
44+
45+
.win(win),
46+
.wrong(wrong),
47+
.current_state(guessed_mask[25:0])
48+
);
49+
50+
endmodule
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
module game_state(
2-
input clk, reset, load,
3-
input [4:0] load_x,
4-
input [25:0] mask,
1+
module game_process(
2+
input clk, reset,
3+
input load,
4+
input [4:0] load_x,
5+
input [25:0] mask,
56

67
output reg win, wrong,
7-
output reg [25:0] current_state);
8+
output reg [25:0] current_state
9+
);
10+
11+
reg [25:0] next_state;
812

9-
reg [25:0] next_state;
10-
1113
always @(posedge clk) begin
1214
if (reset) begin
1315
current_state <= 26'b0;
1416
next_state <= 26'b0;
1517
wrong <= 1'b0;
1618
end
17-
else
18-
begin
19+
else begin
1920
next_state <= current_state;
2021
if (load) begin
2122
next_state[load_x] = 1'b1;
@@ -25,4 +26,5 @@ module game_state(
2526
end
2627
end
2728
end
29+
2830
endmodule

level_select.v renamed to game_status.v

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
module level_select(
1+
module game_status(
22
input clk, reset,
3-
43
input start_game, win_game, lost_game,
54

6-
output reg [3:0] current_state);
7-
8-
reg [3:0] next_state;
9-
5+
output reg [1:0] current_state
6+
);
7+
108
localparam START = 2'd0,
119
INGAME = 2'd1,
1210
WINGAME = 2'd2,
1311
LOSTGAME = 2'd3;
1412

15-
13+
reg [1:0] next_state;
14+
1615
always @(*) begin
1716
case (current_state)
1817
START: next_state = start_game ? INGAME : START;
@@ -37,4 +36,5 @@ module level_select(
3736
else
3837
current_state <= next_state;
3938
end
39+
4040
endmodule

hangman.v

Lines changed: 46 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -7,81 +7,62 @@ module hangman(
77
output [9:0] LEDR,
88
output [6:0] HEX0, HEX1, HEX2, HEX3, HEX4,
99
output VGA_CLK, VGA_HS, VGA_VS, VGA_BLANK_N, VGA_SYNC_N,
10-
output [9:0] VGA_R, VGA_G, VGA_B);
11-
10+
output [9:0] VGA_R, VGA_G, VGA_B
11+
);
12+
1213
wire clk, reset;
14+
wire load;
1315
wire [3:0] word_select;
16+
wire [29:0] word;
17+
wire [25:0] mask, guessed_mask;
18+
wire [4:0] pressedLetter;
19+
wire [1:0] game_state;
20+
wire [3:0] wrong_time;
1421
assign clk = CLOCK_50;
1522
assign reset = ~KEY[0];
1623
assign word_select[3:0] = SW[3:0];
1724

18-
wire load;
19-
wire [4:0] pressedLetter;
25+
word_ram wr0(
26+
.clock(clk),
27+
28+
.address(word_select[3:0]),
29+
.data(56'd0),
30+
.wren(1'b0),
31+
32+
.q({word[29:0], mask[25:0]})
33+
);
34+
2035
keyboard_handler k0(
2136
.clk(clk),
2237
.reset(reset),
38+
2339
.PS2_DAT(PS2_DAT),
2440
.PS2_CLK(PS2_CLK),
2541

2642
.pressed(load),
2743
.inputLetter(pressedLetter[4:0])
2844
);
2945

30-
wire [29:0] word;
31-
wire [25:0] mask;
32-
word_ram wr0(
33-
.address(word_select[3:0]),
34-
.clock(clk),
35-
.data(56'd0),
36-
.wren(1'b0),
37-
.q({word[29:0], mask[25:0]})
38-
);
39-
reg [3:0] wrong_time;
40-
41-
wire win_game, lost_game;
42-
43-
wire [3:0] level_state;
44-
assign LEDR[3:0] = level_state;
45-
level_select l0(
46-
.clk(clk),
47-
.reset(reset),
48-
49-
.start_game(((pressedLetter == 5'd26) && load)),
50-
.win_game(win_game),
51-
.lost_game((wrong_time == 1'b0)),
52-
53-
.current_state(level_state)
54-
);
55-
56-
wire [25:0] state;
57-
wire wrong;
58-
game_state g0(
46+
game_handler g0(
5947
.clk(clk),
6048
.reset(reset),
61-
.load(((level_state == 2'd1) && load)),
62-
.load_x(pressedLetter),
63-
64-
.mask(mask),
65-
66-
.win(win_game),
67-
.wrong(wrong),
68-
69-
.current_state(state)
70-
);
71-
72-
always @(negedge wrong, posedge reset) begin
73-
if (reset)
74-
wrong_time <= 4'd4;
75-
else if(load)
76-
wrong_time <= wrong_time - 1'd1;
77-
end
78-
79-
vga v0(
49+
50+
.load(load),
51+
.load_x(pressedLetter[4:0]),
52+
.mask(mask[25:0]),
53+
54+
.guessed_mask(guessed_mask[25:0]),
55+
.game_state(game_state[1:0]),
56+
.wrong_time(wrong_time[3:0])
57+
);
58+
59+
vga_handler v0(
8060
.clk(clk),
8161
.reset(reset),
82-
.state(level_state[3:0]),
83-
.word(word),
84-
.mask(state),
62+
63+
.state(game_state[1:0]),
64+
.word(word[29:0]),
65+
.mask(guessed_mask[25:0]),
8566

8667
.VGA_CLK(VGA_CLK),
8768
.VGA_HS(VGA_HS),
@@ -91,32 +72,23 @@ module hangman(
9172
.VGA_R(VGA_R[9:0]),
9273
.VGA_B(VGA_B[9:0]),
9374
.VGA_G(VGA_G[9:0])
94-
);
95-
75+
);
76+
9677
hex_decoder h0(
9778
.hex_digit(pressedLetter[3:0]),
9879
.segments(HEX0[6:0])
99-
);
100-
80+
);
81+
10182
hex_decoder h1(
10283
.hex_digit({3'b000, pressedLetter[4]}),
10384
.segments(HEX1[6:0])
104-
);
105-
106-
hex_decoder h2(
107-
.hex_digit(state[3:0]),
108-
.segments(HEX2[6:0])
109-
);
110-
111-
hex_decoder h3(
112-
.hex_digit(state[7:4]),
113-
.segments(HEX3[6:0])
114-
);
115-
85+
);
86+
11687
hex_decoder h4(
117-
.hex_digit(wrong_time),
88+
.hex_digit(wrong_time[3:0]),
11889
.segments(HEX4[6:0])
119-
);
120-
90+
);
91+
92+
assign LEDR[1:0] = game_state[1:0];
12193
assign LEDR[9] = load;
12294
endmodule

vga.v renamed to vga_handler.v

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
module vga(
1+
module vga_handler(
22
input clk, reset,
3-
input [3:0] state,
3+
input [1:0] game_state,
44
input [29:0] word,
55
input [25:0] mask,
66

77
output VGA_CLK, VGA_HS, VGA_VS, VGA_BLANK_N, VGA_SYNC_N,
8-
output [9:0] VGA_R, VGA_G, VGA_B);
9-
8+
output [9:0] VGA_R, VGA_G, VGA_B
9+
);
10+
1011
reg [2:0] colour;
1112
reg [8:0] x, position_x;
1213
reg [7:0] y, position_y;
@@ -37,11 +38,11 @@ module vga(
3738
defparam VGA.BACKGROUND_IMAGE = "init_vga.mif";
3839

3940
letter_ram lr0(
40-
.address(letter),
41+
.address(letter[4:0]),
4142
.clock(clk),
4243
.data(64'b0),
4344
.wren(1'b0),
44-
.q(letter_writeEn)
45+
.q(letter_writeEn[63:0])
4546
);
4647

4748
always @(posedge clk) begin
@@ -62,13 +63,13 @@ module vga(
6263
end
6364
end
6465

65-
localparam START = 2'd0,
66+
localparam START = 2'd0,
6667
INGAME = 2'd1,
6768
WINGAME = 2'd2,
6869
LOSTGAME = 2'd3;
6970

7071
always @(*) begin
71-
case (state)
72+
case (game_state)
7273
START: begin
7374
colour = 3'b000;
7475
writeEn = 1'b1;

0 commit comments

Comments
 (0)