eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblemy z implementacją w CPLD
Ilość wypowiedzi w tym wątku: 23

  • 11. Data: 2009-01-27 21:45:23
    Temat: Re: Problemy z implementacją w CPLD
    Od: Jerry1111 <j...@w...pl.pl.wp>

    Sludig wrote:
    > Witam
    >
    > Po przeczytaniu waszych uwag zrobiłem co następuje:

    [cut]

    > Na wykonanie symulacji post-fix nie
    > miałem czasu niestety.

    Dlatego nie wiadomo co sie dzieje.

    --
    Jerry1111


  • 12. Data: 2009-01-27 23:30:46
    Temat: Re: Problemy z implementacją w CPLD
    Od: Adam Górski <g...@w...pl>

    Sludig pisze:
    > Witam
    >
    > Po przeczytaniu waszych uwag zrobiłem co następuje:
    > - Zamiast dzielić clocka dla UARTu użyłem w jego strukturze ClkEnable
    > - Wszystkie sygnały wejściowe przechodzą przez rejestry wejściowe DFF (w
    > celach testowych)
    > - dodałem stan w FSM, w którym układ się zatnie jeżeli przejdzie do
    > others =>
    >
    > Jednak nadal jest tak, że po zmianie numeracji stanów na Hot-one układ
    > przestaje działać, ale najwyraźniej nie wchodzi do others (albo
    > kompilator zoptymalizował ten stan). Na wykonanie symulacji post-fix nie
    > miałem czasu niestety.
    >
    > pozdrawiam
    > sludig

    Witam,

    Ja tam bym chciał zobaczyć ten automat :)

    Adam


  • 13. Data: 2009-01-28 15:48:09
    Temat: Re: Problemy z implementacją w CPLD
    Od: "Sludig" <...@...pl>


    > Ja tam bym chciał zobaczyć ten automat :)

    Automat jak automat: Mealy'ego składający się z około 16 stanów. Poza tym
    kilka liczników o "wyszukamy" działaniu, rejestr przesuwny, UART, logika
    kombinacyjna, itp.

    Pozdrawiam
    Sludig


  • 14. Data: 2009-01-28 15:50:00
    Temat: Re: Problemy z implementacją w CPLD
    Od: "Sludig" <...@...pl>

    >> Na wykonanie symulacji post-fix nie
    >> miałem czasu niestety.
    >
    > Dlatego nie wiadomo co sie dzieje.

    Udało mi się uruchomić tą symulację (errory jakoś same znikęły niewiedzieć
    czemu) i wygląda na to że źródłem problemów są hazardy.
    Patrzałem narazie tylko na symulacje wariantu działającego, a i tak wygląda
    nieciekawie. Całego przebiegu jeszcze nie obejrzałem.
    Niestety niektóre sygnały zostały zoptymalizowaneb co utrudnia interpretacje
    wykresów - nie ma na przykład state_present i
    state_next. Problemem może być sygnał nWriteEnable pamięci SRAM. Wartość
    jest zapisywana na zboczu narastającym tego sygnału, jednak
    jego w jego przebiegu jest szpika zera przed właściwym zezwoleniem na zapis.
    Sygnał ten zależy jest od trzech sygnałów:
    nWriteEnable <= nWriteToMem or Clock or (not nReadFromMem);
    a mimo tego wygląda na sporo opóźniony względem clocka.

    Poza tym wygląda na to, że adres komórki za szybko się zmienia po
    narastającym zboczu nWriteEnable. Jutro to wszystko dokładniej
    przebadam.

    Czy da się zmusić kompilator żeby nie optymalizował wybranych sygnałów?

    Teraz mam tak zrobione, że stan automatu zmienia się na innym zoboczu zegara
    niż dane wejściowe, żeby podczas zmiany stanu ich wartość była stała. Dobrze
    robie czy może z jakiegoś powodu stan powinien zmieniać się na tym samym
    zboczu co sygnały sterujące?

    pozdrawiam
    Sludig


  • 15. Data: 2009-01-28 16:07:07
    Temat: Re: Problemy z implementacją w CPLD
    Od: Konop <k...@g...pl>

    > Teraz mam tak zrobione, że stan automatu zmienia się na innym zoboczu
    > zegara niż dane wejściowe, żeby podczas zmiany stanu ich wartość była
    > stała. Dobrze robie czy może z jakiegoś powodu stan powinien zmieniać
    > się na tym samym zboczu co sygnały sterujące?

    Jak będziesz zmieniał na tym samym, to pamiętaj, że automat będzie
    widział "poprzedni" stan wejść... z reguł nie jest to problem, bo w
    praktyce rzadko kiedy się liczy KTÓRY to jest cykl zegara, raczej czas
    pomiędzy jest ważny... a z tym nie ma problemu - WSZYSTKO jest
    przesunięte ;).. no ale niestety, sama zamiana może nic nie dać, pewnie
    będziesz musiał przerobić symulację ;P...
    Jednak takie wyjście jest trochę lepsze!! Zauważ - jak masz zegar 50MHz
    (taki chyba masz, nie??), to okres zegara to 20ns. Jeśli wejścia są
    zapamiętywane na tym samym zboczu co stan automatu, to po zapamiętaniu
    układ ma 20ns na ustalenie się funkcji wzbudzeń przerzutników (czyli na
    przepropagowanie się sygnałów przez bramki). Jeśli masz na różnych
    zboczach - to układ ma na to tylko 10ns (połowa okresu)... a jeśli
    miałbyś zegar niesymetryczny, to jeszcze mniej ;). jeśli NA PEWNO winne
    są hazardy - warto może byłoby zacząć pracować na jednym zboczu??
    A swoją drogą - na jakim układzie pracujesz?

    Pozdrawiam!
    Konop


  • 16. Data: 2009-01-28 21:44:51
    Temat: Re: Problemy z implementacją w CPLD
    Od: Jerry1111 <j...@w...pl.pl.wp>

    Sludig wrote:
    > Problemem może być sygnał nWriteEnable pamięci SRAM. Wartość
    > jest zapisywana na zboczu narastającym tego sygnału, jednak
    > jego w jego przebiegu jest szpika zera przed właściwym zezwoleniem na
    > zapis.
    > Sygnał ten zależy jest od trzech sygnałów:
    > nWriteEnable <= nWriteToMem or Clock or (not nReadFromMem);
    > a mimo tego wygląda na sporo opóźniony względem clocka.

    Bedzie opozniony (bo masz bramke), ale co mnie martwi: "Clock" w tel
    linijce. Po chusteczke ten Clock do OR potrzebny? Zalatw to w 'if' -
    IMHO bezpieczniej.

    A w ogole to calosci jakims ifem nie da rady? Bedzie zdrowiej.
    Na razie wszystkie przewidywania sprawdzone - hazardy, ktore widac tylko
    w gate-level ;-) (btw: to moj ulubiony moment walki).

    >
    > Poza tym wygląda na to, że adres komórki za szybko się zmienia po
    > narastającym zboczu nWriteEnable. Jutro to wszystko dokładniej
    > przebadam.

    Smierdzi mi to troche pisaniem kodu od nowa, uzywajac innej koncepcji.
    Np koncepcji nie mieszania CLK tam, gdzie nie trzeba!

    > Czy da się zmusić kompilator żeby nie optymalizował wybranych sygnałów?

    Xilinx nie wiem, Altera ma 'virtual pin'.

    > Teraz mam tak zrobione, że stan automatu zmienia się na innym zoboczu
    > zegara niż dane wejściowe, żeby podczas zmiany stanu ich wartość była
    > stała. Dobrze robie czy może z jakiegoś powodu stan powinien zmieniać
    > się na tym samym zboczu co sygnały sterujące?

    Jak masz dffy na wejsciach, to na tym samym - po chu*** na innym?

    --
    Jerry1111


  • 17. Data: 2009-01-28 21:46:50
    Temat: Re: Problemy z implementacją w CPLD
    Od: Jerry1111 <j...@w...pl.pl.wp>

    Sludig wrote:
    >
    >> Ja tam bym chciał zobaczyć ten automat :)
    >
    > Automat jak automat: Mealy'ego składający się z około 16 stanów. Poza tym
    > kilka liczników o "wyszukamy" działaniu, rejestr przesuwny, UART, logika
    > kombinacyjna, itp.

    I ta logika kombinacyjna troche mnie martwi. Tam mozna namieszac.
    Nie mozesz kodu gdzies powiesic na sieci? Bedzie latwiej sie bawic w
    naprawianie.

    --
    Jerry1111


  • 18. Data: 2009-01-29 11:07:08
    Temat: Re: Problemy z implementacją w CPLD
    Od: "J.A" <j...@f...de>

    pedzenie calej logiki jednym zboczem zegara,
    a fsm drugim to prawie na pewno zly pomysl;

    > Bedzie opozniony (bo masz bramke), ale co mnie martwi: "Clock" w tel
    > linijce. Po chusteczke ten Clock do OR potrzebny? Zalatw to w 'if' -
    > IMHO bezpieczniej.

    'if' tez stworzy te same bramki, to tylko inny sposob zapisu;

    > > Czy da się zmusić kompilator żeby nie optymalizował wybranych sygnałów?
    > Xilinx nie wiem, Altera ma 'virtual pin'.

    'virtual pin' to troszke cos innego;

    zeby powstrzymac kompilator od optymalizacji lub zmiany
    nazwy sygnalu trzeba dac dyrektywe synthesis;

    verilog:
    wire sygnal_xxx /* synthesis keep */; dla wire
    reg reg_xxx /* synthesis preserve */; dla rejestru

    vhdl:
    signal sygnal_xxx: std_logic;
    attribute keep: boolean;
    attribute keep of sygnal_xxx: signal is true;

    signal reg_xxx: stdlogic;
    attribute preserve: boolean;
    attribute preserve of reg_xxx: signal is true;

    jezeli to jest SRAM [static ram] a nie SSRAM [Synch. static ram],
    to adres do zapisu jest zapisywany na opadajacym zboczu write_enable,
    dane na narastajacym, wiec zmiana adresu 'prawie rowno' czy wrecz
    rowno z rosnacym zboczem sygnalu zapisujacego nie jest grozna;
    podobnie z danymi - powinny byc stabilne wokol pos. zbocza write_enable,
    przelaczanie przy zboczu opadajacym nie jest grozne;
    przynajmniej tak bylo kilka lat temu, jak cos z tymi pamieciami
    robilem, nie sadze, by sie to zmienilo;

    akurat przy interface do sram praca na obu zboczach moze
    ulatwic zapewnienie wlasciwego timingu, np.:
    pos_edge zegara zapisuje adres do rejestrow WY,
    neg_edge wyzwala write_enable i wpisuje dane do rejestrow WY
    pos_edge gasi write_enable;

    JA


    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 19. Data: 2009-01-29 16:28:34
    Temat: Re: Problemy z implementacją w CPLD
    Od: "Sludig" <...@...pl>

    > I ta logika kombinacyjna troche mnie martwi. Tam mozna namieszac.
    > Nie mozesz kodu gdzies powiesic na sieci? Bedzie latwiej sie bawic w
    > naprawianie.

    Nie, nie mogę. Poza tym, żebyś zrozumiał jak układ działa musiałbym
    zamieścić opis działania całego urządzenia. To niestety nie wchodzi w grę. W
    zasadzie projekt uważam za udany - byle nikt nigdy nie włączył kodowania FSM
    typu Hot-One ;) Przy robieniu kolejnego projektu już

    pozdrawiam
    Sludig


  • 20. Data: 2009-01-29 16:33:26
    Temat: Re: Problemy z implementacją w CPLD
    Od: "Sludig" <...@...pl>

    > zeby powstrzymac kompilator od optymalizacji lub zmiany
    > nazwy sygnalu trzeba dac dyrektywe synthesis;
    >
    > verilog:
    > wire sygnal_xxx /* synthesis keep */; dla wire
    > reg reg_xxx /* synthesis preserve */; dla rejestru
    >
    > vhdl:
    > signal sygnal_xxx: std_logic;
    > attribute keep: boolean;
    > attribute keep of sygnal_xxx: signal is true;
    >
    > signal reg_xxx: stdlogic;
    > attribute preserve: boolean;
    > attribute preserve of reg_xxx: signal is true;

    Dzięki. To się przyda.

    > jezeli to jest SRAM [static ram] a nie SSRAM [Synch. static ram],
    > to adres do zapisu jest zapisywany na opadajacym zboczu write_enable,
    > dane na narastajacym, wiec zmiana adresu 'prawie rowno' czy wrecz
    > rowno z rosnacym zboczem sygnalu zapisujacego nie jest grozna;
    > podobnie z danymi - powinny byc stabilne wokol pos. zbocza write_enable,
    > przelaczanie przy zboczu opadajacym nie jest grozne;
    > przynajmniej tak bylo kilka lat temu, jak cos z tymi pamieciami
    > robilem, nie sadze, by sie to zmienilo;

    Ja mam tą pamięć
    http://www.vlsi.ee.upatras.gr/~karagian/samsung_sram
    .pdf
    i dziwnie to wygląda, bo o ile dobrze odczytuje to adres może się zmieniać
    na obu zboczach nWR, bo
    tAS=0 i tWR=0. Ale mam zrobione tak jak sugerowałeś.

    pozdrawiam
    Sludig

strony : 1 . [ 2 ] . 3


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: