FPGA/CPLD - MAX Altery, dziwny problem z LPM_COUNTER megafunction

Aug 26, 2005 4 Replies

Robiê aktualnie wiêkszy projekt na kostce Altery EPM3256ATC144-10. Wewn±trz mam miêdzy innymi modu³ obs³ugi biperka, g³o¶niczka (Schemat i plik symbolu znajdziecie tu

formatting link
jest raczej trywialny:



- dwa rejestry 8 bitowe do przechowywania 16-bitowego dzielnika



- licznik licz±cy w dó³ z mo¿liwo¶ci± za³adowania "dzielnika" od nowa po wyst±pieniu sygna³u carry



- wyj¶cie carry licznika podzielone przez dwa przerzutnikiem dla wyrównania do 50% wype³nienia podane jest na g³o¶niczek.



Na wej¶cie licznika podawany jest sygna³ zegarowy procka 48MHz. Problem jest taki, ¿e na wyj¶ciu g³o¶nikowym mam niestety szum! Na oscyloskopie widaæ przypadkowe zmiany stanu niemo¿liwe do zsynchronizowania zamiast stabilnej fali prostok±tnej.



Uk³ad symuluje siê poprawnie, nie ma tam widocznych problemów... Próba "wyprowadzenia" sygna³ów wewnêtrznych (carry) na zewn±trz kostki do zewnêtrznego pinu powoduje ¿e uk³ad dzia³a dobrze (inny efekt kompilacji, nieprzewidywalne skutki u³o¿enia bramek?)



Uwa¿ne studia pdf o magafunkcji o nazwie LPM_COUNTER wykaza³y ¿e z niezrozumia³ego dla mnie powodu ta megafunkcja nie jest wspierana w uk³adach MAX (not supported)!



Pytania:


- czy kto¶ orientuje siê dlaczego LPM_COUNTER jest "not supported" w kostkach MAX ? S± wymienione na li¶cie "supported" praktycznie wszystkie inne kostki Altery, ze Straixem, Cyclone, ACEX/APEX natomiast nie ma na li¶cie ani MAX ani MAXII. Dlaczego ?


- czy kto¶ widzi jaki¶ oczywisty b³±d w za³±czonym projekcie ?


- czy ma kto¶ jaki¶ inny pomys³ na realizacjê prostego g³o¶niczka generuj±cego zadan± czêstotliwo¶æ fali prostok±tnej z wej¶ciem on/off ?


OK, usun±³em bramkê AND3 która mia³a z jednej strony zabezpieczaæ uk³ad ostatniego przerzutnika przed jakimi¶ szpilkami na wyj¶ciu carry licznika a z drugiej mia³a wy³±czyæ licznik ca³kowicie gdy g³o¶niczek by³ softwareowo wy³±czony dla oszczêdno¶ci pr±du...

Nowy schemat jest tu:

formatting link
I teraz dzia³a... Za³adowanie dzielnika 0xBB80 (48000) daje pikn± falê prostok±tn± 500Hz o wype³nieniu 50%... jak nale¿y. Pytanie tylko brzmi - dlaczego uk³ad nie dzia³a³ wcze¶niej ?

Sorry, bede wrozyl z fusow bo nie moglem obejrzec schematow (format).

Rob _wylacznie_ cyfrowke synchroniczna (tj. ze wspolna linia zegara dla wszystkich przerzutnikow). Obecne FPGA, a szczegolnie narzedzia do nich kiepsko sobie radza z ukladami asynchronicznymi. Poza tym uklady asynchroniczne juz z zasady sa trudniejsze w projektowaniu i testowaniu. To taka dobra inzynierska praktyka.

Nb. uklady asynchroniczne to tez bardzo ciekawy temat. Warto go poznac chocby po to by moc projektowac interfejsy miedzy domenami zegarowymi, uklady bramkowania zegara czy uklady wejsciowe dla ukladow synchronicznych. Ale poki co to nie jest dobry sposob na projektowanie "core" logiki.

\R.

oj Pszemolu - a nie uczyli o wadach i zaletach licznikow synchronicznych ? Licznik pewnikiem jest synchroniczny, ale ladujesz dane asynchronicznie - na cout rzeczywiscie pojawia sie szpilka, ktora biorac pod uwage czasy propagacji na layoucie ma prawo zadzialac dowolnie.

Laduj dane synchronicznie.

A to rzeczywiscie jest ciekawe .. czyzby konstrukcja makrocel MAX wyklucza realizacje ktorej z funckcji LPM_COUNTER ? A moze tylko pomylka/zapomnienie ... chyba tak.

J.

IMHO pomylka. LPM_counter nie wykorzystuje zadnych specjalnych 'fiuczerow' poszczegolnych kostek.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required