Goto page 1, 2 Next
Sludig
Guest
Thu Jan 22, 2009 5:53 pm
Witam
Realizuje dość duży projekt na CPLD CoolRunner2 Xilinxa w VHDLu. Całość
działa na 50 MHz. Układ został zaprojektowany przy pomocy behavioral
simulator przed zaprojektowaniem i zamówieniem pcb. Pomijając standardowe,
wstępne trudności można powiedzieć, że układ od razu działał dobrze.
Jednak po zmianie Optimization goal z Area na Speed sygnały wyjściowe były
bardzo przekłamane, a maszyna stanu nie przechodziła pełnego cyklu.
Podobnie, ale nie identycznie, działo się, gdy zmieniałem Optimization
effort z normal na high lub FSM Encoding Algorithm z compact na Gray lub
hot-one.
Po poprawieniu fragmentu kodu, który myślałem, że może sprawiać problemy
jest dużo lepiej. Teraz tylko zmiana FSM Encoding Algorithm na hot-one
powoduje problemy (na razie nie określiłem, w którym miejscu i dlaczego).
Skąd biorą się takie problemy, jak szukać ich przyczyn i najważniejsze - jak
pisać, żeby one nie występowały?
Można by powiedzieć "zostań przy konfiguracji, która działa", ale te
problemy prawie na pewno są wynikiem hazardów sygnałów wewnętrznych CPLD i
zostawienie tego, tak jak jest byłoby ryzykowne, a już na pewno nie
eleganckie.
pozdrawiam
sludig
Jerry1111
Guest
Thu Jan 22, 2009 10:16 pm
Sludig wrote:
Quote:
Jednak po zmianie Optimization goal z Area na Speed sygnały wyjściowe były
bardzo przekłamane, a maszyna stanu nie przechodziła pełnego cyklu.
Czy zachowanie jest takie same na plytce _i_ w symulatorze?
Quote:
Podobnie, ale nie identycznie, działo się, gdy zmieniałem Optimization
effort z normal na high lub FSM Encoding Algorithm z compact na Gray lub
hot-one.
Po poprawieniu fragmentu kodu, który myślałem, że może sprawiać problemy
jest dużo lepiej. Teraz tylko zmiana FSM Encoding Algorithm na hot-one
powoduje problemy (na razie nie określiłem, w którym miejscu i dlaczego).
Skąd biorą się takie problemy, jak szukać ich przyczyn i najważniejsze -
jak
pisać, żeby one nie występowały?
Te same pytanie: Czy zachowanie jest takie same na plytce _i_ w
symulatorze (symulator na poziomie bramek, nie vhdl!)?
--
Jerry1111
Adam Górski
Guest
Fri Jan 23, 2009 11:59 am
Sludig pisze:
Quote:
Witam
Realizuje dość duży projekt na CPLD CoolRunner2 Xilinxa w VHDLu. Całość
działa na 50 MHz. Układ został zaprojektowany przy pomocy behavioral
simulator przed zaprojektowaniem i zamówieniem pcb. Pomijając
standardowe, wstępne trudności można powiedzieć, że układ od razu
działał dobrze.
Jednak po zmianie Optimization goal z Area na Speed sygnały wyjściowe były
bardzo przekłamane, a maszyna stanu nie przechodziła pełnego cyklu.
Podobnie, ale nie identycznie, działo się, gdy zmieniałem Optimization
effort z normal na high lub FSM Encoding Algorithm z compact na Gray lub
hot-one.
Po poprawieniu fragmentu kodu, który myślałem, że może sprawiać problemy
jest dużo lepiej. Teraz tylko zmiana FSM Encoding Algorithm na hot-one
powoduje problemy (na razie nie określiłem, w którym miejscu i dlaczego).
Skąd biorą się takie problemy, jak szukać ich przyczyn i najważniejsze -
jak
pisać, żeby one nie występowały?
Można by powiedzieć "zostań przy konfiguracji, która działa", ale te
problemy prawie na pewno są wynikiem hazardów sygnałów wewnętrznych CPLD i
zostawienie tego, tak jak jest byłoby ryzykowne, a już na pewno nie
eleganckie.
pozdrawiam
sludig
Witam,
Jezeli to nie tajne to daj zrodla na grupie - > bedzie mozna cos wiecej
powiedziec. Prawdopodobnie problemem jest :
- brak synchronizacji sygnałów we wzgledem zegara automatu
- wymieszanie logiki async z sync
- dzielenie zegarów
- brak syncronizacj sygnałów zew.
a moze jeszcz kilka innych a moze nie :)
Adam
Sludig
Guest
Fri Jan 23, 2009 12:00 pm
Quote:
Jednak po zmianie Optimization goal z Area na Speed sygnały wyjściowe
były
bardzo przekłamane, a maszyna stanu nie przechodziła pełnego cyklu.
Czy zachowanie jest takie same na plytce _i_ w symulatorze?
Nie udało mi się uruchomić jeszcze symulacji post-fix. Wyskakują jakieś
errory i nie mam póki co czasu z nimi powalczyć.
Quote:
Skąd biorą się takie problemy, jak szukać ich przyczyn i najważniejsze -
jak
pisać, żeby one nie występowały?
Te same pytanie: Czy zachowanie jest takie same na plytce _i_ w
symulatorze (symulator na poziomie bramek, nie vhdl!)?
Ta sama odpowiedź. Chyba faktycznie bede musiał się zabrać za tą symulację
post implementacyjną.
A jeżeli wyjdą/ nie wyjdą jakieś błędy to co wtedy zrobić? jak wyeliminować
potencjalne hazardy?
pozdrawiam
Sludig
Guest
Fri Jan 23, 2009 12:15 pm
Quote:
Jezeli to nie tajne to daj zrodla na grupie - > bedzie mozna cos wiecej
powiedziec.
Niestety nie mogę, projekt komercyjny, szef by mnie zabił

Poza tym kod
jest dosyć długi.
Quote:
Prawdopodobnie problemem jest :
- brak synchronizacji sygnałów we wzgledem zegara automatu
sygnały wejściowe zmieniaja się na zboczu narastającym zegara, a FSM zmienia
stan na zboczu opadającym. Jest to wygodne bo łatwo udało mi się zrobić
zapis do SRAMu.
Quote:
- wymieszanie logiki async z sync
większość układów jest taktowana z tego samego zegara, ale niektóre mają
rozbudowane warunki clockEnable. Tylko moduł UART ma inny zegar.
Quote:
- dzielenie zegarów
UART ma własny zegar z drugiego wejścia zegarowego i on jest dzielony na 16.
Quote:
- brak syncronizacj sygnałów zew.
to jest niemożliwe. Tylko, że te sygnały pięknie nie wyglądają. Spore over i
under shooty. I poziom masy tak jakby się skokami zmienia od, ale to chyba
mnie oscyloskop okłamuje.
pozdrawiam
Adam Górski
Guest
Fri Jan 23, 2009 5:03 pm
Sludig pisze:
Quote:
Jezeli to nie tajne to daj zrodla na grupie - > bedzie mozna cos
wiecej powiedziec.
Niestety nie mogę, projekt komercyjny, szef by mnie zabił

Poza tym
kod jest dosyć długi.
Prawdopodobnie problemem jest :
- brak synchronizacji sygnałów we wzgledem zegara automatu
sygnały wejściowe zmieniaja się na zboczu narastającym zegara, a FSM
zmienia stan na zboczu opadającym. Jest to wygodne bo łatwo udało mi się
zrobić zapis do SRAMu.
Napisz jeszcze jaka częstotliwość zegara.
Nie jest zalecane mieszanie układów sync. działając na różnych zboczach.
Quote:
- wymieszanie logiki async z sync
większość układów jest taktowana z tego samego zegara, ale niektóre mają
rozbudowane warunki clockEnable. Tylko moduł UART ma inny zegar.
Rozbudowane warunki clockEnable raczej nie szkodzą. No w sumie zależy
jak rozbudowane :)
Quote:
- dzielenie zegarów
UART ma własny zegar z drugiego wejścia zegarowego i on jest dzielony na
16.
To powinno tez byc robione przez ClockEnable co 16 cykl
Quote:
- brak syncronizacj sygnałów zew.
to jest niemożliwe. Tylko, że te sygnały pięknie nie wyglądają. Spore
over i under shooty. I poziom masy tak jakby się skokami zmienia od, ale
to chyba mnie oscyloskop okłamuje.
Co jest niemożliwe ?
Tak overshoot i undershoot czesto pochodzą od oscyloskopu choć nie
zawsze ( mam na mysli doprowadzenia)
Nie znam Twojego układu ale wyobraź sobie że jeżeli sygnał zew nie jest
synchronizowany z zegarem automatu i występuję jako sygnał wpływający na
pracę automatu to może to spowodować trudne do przewidzenia jego działanie.
Pozdrawiam
Adam
Quote:
pozdrawiam
Jerry1111
Guest
Sat Jan 24, 2009 2:01 pm
Sludig wrote:
Quote:
Jezeli to nie tajne to daj zrodla na grupie - > bedzie mozna cos
wiecej powiedziec.
Niestety nie mogę, projekt komercyjny, szef by mnie zabił

Poza tym
kod jest dosyć długi.
Zawsze mozemy NDA podpisac - ale to juz offline ;-)
Quote:
Prawdopodobnie problemem jest :
- brak synchronizacji sygnałów we wzgledem zegara automatu
sygnały wejściowe zmieniaja się na zboczu narastającym zegara,
_gwarantujesz_ to? Czy tylko 'powinny sie zmieniac'?
Quote:
a FSM
zmienia stan na zboczu opadającym. Jest to wygodne bo łatwo udało mi się
zrobić zapis do SRAMu.
- wymieszanie logiki async z sync
większość układów jest taktowana z tego samego zegara, ale niektóre mają
rozbudowane warunki clockEnable. Tylko moduł UART ma inny zegar.
Wiekszosc, czyli nie wszystkie. Trzeba uwazac przy przechodzeniu miedzy
domenami.
Quote:
- dzielenie zegarów
Nigdy (nie ma po co). Jak Adam Gorski napisal - uzywac enable.
Quote:
UART ma własny zegar z drugiego wejścia zegarowego i on jest dzielony na
16.
- brak syncronizacj sygnałów zew.
to jest niemożliwe.
OK.
Quote:
Tylko, że te sygnały pięknie nie wyglądają.
Mozesz miec false-trigger. Wtedy _moze_ (ale tylko moze) jedna
kompilacja byc na to bardziej czula niz druga - zwlaszcza gdy polegasz
na zewnetrznej synchronizacji sygnalow, bo wtedy zamiast zlej wartosci
sygnalu widzianego przez Twoj uklad, zaczynaja sie dziac cuda.
Quote:
Spore
over i under shooty. I poziom masy tak jakby się skokami zmienia od, ale
to chyba mnie oscyloskop okłamuje.
A plytke ktos sprawdzal pod katem SI?
--
Jerry1111
Sludig
Guest
Sat Jan 24, 2009 8:27 pm
Witam
Quote:
Prawdopodobnie problemem jest :
- brak synchronizacji sygnałów we wzgledem zegara automatu
sygnały wejściowe zmieniaja się na zboczu narastającym zegara,
_gwarantujesz_ to? Czy tylko 'powinny sie zmieniac'?
tak mówi datasheet układu, który te dane wypluwa i tak widziałem na
oscyloskopie.
Quote:
większość układów jest taktowana z tego samego zegara, ale niektóre mają
rozbudowane warunki clockEnable. Tylko moduł UART ma inny zegar.
Wiekszosc, czyli nie wszystkie. Trzeba uwazac przy przechodzeniu miedzy
domenami.
FSM czeka na potwierdzenie odebrania danych przez UART w określonym stanie.
FSM zrealizowałem jako automal Mealy'ego. Może tu jest problem, ale narazie
go nie widze. Musze w pracy zobaczyć jak symulacja post-fix wygląda.
Quote:
- dzielenie zegarów
Nigdy (nie ma po co). Jak Adam Gorski napisal - uzywac enable.
To będzie pierwsza rzecz jaką zrobie w poniedziałek rano ;)
Quote:
Tylko, że te sygnały pięknie nie wyglądają.
Mozesz miec false-trigger. Wtedy _moze_ (ale tylko moze) jedna kompilacja
byc na to bardziej czula niz druga - zwlaszcza gdy polegasz na zewnetrznej
synchronizacji sygnalow, bo wtedy zamiast zlej wartosci sygnalu widzianego
przez Twoj uklad, zaczynaja sie dziac cuda.
Mam tylko syganły, które próbkuje na określonym zboczu zegara. Od trzech
linii zależy stan automatu, reszta to linie danych, które teoretycznie
wpływu nie mają na stan automatu i działanie układu.
Quote:
Spore over i under shooty. I poziom masy tak jakby się skokami zmienia
od, ale to chyba mnie oscyloskop okłamuje.
A plytke ktos sprawdzal pod katem SI?
Nie. Wiem, że niektóre programy udostępniają takie symulacje, ale nie
wiedziałbym jak się do tego zabrać.
Jerry1111
Guest
Sat Jan 24, 2009 10:31 pm
Sludig wrote:
Quote:
Witam
większość układów jest taktowana z tego samego zegara, ale niektóre
mają rozbudowane warunki clockEnable. Tylko moduł UART ma inny zegar.
Wiekszosc, czyli nie wszystkie. Trzeba uwazac przy przechodzeniu
miedzy domenami.
FSM czeka na potwierdzenie odebrania danych przez UART w określonym
stanie.
Ale masz DFFy miedzy uartem i fsm? Bo jak nie, to masz problem (wtedy,
gdy sygnal idzie do wiecej niz jednego wejscia fsm - rozne domeny
zegarowe, wiec kazde wejscie moze widziec inny sygnal, gdy masz pecha).
Czasem da sie to 'namierzyc' zmieniajac jakis pin w 'when others =>'
(jesli tam nie powinno sie trafic).
Quote:
FSM zrealizowałem jako automal Mealy'ego. Może tu jest problem,
ale narazie go nie widze. Musze w pracy zobaczyć jak symulacja post-fix
wygląda.
W post-fit moze byc ciezko to uchwycic, bo ciezko porobic jest 'realne'
przebiegi. Najlepszy bylby signal-tap, no ale Ty cpld uzywasz.
Quote:
- dzielenie zegarów
Nigdy (nie ma po co). Jak Adam Gorski napisal - uzywac enable.
To będzie pierwsza rzecz jaką zrobie w poniedziałek rano ;)
Tylko, że te sygnały pięknie nie wyglądają.
Mozesz miec false-trigger. Wtedy _moze_ (ale tylko moze) jedna
kompilacja byc na to bardziej czula niz druga - zwlaszcza gdy polegasz
na zewnetrznej synchronizacji sygnalow, bo wtedy zamiast zlej wartosci
sygnalu widzianego przez Twoj uklad, zaczynaja sie dziac cuda.
Mam tylko syganły, które próbkuje na określonym zboczu zegara. Od trzech
linii zależy stan automatu,
Daj po rejestrze na wszystkie linie wejsciowe. Jak problem zniknie, to
wiesz gdzie szukac.
Quote:
reszta to linie danych, które teoretycznie
wpływu nie mają na stan automatu i działanie układu.
Spore over i under shooty. I poziom masy tak jakby się skokami
zmienia od, ale to chyba mnie oscyloskop okłamuje.
A plytke ktos sprawdzal pod katem SI?
Nie. Wiem, że niektóre programy udostępniają takie symulacje, ale nie
wiedziałbym jak się do tego zabrać.
--
Jerry1111
Sludig
Guest
Mon Jan 26, 2009 5:08 pm
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
Jerry1111
Guest
Tue Jan 27, 2009 10:45 pm
Sludig wrote:
Quote:
Witam
Po przeczytaniu waszych uwag zrobiłem co następuje:
[cut]
Quote:
Na wykonanie symulacji post-fix nie
miałem czasu niestety.
Dlatego nie wiadomo co sie dzieje.
--
Jerry1111
Adam Górski
Guest
Wed Jan 28, 2009 12:30 am
Sludig pisze:
Quote:
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
Sludig
Guest
Wed Jan 28, 2009 4:48 pm
Quote:
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
Sludig
Guest
Wed Jan 28, 2009 4:50 pm
Quote:
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
Konop
Guest
Wed Jan 28, 2009 5:07 pm
Quote:
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
Goto page 1, 2 Next