Stap 2: Knoppen en positie Array
Voor de drukknop en positie matrix module zijn er twee gebruikersinvoer, één voor het verplaatsen van de positie naar de linkerzijde en één voor de positie naar rechts verplaatst. Dit werd bereikt door het gebruik van de drukknoppen op de DE2-115. We moesten om te compenseren voor de onjuistheden die veroorzaakt door de mechanica van de knoppen, debounce hen. Wanneer een knop wordt ingedrukt, zal het totdat het stabiliseren waardoor vele positieve randen oscilleren. Dit wordt gecorrigeerd door de debouncing die slechts één positieve rand per push zal maken. De debouncing code werd aangepast van code op de website FPGA 4 Fun. We gebruikten een eindige toestandsmachine toewijzen waar de positie is in een matrix 3 bits. De 3 bit array is de output van de module en komt overeen met de positie van onze roerende object.
Debouncer Bron: http://www.fpga4fun.com/Debouncer2.html
Code:
draad L_idle = (L_state == L_sync_1);
draad L_cnt_max = & L_cnt; waar wanneer alle bits van PB_cnt 1's zijn
reg [15:0] R_cnt;
draad R_idle = (R_state == R_sync_1);
draad R_cnt_max = & R_cnt;
altijd clk)
if(L_idle)
L_cnt < = 0; er niets gebeurt
anders
beginnen
L_cnt < = L_cnt + 16' d1; Something's going on, het verhogen van de teller
if(L_cnt_max) L_state < = ~ L_state; Als de teller is maxed, PB veranderd!
einde
altijd clk)
if(R_idle)
R_cnt < = 0; er niets gebeurt
anders
beginnen
R_cnt < = R_cnt + 16' d1; Something's going on, het verhogen van de teller
if(R_cnt_max) R_state < = ~ R_state; Als de teller is maxed, PB veranderd!
einde
toewijzen van L_down = ~ L_idle & L_cnt_max & ~ L_state;
toewijzen van R_down = ~ R_idle & R_cnt_max & ~ R_state;
reg [0:3] Y1;
met de parameter [3:0] A = 3' b001, B = 3' b010, C = 3' b100, D = 3' b000;
altijd @ (posedge clk)
beginnen
Case(Y1)
A:
if(L_down)
beginnen
uit = B;
Y1 = B;
einde
B: beginnen
Als (R_down)
beginnen
uit = A;
Y1 = A;
einde
if(L_down)
beginnen
uit = C;
Y1 = C;
einde
einde
C:
Als (R_down)
beginnen
uit = B;
Y1 = B;
einde
D: beginnen
Y1 = B;
uit = B;
einde
endcase
einde
endmodule