-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmojo_top.luc
More file actions
188 lines (146 loc) · 5.98 KB
/
Copy pathmojo_top.luc
File metadata and controls
188 lines (146 loc) · 5.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
module mojo_top (
input clk, // 50MHz clock
input rst_n, // reset button (active low)
//output led [8], // 8 user controllable LEDs
input cclk, // configuration clock, AVR ready when high
input spi_ss, // AVR SPI Slave Select
input spi_mosi, // AVR SPI MOSI
input spi_sck, // AVR SPI Clock
input avr_tx, // AVR TX (FPGA RX)
input avr_rx_busy, // AVR RX buffer full
output led_r[2],
output led_g[2],
output led_b[2],
output led_addr[4],
output led_clk,
output led_lat,
output led_blk,
//output io_led [3][8], // LEDs on IO Shield
//output io_seg [8], // 7-segment LEDs on IO Shield
//output io_sel [4], // Digit select on IO Shield
//input io_button [5], // 5 buttons on IO Shield
//input io_dip [3][8], // DIP switches on IO Shield
input leftbutton,
input rightbutton,
input startbutton
) {
sig rst; // reset signal
.clk(clk) {
// The reset conditioner is used to synchronize the reset signal to the FPGA
// clock. This ensures the entire FPGA comes out of reset at the same time.
reset_conditioner reset_cond;
button_conditioner leftbutton_cond;
button_conditioner rightbutton_cond;
button_conditioner startbutton_cond;
edge_detector leftbutton_edge(#RISE(1), #FALL(0));
edge_detector rightbutton_edge(#RISE(1), #FALL(0));
edge_detector startbutton_edge(#RISE(1), #FALL(0));
.rst(rst){
//matrices
matrix_ram matrix_data;
matrix_writer matrix_writer;
gamefsm game_fsm;
ram_writer ram_writer;
genSky genSky;
}
}
always {
reset_cond.in = ~rst_n; // input raw inverted reset signal
rst = reset_cond.out; // conditioned reset
// led = c{3b0, 5b11111}; // connect buttons to LEDs
//led = 8h00; // turn LEDs off
led_r = 2x{b0};
led_g = 2x{b0};
led_b = 2x{b0};
led_addr = 4x{b0};
led_clk = b0;
led_lat = b0;
led_blk = b0;
//io_seg = 3x{c{8b0}};
//io_sel = 4x{b1};
// connect inputs of avr
//io_led = io_dip; // connect the DIP switches to the LEDs
/*
led_r=matrix.out_r;
led_g=matrix.out_g;
led_b=matrix.out_b;
led_addr=matrix.out_addr;
led_clk=matrix.out_clk;
led_lat=matrix.out_lat;
led_blk=matrix.out_blk;
*/
// set inputs to fsm fsmchick
// game_fsm.io_button = io_button;
// io_led[0] = game_fsm.debug;
// io_led[1] = game_fsm.debug1;
// io_led[2] = game_fsm.debug2;
/*
matrix_data.generateSkyBooltSky = b0;
matrix_data.shiftSkyBoolight = b0;
matrix_data.shiftChickenLeftleft = b0;
matrix_data.shiftChickenRightheck = b0;
matrix_data.check_lifet_en0= b1;
*/
// game_fsm.io_button = b1;
// game_fsm.buttonleft = redbutton;
// game_fsm.buttonright = whitebutton;
// game_fsm.buttonstart = bluebutton;
/* matrix_data.shiftSky = game_fsm.shift_sky_enable;
matrix_data.generateSky = game_fsm.generate_sky;
matrix_data.shiftchickenleft = game_fsm.shiftchickenleft_en;
matrix_data.shiftchickenright = game_fsm.shiftchickenright_en;
matrix_data.init_en = b1;
matrix_data.sky_col_check = game_fsm.skyCollisionCheck_en;*/
leftbutton_cond.in = leftbutton;
leftbutton_edge.in = leftbutton_cond.out;
rightbutton_cond.in = rightbutton;
rightbutton_edge.in = rightbutton_cond.out;
startbutton_cond.in = startbutton;
startbutton_edge.in = startbutton_cond.out;
matrix_data.top_row_data_in = ram_writer.write_data_top;
matrix_data.top_row_en = ram_writer.write_en_top;
matrix_data.top_row_address = ram_writer.write_address_top;
matrix_data.bottom_row_data_in = ram_writer.write_data_bottom;
matrix_data.bottom_row_en = ram_writer.write_en_bottom;
matrix_data.bottom_row_address = ram_writer.write_address_bottom;
matrix_data.startbutton = startbutton_edge.out;
ram_writer.data_read_top = matrix_data.top_row_data;
ram_writer.data_read_bottom = matrix_data.bottom_row_data;
game_fsm.right_button = rightbutton_edge.out;
game_fsm.left_button = leftbutton_edge.out;
game_fsm.start_button = startbutton_edge.out;
game_fsm.gameover = matrix_data.gameover;
//game_fsm.skyshifted = matrix_data.skyshifted;
//matrix_data.genSky = bluebutton_cond.out;
matrix_data.genSky = game_fsm.gen_sky_enable;
matrix_data.generateSky = genSky.sky;//game_fsm.generate_sky;
// matrix_data.generateSky = game_fsm.generate_sky;
matrix_data.shiftSky = startbutton_edge.out;//game_fsm.shift_sky_enable;
matrix_data.shiftchickenleft = leftbutton_edge.out; //game_fsm.shiftchickenleft_en;
matrix_data.shiftchickenright = rightbutton_edge.out;// game_fsm.shiftchickenright_en;
matrix_data.init_chicken_en = game_fsm.init_chicken_en;
matrix_data.sky_col_check = 0;//game_fsm.skyCollisionCheck_en;
game_fsm.chickenbuld = matrix_data.chickenbuild;
matrix_data.skywin = 0; //game_fsm.skywin;
matrix_data.chicken_location = 0;
// led = b11111111;
// led[2:0] = matrix_writer.row_index;
// led[7:4] = matrix_writer.col_index;
//led[2:0] = matrix_writer.debug;
//led[7:4] = b00000;
//led = game_fsm.debugled;
matrix_data.row_address = matrix_writer.row_index;
matrix_data.column_address = matrix_writer.col_index;
matrix_writer.data = matrix_data.out;
matrix_data.chickenwin = 0;//game_fsm.chickenWin;
matrix_data.start_en =game_fsm.start_en;
led_r = c{matrix_writer.red0, matrix_writer.red1};
led_g = c{ matrix_writer.green0, matrix_writer.green1};
led_b = c{ matrix_writer.blue0, matrix_writer.blue1};
led_addr = matrix_writer.address;
led_clk = matrix_writer.sclk_out;
led_lat = matrix_writer.latch;
led_blk = matrix_writer.blank;
//led = matrix_data.debug;
}
}