@@ -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;
12294endmodule
0 commit comments