eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikapodstawy Verilog ktoś podpowie co jest żle?Re: podstawy Verilog ktoś podpowie co jest żle?
  • Data: 2015-09-29 12:13:29
    Temat: Re: podstawy Verilog ktoś podpowie co jest żle?
    Od: Adam Górski <g...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Cześć,

    A teraz zastanów się co jest wejściem zegarowym a co sygnałem mówiącym o
    kierunku zliczania. A może są dwa wejścia zegarowe ?

    A może nie ma przerzutników z dwoma sygnałami zegarowymi w Twoim sprzęcie?

    Typowy problem początkujących. Pamiętaj zawsze na końcu występują bramki
    i przerzutniki ( fpga ) , koniec i kropka.
    Pisząc w verilogu czy VHDL trzeba o tym pamiętać.

    Poniżej tak jak to powinno wyglądać :

    always @( jakiś_zegar)
    if (pom_przy2==1)
    licz_wysw <= licz_wysw - 1;
    else
    if (pom_przy1==1)
    licz_wysw <= licz_wysw + 1;

    Jakiś zegar taktuje przerzutniki a sygnały informujące o zliczaniu w
    górę czy dół jedynie aktywują zmianę stanu ( lub nie )

    Może trochę duże uproszczenie ale wydaje mi się że niedaleko odbiega.
    Pomijam problem odbijania przycisków i synchronizacji sygnałów pom_przy1
    i 2 do sygnału zegarowego jakiś_zegar.

    Pzdr.

    Adam


    > 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
    >

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: