L
lekhoi
Guest
Hi momački!
Pomažem kod za Miš sučelje, ali to još uvijek ne rade.Može bilo tko pomoć mene to riješiti?
`Kronologija 1ns / 1ps
////////////////////////////////////////////////// //////////////////////////////
/ / Poduzeće:
/ / Projekcija:
/ /
/ / Kreiraj Date: 04/20/06 19:54:03
/ / Design Name:
/ / Naziv Modula: dgfd
/ / Naziv projekta:
/ / Target device:
/ / Alat verzije:
/ / Opis:
/ /
/ / Ovisnosti:
/ /
/ / Revizija:
/ / Revizija 0,01 - datoteka stvorena
/ / Dodatni Komentirajte:
/ /
////////////////////////////////////////////////// //////////////////////////////
`Resetall
`Vremenske rokove 1ns/100ps
`Definirati TOTAL_BITS 33 / / Broj bitova u jednom puni paketmodul ps2_mouse_interface (
CLK,
reset,
ps2_clk,
ps2_data,
left_button,
right_button,
x_increment,
y_increment,
data_ready, / / rx_read_o
čitati, / / rx_read_ack_i
error_no_ack
);
/ / Parametri
/ / Vrijednost vremena može biti i do (2 ^ bita) uključivo.
parametar WATCHDOG_TIMER_VALUE_PP = 19660 / / Broj sys_clks za 400usec.
parametar WATCHDOG_TIMER_BITS_PP = 15; / / Broj bitova potreban za vrijeme
parametar DEBOUNCE_TIMER_VALUE_PP = 186; / / Broj sys_clks za debounce
parametar DEBOUNCE_TIMER_BITS_PP = 8; / / Broj bitova potreban za vrijemeparametar m1_clk_h = 0;
parametar m1_falling_edge = 1;
parametar m1_falling_wait = 3;
parametar m1_clk_l = 2;
parametar m1_rising_edge = 6;
parametar m1_rising_wait = 4;
parametar m2_reset = 14;
parametar m2_wait = 0;
parametar m2_gather = 1;
parametar m2_verify = 3;
parametar m2_use = 2;
parametar m2_hold_clk_l = 6;
parametar m2_data_low_1 = 4;
parametar m2_data_high_1 = 5;
parametar m2_data_low_2 = 7;
parametar m2_data_high_2 = 8;
parametar m2_data_low_3 = 9;
parametar m2_data_high_3 = 11;
parametar m2_error_no_ack = 15;
parametar m2_await_response = 10;
parametar m3_data_ready = 1;
parametar m3_data_ready_ack = 0;
/ / / I deklaracije
CLK ulaz;
reset ulaz;
inout ps2_clk;
inout ps2_data;
izlaz left_button;
izlaz right_button;
izlaz [8:0] x_increment;
izlaz [8:0] y_increment;
izlaz data_ready;
ulaz pročitati;
izlaz error_no_ack;
reg left_button;
reg right_button;
reg [8:0] x_increment;
reg [8:0] y_increment;
reg data_ready;
reg error_no_ack;
/ / Interni signal deklaracije
watchdog_timer_done žice;
debounce_timer_done žice;
packet_good žice;
reg [`TOTAL_BITS-1: 0] q; / / taktom
reg [2:0] m1_state;
reg [2:0] m1_next_state;
reg [3:0] m2_state;
reg [3:0] m2_next_state;
reg m3_state;
reg m3_next_state;
reg [5:0] bit_count; / / Bit counter
Reg [WATCHDOG_TIMER_BITS_PP-1: 0] watchdog_timer_count;
Reg [DEBOUNCE_TIMER_BITS_PP-1: 0] debounce_timer_count;
reg. ps2_clk_hi_z; / / Bez tipkovnicu, visoka Z jednaka 1 zbog pullups.
reg. ps2_data_hi_z; / / Bez tipkovnicu, visoka Z jednaka 1 zbog pullups.
reg. clean_clk; / / Debounced izlaz iz M1, slijedi ps2_clk.
reg. rising_edge; / / izlaz iz M1 automat.
reg. falling_edge; / / izlaz iz M1 automat.
reg. output_strobe; / / Zasuni podataka podataka u izlazne registre
//------------------------------------------------ --------------------------
/ Modul kod
dodijeliti ps2_clk = ps2_clk_hi_z? 1'bZ: 1'b0;
dodijeliti ps2_data = ps2_data_hi_z? 1'bZ: 1'b0;
/ / Državni registar
Uvijek @ (posedge clk)
početak: m1_state_register
if (reset) m1_state <= m1_clk_h;
else m1_state <= m1_next_state;
kraj
/ / Prijelaza stanja logika
Uvijek @ (m1_state
ili ps2_clk
ili debounce_timer_done
ili watchdog_timer_done
)
početak: m1_state_logic
/ / Izlaz signala zadane na tu vrijednost, osim ako se promijenilo u državi stanju.
clean_clk <= 0;
rising_edge <= 0;
falling_edge <= 0;
slučaju (m1_state)
m1_clk_h:
početi
clean_clk <= 1;
ako (~ ps2_clk) m1_next_state <= m1_falling_edge;
else m1_next_state <= m1_clk_h;
kraj
m1_falling_edge:
početi
falling_edge <= 1;
m1_next_state <= m1_falling_wait;
kraj
m1_falling_wait:
početi
ako (debounce_timer_done) m1_next_state <= m1_clk_l;
else m1_next_state <= m1_falling_wait;
kraj
m1_clk_l:
početi
ako (ps2_clk) m1_next_state <= m1_rising_edge;
else m1_next_state <= m1_clk_l;
kraj
m1_rising_edge:
početi
rising_edge <= 1;
m1_next_state <= m1_rising_wait;
kraj
m1_rising_wait:
početi
clean_clk <= 1;
ako (debounce_timer_done) m1_next_state <= m1_clk_h;
else m1_next_state <= m1_rising_wait;
kraj
default: m1_next_state <= m1_clk_h;
endcase
kraj/ / Državni registar
Uvijek @ (posedge clk)
početak: m2_state_register
if (reset) m2_state <= m2_reset;
else m2_state <= m2_next_state;
kraj
/ / Prijelaza stanja logika
Uvijek @ (m2_state
ili q
ili falling_edge
ili rising_edge
ili watchdog_timer_done
ili bit_count
ili packet_good
ili ps2_data
ili clean_clk
)
početak: m2_state_logic
/ / Izlaz signala zadane na tu vrijednost, osim ako se promijenilo u državi stanju.
ps2_clk_hi_z <= 1;
ps2_data_hi_z <= 1;
error_no_ack <= 0;
output_strobe <= 0;
slučaju (m2_state)
m2_reset: / / Nakon reseta šalje naredbu miša.
početi
m2_next_state <= m2_hold_clk_l;
kraj
m2_wait:
početi
ako (falling_edge) m2_next_state <= m2_gather;
else m2_next_state <= m2_wait;
kraj
m2_gather:
početi
if (watchdog_timer_done & & (bit_count == `TOTAL_BITS))
m2_next_state <= m2_verify;
else if (watchdog_timer_done & & (bit_count <`TOTAL_BITS))
m2_next_state <= m2_hold_clk_l;
else m2_next_state <= m2_gather;
kraj
m2_verify:
početi
ako (packet_good) m2_next_state <= m2_use;
else m2_next_state <= m2_wait;
kraj
m2_use:
početi
output_strobe <= 1;
m2_next_state <= m2_wait;
krajm2_hold_clk_l:
početi
ps2_clk_hi_z <= 0; / / Time se pokreće watchdog timer!
if (watchdog_timer_done & & ~ clean_clk) m2_next_state <= m2_data_low_1;
else m2_next_state <= m2_hold_clk_l;
kraj
m2_data_low_1:
početi
ps2_data_hi_z <= 0; / / Obrasci početni bit, d [0] d [1]
if (rising_edge & & (bit_count == 3))
m2_next_state <= m2_data_high_1;
else m2_next_state <= m2_data_low_1;
kraj
m2_data_high_1:
početi
ps2_data_hi_z <= 1; / / Obrasci D [2]
if (rising_edge & & (bit_count == 4))
m2_next_state <= m2_data_low_2;
else m2_next_state <= m2_data_high_1;
kraj
m2_data_low_2:
početi
ps2_data_hi_z <= 0; / / Obrasci D [3]
if (rising_edge & & (bit_count == 5))
m2_next_state <= m2_data_high_2;
else m2_next_state <= m2_data_low_2;
kraj
m2_data_high_2:
početi
ps2_data_hi_z <= 1; / / Obrasci D [4], d [5], d [6], d [7]
if (rising_edge & & (bit_count == 9))
m2_next_state <= m2_data_low_3;
else m2_next_state <= m2_data_high_2;
kraj
m2_data_low_3:
početi
ps2_data_hi_z <= 0; / / Obrasci bit parnosti
ako (rising_edge) m2_next_state <= m2_data_high_3;
else m2_next_state <= m2_data_low_3;
kraj
m2_data_high_3:
početi
ps2_data_hi_z <= 1; / / Dopusti miš povući niske (ACK puls)
if (falling_edge & & ps2_data) m2_next_state <= m2_error_no_ack;
else if (falling_edge & & ~ ps2_data)
m2_next_state <= m2_await_response;
else m2_next_state <= m2_data_high_3;
kraj
m2_error_no_ack:
početi
error_no_ack <= 1;
m2_next_state <= m2_error_no_ack;
kraj
m2_await_response:
početi
if (bit_count == 22) m2_next_state <= m2_verify;
else m2_next_state <= m2_await_response;
kraj
default: m2_next_state <= m2_wait;
endcase
kraj/ / Državni registar
Uvijek @ (posedge clk)
početak: m3_state_register
if (reset) m3_state <= m3_data_ready_ack;
else m3_state <= m3_next_state;
kraj
/ / Prijelaza stanja logika
Uvijek @ (m3_state ili output_strobe ili pročitati)
početak: m3_state_logic
slučaju (m3_state)
m3_data_ready_ack:
početi
data_ready <= 1'b0;
ako (output_strobe) m3_next_state <= m3_data_ready;
else m3_next_state <= m3_data_ready_ack;
kraj
m3_data_ready:
početi
data_ready <= 1'b1;
if (read) m3_next_state <= m3_data_ready_ack;
else m3_next_state <= m3_data_ready;
kraj
default: m3_next_state <= m3_data_ready_ack;
endcase
kraj
/ / Ovo je malo counter
Uvijek @ (posedge clk)
početi
if (reset) bit_count <= 0; / / normalno reset
else if (falling_edge) bit_count <= bit_count 1;
else if (watchdog_timer_done) bit_count <= 0; / / RX watchdog timer reset
kraj
/ / Ovo je taktom
Uvijek @ (posedge clk)
početi
if (reset) q <= 0;
else if (falling_edge) q <= (ps2_data, q [`TOTAL_BITS-1: 1]);
kraj
/ / Ovo je watchdog timer brojač
/ / Pas čuvar vremena je uvijek "omogućeno" to raditi.
Uvijek @ (posedge clk)
početi
if (reset | | rising_edge | | falling_edge) watchdog_timer_count <= 0;
else if (~ watchdog_timer_done)
watchdog_timer_count <= watchdog_timer_count 1;
kraj
dodijeliti watchdog_timer_done = (watchdog_timer_count == WATCHDOG_TIMER_VALUE_PP-1);
/ / Ovo je debounce vremena counter
Uvijek @ (posedge clk)
početi
if (reset | | falling_edge | | rising_edge) debounce_timer_count <= 0;
/ / If (~ debounce_timer_done)
else debounce_timer_count <= debounce_timer_count 1;
kraj
dodijeliti debounce_timer_done = (debounce_timer_count == DEBOUNCE_TIMER_VALUE_PP-1);
/ / To je logika da biste provjerili je dobila paket podataka je "valjan"
/ / Ili dobar.
dodijeliti packet_good = (
(Q [0] == 0)
& & (Q [10] == 1)
& & (Q [11] == 0)
& & (Q [21] == 1)
& & (Q [22] == 0)
& & (Q [32] == 1)
& & (Q [9] == ~ ^ q [8:1]) / / neparna parnost bitni
& & (Q [20] ~ ^ q == [19:12]) / / neparna parnost bitni
& & (Q [31] ~ ^ q == [30:23]) / / neparna parnost bitni
);
/ / Izlaz posebne skeniranje koda zastave, skeniranje i kod ASCII
Uvijek @ (posedge clk)
početi
if (reset)
početi
left_button <= 0;
right_button <= 0;
x_increment <= 0;
y_increment <= 0;
kraj
else if (output_strobe)
početi
left_button <= q [1];
right_button <= q [2];
x_increment <= (q [5], q [19:12]);
y_increment <= (q [6], q [30:23]);
kraj
krajendmodule
/ / `Undefine TOTAL_BITS
Pomažem kod za Miš sučelje, ali to još uvijek ne rade.Može bilo tko pomoć mene to riješiti?
`Kronologija 1ns / 1ps
////////////////////////////////////////////////// //////////////////////////////
/ / Poduzeće:
/ / Projekcija:
/ /
/ / Kreiraj Date: 04/20/06 19:54:03
/ / Design Name:
/ / Naziv Modula: dgfd
/ / Naziv projekta:
/ / Target device:
/ / Alat verzije:
/ / Opis:
/ /
/ / Ovisnosti:
/ /
/ / Revizija:
/ / Revizija 0,01 - datoteka stvorena
/ / Dodatni Komentirajte:
/ /
////////////////////////////////////////////////// //////////////////////////////
`Resetall
`Vremenske rokove 1ns/100ps
`Definirati TOTAL_BITS 33 / / Broj bitova u jednom puni paketmodul ps2_mouse_interface (
CLK,
reset,
ps2_clk,
ps2_data,
left_button,
right_button,
x_increment,
y_increment,
data_ready, / / rx_read_o
čitati, / / rx_read_ack_i
error_no_ack
);
/ / Parametri
/ / Vrijednost vremena može biti i do (2 ^ bita) uključivo.
parametar WATCHDOG_TIMER_VALUE_PP = 19660 / / Broj sys_clks za 400usec.
parametar WATCHDOG_TIMER_BITS_PP = 15; / / Broj bitova potreban za vrijeme
parametar DEBOUNCE_TIMER_VALUE_PP = 186; / / Broj sys_clks za debounce
parametar DEBOUNCE_TIMER_BITS_PP = 8; / / Broj bitova potreban za vrijemeparametar m1_clk_h = 0;
parametar m1_falling_edge = 1;
parametar m1_falling_wait = 3;
parametar m1_clk_l = 2;
parametar m1_rising_edge = 6;
parametar m1_rising_wait = 4;
parametar m2_reset = 14;
parametar m2_wait = 0;
parametar m2_gather = 1;
parametar m2_verify = 3;
parametar m2_use = 2;
parametar m2_hold_clk_l = 6;
parametar m2_data_low_1 = 4;
parametar m2_data_high_1 = 5;
parametar m2_data_low_2 = 7;
parametar m2_data_high_2 = 8;
parametar m2_data_low_3 = 9;
parametar m2_data_high_3 = 11;
parametar m2_error_no_ack = 15;
parametar m2_await_response = 10;
parametar m3_data_ready = 1;
parametar m3_data_ready_ack = 0;
/ / / I deklaracije
CLK ulaz;
reset ulaz;
inout ps2_clk;
inout ps2_data;
izlaz left_button;
izlaz right_button;
izlaz [8:0] x_increment;
izlaz [8:0] y_increment;
izlaz data_ready;
ulaz pročitati;
izlaz error_no_ack;
reg left_button;
reg right_button;
reg [8:0] x_increment;
reg [8:0] y_increment;
reg data_ready;
reg error_no_ack;
/ / Interni signal deklaracije
watchdog_timer_done žice;
debounce_timer_done žice;
packet_good žice;
reg [`TOTAL_BITS-1: 0] q; / / taktom
reg [2:0] m1_state;
reg [2:0] m1_next_state;
reg [3:0] m2_state;
reg [3:0] m2_next_state;
reg m3_state;
reg m3_next_state;
reg [5:0] bit_count; / / Bit counter
Reg [WATCHDOG_TIMER_BITS_PP-1: 0] watchdog_timer_count;
Reg [DEBOUNCE_TIMER_BITS_PP-1: 0] debounce_timer_count;
reg. ps2_clk_hi_z; / / Bez tipkovnicu, visoka Z jednaka 1 zbog pullups.
reg. ps2_data_hi_z; / / Bez tipkovnicu, visoka Z jednaka 1 zbog pullups.
reg. clean_clk; / / Debounced izlaz iz M1, slijedi ps2_clk.
reg. rising_edge; / / izlaz iz M1 automat.
reg. falling_edge; / / izlaz iz M1 automat.
reg. output_strobe; / / Zasuni podataka podataka u izlazne registre
//------------------------------------------------ --------------------------
/ Modul kod
dodijeliti ps2_clk = ps2_clk_hi_z? 1'bZ: 1'b0;
dodijeliti ps2_data = ps2_data_hi_z? 1'bZ: 1'b0;
/ / Državni registar
Uvijek @ (posedge clk)
početak: m1_state_register
if (reset) m1_state <= m1_clk_h;
else m1_state <= m1_next_state;
kraj
/ / Prijelaza stanja logika
Uvijek @ (m1_state
ili ps2_clk
ili debounce_timer_done
ili watchdog_timer_done
)
početak: m1_state_logic
/ / Izlaz signala zadane na tu vrijednost, osim ako se promijenilo u državi stanju.
clean_clk <= 0;
rising_edge <= 0;
falling_edge <= 0;
slučaju (m1_state)
m1_clk_h:
početi
clean_clk <= 1;
ako (~ ps2_clk) m1_next_state <= m1_falling_edge;
else m1_next_state <= m1_clk_h;
kraj
m1_falling_edge:
početi
falling_edge <= 1;
m1_next_state <= m1_falling_wait;
kraj
m1_falling_wait:
početi
ako (debounce_timer_done) m1_next_state <= m1_clk_l;
else m1_next_state <= m1_falling_wait;
kraj
m1_clk_l:
početi
ako (ps2_clk) m1_next_state <= m1_rising_edge;
else m1_next_state <= m1_clk_l;
kraj
m1_rising_edge:
početi
rising_edge <= 1;
m1_next_state <= m1_rising_wait;
kraj
m1_rising_wait:
početi
clean_clk <= 1;
ako (debounce_timer_done) m1_next_state <= m1_clk_h;
else m1_next_state <= m1_rising_wait;
kraj
default: m1_next_state <= m1_clk_h;
endcase
kraj/ / Državni registar
Uvijek @ (posedge clk)
početak: m2_state_register
if (reset) m2_state <= m2_reset;
else m2_state <= m2_next_state;
kraj
/ / Prijelaza stanja logika
Uvijek @ (m2_state
ili q
ili falling_edge
ili rising_edge
ili watchdog_timer_done
ili bit_count
ili packet_good
ili ps2_data
ili clean_clk
)
početak: m2_state_logic
/ / Izlaz signala zadane na tu vrijednost, osim ako se promijenilo u državi stanju.
ps2_clk_hi_z <= 1;
ps2_data_hi_z <= 1;
error_no_ack <= 0;
output_strobe <= 0;
slučaju (m2_state)
m2_reset: / / Nakon reseta šalje naredbu miša.
početi
m2_next_state <= m2_hold_clk_l;
kraj
m2_wait:
početi
ako (falling_edge) m2_next_state <= m2_gather;
else m2_next_state <= m2_wait;
kraj
m2_gather:
početi
if (watchdog_timer_done & & (bit_count == `TOTAL_BITS))
m2_next_state <= m2_verify;
else if (watchdog_timer_done & & (bit_count <`TOTAL_BITS))
m2_next_state <= m2_hold_clk_l;
else m2_next_state <= m2_gather;
kraj
m2_verify:
početi
ako (packet_good) m2_next_state <= m2_use;
else m2_next_state <= m2_wait;
kraj
m2_use:
početi
output_strobe <= 1;
m2_next_state <= m2_wait;
krajm2_hold_clk_l:
početi
ps2_clk_hi_z <= 0; / / Time se pokreće watchdog timer!
if (watchdog_timer_done & & ~ clean_clk) m2_next_state <= m2_data_low_1;
else m2_next_state <= m2_hold_clk_l;
kraj
m2_data_low_1:
početi
ps2_data_hi_z <= 0; / / Obrasci početni bit, d [0] d [1]
if (rising_edge & & (bit_count == 3))
m2_next_state <= m2_data_high_1;
else m2_next_state <= m2_data_low_1;
kraj
m2_data_high_1:
početi
ps2_data_hi_z <= 1; / / Obrasci D [2]
if (rising_edge & & (bit_count == 4))
m2_next_state <= m2_data_low_2;
else m2_next_state <= m2_data_high_1;
kraj
m2_data_low_2:
početi
ps2_data_hi_z <= 0; / / Obrasci D [3]
if (rising_edge & & (bit_count == 5))
m2_next_state <= m2_data_high_2;
else m2_next_state <= m2_data_low_2;
kraj
m2_data_high_2:
početi
ps2_data_hi_z <= 1; / / Obrasci D [4], d [5], d [6], d [7]
if (rising_edge & & (bit_count == 9))
m2_next_state <= m2_data_low_3;
else m2_next_state <= m2_data_high_2;
kraj
m2_data_low_3:
početi
ps2_data_hi_z <= 0; / / Obrasci bit parnosti
ako (rising_edge) m2_next_state <= m2_data_high_3;
else m2_next_state <= m2_data_low_3;
kraj
m2_data_high_3:
početi
ps2_data_hi_z <= 1; / / Dopusti miš povući niske (ACK puls)
if (falling_edge & & ps2_data) m2_next_state <= m2_error_no_ack;
else if (falling_edge & & ~ ps2_data)
m2_next_state <= m2_await_response;
else m2_next_state <= m2_data_high_3;
kraj
m2_error_no_ack:
početi
error_no_ack <= 1;
m2_next_state <= m2_error_no_ack;
kraj
m2_await_response:
početi
if (bit_count == 22) m2_next_state <= m2_verify;
else m2_next_state <= m2_await_response;
kraj
default: m2_next_state <= m2_wait;
endcase
kraj/ / Državni registar
Uvijek @ (posedge clk)
početak: m3_state_register
if (reset) m3_state <= m3_data_ready_ack;
else m3_state <= m3_next_state;
kraj
/ / Prijelaza stanja logika
Uvijek @ (m3_state ili output_strobe ili pročitati)
početak: m3_state_logic
slučaju (m3_state)
m3_data_ready_ack:
početi
data_ready <= 1'b0;
ako (output_strobe) m3_next_state <= m3_data_ready;
else m3_next_state <= m3_data_ready_ack;
kraj
m3_data_ready:
početi
data_ready <= 1'b1;
if (read) m3_next_state <= m3_data_ready_ack;
else m3_next_state <= m3_data_ready;
kraj
default: m3_next_state <= m3_data_ready_ack;
endcase
kraj
/ / Ovo je malo counter
Uvijek @ (posedge clk)
početi
if (reset) bit_count <= 0; / / normalno reset
else if (falling_edge) bit_count <= bit_count 1;
else if (watchdog_timer_done) bit_count <= 0; / / RX watchdog timer reset
kraj
/ / Ovo je taktom
Uvijek @ (posedge clk)
početi
if (reset) q <= 0;
else if (falling_edge) q <= (ps2_data, q [`TOTAL_BITS-1: 1]);
kraj
/ / Ovo je watchdog timer brojač
/ / Pas čuvar vremena je uvijek "omogućeno" to raditi.
Uvijek @ (posedge clk)
početi
if (reset | | rising_edge | | falling_edge) watchdog_timer_count <= 0;
else if (~ watchdog_timer_done)
watchdog_timer_count <= watchdog_timer_count 1;
kraj
dodijeliti watchdog_timer_done = (watchdog_timer_count == WATCHDOG_TIMER_VALUE_PP-1);
/ / Ovo je debounce vremena counter
Uvijek @ (posedge clk)
početi
if (reset | | falling_edge | | rising_edge) debounce_timer_count <= 0;
/ / If (~ debounce_timer_done)
else debounce_timer_count <= debounce_timer_count 1;
kraj
dodijeliti debounce_timer_done = (debounce_timer_count == DEBOUNCE_TIMER_VALUE_PP-1);
/ / To je logika da biste provjerili je dobila paket podataka je "valjan"
/ / Ili dobar.
dodijeliti packet_good = (
(Q [0] == 0)
& & (Q [10] == 1)
& & (Q [11] == 0)
& & (Q [21] == 1)
& & (Q [22] == 0)
& & (Q [32] == 1)
& & (Q [9] == ~ ^ q [8:1]) / / neparna parnost bitni
& & (Q [20] ~ ^ q == [19:12]) / / neparna parnost bitni
& & (Q [31] ~ ^ q == [30:23]) / / neparna parnost bitni
);
/ / Izlaz posebne skeniranje koda zastave, skeniranje i kod ASCII
Uvijek @ (posedge clk)
početi
if (reset)
početi
left_button <= 0;
right_button <= 0;
x_increment <= 0;
y_increment <= 0;
kraj
else if (output_strobe)
početi
left_button <= q [1];
right_button <= q [2];
x_increment <= (q [5], q [19:12]);
y_increment <= (q [6], q [30:23]);
kraj
krajendmodule
/ / `Undefine TOTAL_BITS