eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikapodstawy Verilog ktoś podpowie co jest żle?
Ilość wypowiedzi w tym wątku: 9

  • 1. Data: 2015-09-29 11:47:36
    Temat: podstawy Verilog ktoś podpowie co jest żle?
    Od: ToTylkoJa <m...@n...chce.tego.poczta.fm>

    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


  • 2. Data: 2015-09-29 12:13:29
    Temat: Re: podstawy Verilog ktoś podpowie co jest żle?
    Od: Adam Górski <g...@w...pl>

    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
    >


  • 3. Data: 2015-09-29 12:18:29
    Temat: Re: podstawy Verilog ktoś podpowie co jest żle?
    Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl>


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

    Tu powinno byc:

    r5<=r4;
    r4<=r3;
    r3<=r2;
    r2<=r1;
    r1<=r0;
    r0<=but;


    --
    Pozdrawiam
    Grzegorz


  • 4. Data: 2015-09-29 12:35:39
    Temat: Re: podstawy Verilog ktoc59b podpowie co jest c5bcle3f
    Od: ToTylkoJa <m...@n...chce.tego.poczta.fm>

    Adam Gc3b3rski wrote:

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

    Dziękuję za zainteresowanie ale to chyba nie jest odpowiedz na mój problem.
    Przykładów z jednym wejściem zegara i wejściami wybierającymi kierunek
    zliczania uruchomiłem kilka. Ale teraz zechciałem emulować licznik 74193.
    A on ma DWA wejścia zegarowe. Bardzo możliwe że nie są one podawane wprost
    na jego przerzutniki. To że przerzutniki "D" ma tylko jeden zegar doskonale
    rozumiem. Mnie interesuje jak w Verilogu opisać układ który ma dwa wejścia
    i w zależności od tego na które wejście podamy impuls układ zliczy 'w górę'
    bądź 'w dół'. Chyba można coś takiego zrobić ponieważ wymieniany już
    wcześniej licznik 74193 istnieje w rzeczywistości i działa, o czym
    przekonałem się osobiście.

    MArek



  • 5. Data: 2015-09-29 12:46:34
    Temat: Re: podstawy Verilog ktoc59b podpowie co jest c5bcle3f
    Od: ToTylkoJa <m...@n...chce.tego.poczta.fm>

    Grzegorz Kurczyk wrote:

    >
    >> 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
    >>
    >
    > Tu powinno byc:
    >
    > r5<=r4;
    > r4<=r3;
    > r3<=r2;
    > r2<=r1;
    > r1<=r0;
    > r0<=but;
    >
    >
    Jeszcze nie do końca rozumiem różnicę między blocking i nonblocking
    assigment. Niestety po zamienieniu przypisania "=" na "<=" układ działa tak
    samo źle. Właśnie sprawdziłem na płytce "spartan-3" (chyba digilent)

    MArek


  • 6. Data: 2015-09-29 12:50:01
    Temat: Re: podstawy Verilog ktoc59b podpowie co jest c5bcle3f
    Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl>

    > Dziękuję za zainteresowanie ale to chyba nie jest odpowiedz na mój problem.
    > Przykładów z jednym wejściem zegara i wejściami wybierającymi kierunek
    > zliczania uruchomiłem kilka. Ale teraz zechciałem emulować licznik 74193.
    > A on ma DWA wejścia zegarowe. Bardzo możliwe że nie są one podawane wprost
    > na jego przerzutniki. To że przerzutniki "D" ma tylko jeden zegar doskonale
    > rozumiem. Mnie interesuje jak w Verilogu opisać układ który ma dwa wejścia
    > i w zależności od tego na które wejście podamy impuls układ zliczy 'w górę'
    > bądź 'w dół'. Chyba można coś takiego zrobić ponieważ wymieniany już
    > wcześniej licznik 74193 istnieje w rzeczywistości i działa, o czym
    > przekonałem się osobiście.
    >
    > MArek
    >
    >

    Jak się dokładnie przyjrzysz to 74193 nie jest wcale aż taki "dual
    clock" ;-)
    Przerzutniki są taktowanie sumą logiczną sygnałów (UP or DN). Zrób
    podobnie u siebie.

    --
    Pozdrawiam
    Grzegorz


  • 7. Data: 2015-09-29 12:54:58
    Temat: Re: podstawy Verilog ktoc59b podpowie co jest c5bcle3f
    Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl>

    W dniu 29.09.2015 o 12:46, ToTylkoJa pisze:
    > Grzegorz Kurczyk wrote:
    >
    >>
    >>> 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
    >>>
    >>
    >> Tu powinno byc:
    >>
    >> r5<=r4;
    >> r4<=r3;
    >> r3<=r2;
    >> r2<=r1;
    >> r1<=r0;
    >> r0<=but;
    >>
    >>
    > Jeszcze nie do końca rozumiem różnicę między blocking i nonblocking
    > assigment. Niestety po zamienieniu przypisania "=" na "<=" układ działa tak
    > samo źle. Właśnie sprawdziłem na płytce "spartan-3" (chyba digilent)
    >
    > MArek
    >

    Twoim celem było zrobienie rejestru przesuwnego, a użycie blocking
    zwinie to do jednego przerzutnika:

    Tu jest to ładnie opisane (strona 3):
    http://web.mit.edu/6.111/www/f2007/handouts/L06.pdf

    --
    Pozdrawiam
    Grzegorz


  • 8. Data: 2015-09-29 13:12:10
    Temat: Re: podstawy Verilog ktoc59b podpowie co jest c5bcle3f
    Od: Adam Górski <gorskiamalpawpkropkapeel_@xx>

    On 2015-09-29 12:35, ToTylkoJa wrote:
    > Adam Gc3b3rski wrote:
    >
    >> 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;
    >
    > Dziękuję za zainteresowanie ale to chyba nie jest odpowiedz na mój problem.
    > Przykładów z jednym wejściem zegara i wejściami wybierającymi kierunek
    > zliczania uruchomiłem kilka. Ale teraz zechciałem emulować licznik 74193.
    > A on ma DWA wejścia zegarowe. Bardzo możliwe że nie są one podawane wprost
    > na jego przerzutniki. To że przerzutniki "D" ma tylko jeden zegar doskonale
    > rozumiem. Mnie interesuje jak w Verilogu opisać układ który ma dwa wejścia
    > i w zależności od tego na które wejście podamy impuls układ zliczy 'w górę'
    > bądź 'w dół'. Chyba można coś takiego zrobić ponieważ wymieniany już
    > wcześniej licznik 74193 istnieje w rzeczywistości i działa, o czym
    > przekonałem się osobiście.

    Nie idź tą drogą. Chyba że masz duże doświadczenie. Jeżeli chcesz żeby
    Twoje układy działały poprawnie używaj:

    - konstrukcji synchronicznych ( nie używaj asynchronicznych - chyba że
    wiesz co robisz )
    - synchronizuj sygnały wejściowe ( w tym reset )
    - unikaj dzielników sygnału zegarowego

    Pzdr

    Adam


  • 9. Data: 2015-09-29 13:12:33
    Temat: Re: podstawy Verilog ktoc59b podpowie co jest c5bcle3f
    Od: "J.F." <j...@p...onet.pl>

    Użytkownik "ToTylkoJa" napisał w wiadomości grup
    dyskusyjnych:mudpdb$g4r$...@u...news.interia.pl...
    Adam Gc3b3rski wrote:
    >> 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) [...]

    >Dziękuję za zainteresowanie ale to chyba nie jest odpowiedz na mój
    >problem.

    Poniekad wlasnie jest. Tak wlasnie nalezy to w FPGA zrobic.

    >Przykładów z jednym wejściem zegara i wejściami wybierającymi
    >kierunek
    >zliczania uruchomiłem kilka. Ale teraz zechciałem emulować licznik
    >74193.
    >A on ma DWA wejścia zegarowe. Bardzo możliwe że nie są one podawane
    >wprost
    >na jego przerzutniki.

    Jak spojrzysz na jego karte katalogowa, to w srodku jest stosowna
    bramka, ktora sumuje oba zegary.
    http://www.datasheetbank.com/74LS193-Datasheet-PDF-T
    I
    Co nie znaczy, ze musisz to robic dokladnie tak samo.

    >To że przerzutniki "D" ma tylko jeden zegar doskonale
    >rozumiem. Mnie interesuje jak w Verilogu opisać układ który ma dwa
    >wejścia
    >i w zależności od tego na które wejście podamy impuls układ zliczy 'w
    >górę'
    >bądź 'w dół'. Chyba można coś takiego zrobić ponieważ wymieniany już
    >wcześniej licznik 74193 istnieje w rzeczywistości i działa, o czym
    >przekonałem się osobiście.

    Ale co z tego ze opiszesz, skoro potem trzeba to jeszcze zrealizowac ?
    FPGA promuje rozwiazania, gdzie przerzutniki maja jeden wspolny zegar.

    Prawie taka sama funkcjonalnosc mozesz np uzyskac stosujac np dwa
    osobne liczniki i wyliczajac roznice obu.
    Ale to nadal osobne zegary.

    J.

strony : [ 1 ]


Szukaj w grupach

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: