Witam W ramach zapoznawania się z Verilogiem chciałem zrobić w FPGA prosty licznik. Przykłady które znalazłem działały w oparciu o jedno wejście zegarowe i wejście definiujące kierunek zliczania. Ja chcę zrobić coś jak
74193 czyli dwa wejściami zegarowe odpowiednio 'clkup' i 'clkdown'. Wymyśliłem coś takiego:always @(posedge pom_przy1 or posedge pom_przy2) if (pom_przy2==1) licz_wysw <= licz_wysw - 1; else if (pom_przy1==1) licz_wysw <= licz_wysw + 1;
Niestety licznik ten poprawnie liczy tylko 'w górę' a przy liczeniu 'w dół' przeskakuje po kilka stanów. Wydaje mi się że problem drgań przycisków można pominąć ponieważ oba przyciski są filtrowane w taki sam sposób. Na wszelki wypadek pokaże jak 'odkłócam' przyciski.
prosty_przy przy1(.but(but0),.zegar(pom_clk),.wy(pom_przy1)); prosty_przy przy2(.but(but1),.zegar(pom_clk),.wy(pom_przy2));
Jeśli dobrze rozumuję to tworzę dwie instancje (tak się to chyba nazywa) modułu 'prosty_przy', czyli oba przyciski są traktowane tak samo. To może jeszcze na koniec moduł 'prosty_przy'
module prosty_przy( input but,zegar, output wy ); reg r0,r1,r2,r3,r4,r5;
always @(posedge zegar) begin r5=r4; r4=r3; r3=r2; r2=r1; r1=r0; r0=but; end assign wy = r0 & r1 & r2 & r3 & r4 & r5; endmodule
Nie jest to może najładniejszy przykład 'debouncera' ale chyba powinien działać. Całość jest napędzana zegarem około 760 Hz. Czekam na jakieś podpowiedzi.
MArek