cyfrowy pomiar fazy

Witam potrzebuje zbudowac uklad mierzacy faze sygnalu w odniesieniu do zegara rozdzielczosc 10 bitow, zakres 20ns mam kilka koncepcji :

- analogowo z integratorem - sprawdzona, ale klopotliwa

- cyfrowa z lancuchem rejestrow i opoznien myslalem ustawic lancuch rejestrow i opoznien w FPGA, tylko czy istnieja jakies narzedzia pozwalajace kontrolowac polaczenia w FPGA na poziome bramek? A mzoe ktos z Was sie spotkal z chipem ktory posiada to zrobione takowa metoda? idea jest banalna: mamy np 1024 przerzutnikow D, wszystkie wejscia zegarowe laczymy razem, natomiast wejscie D pierwszego podajemy sygnal, na drugie sygnal opozniony o kilkaset ps, na nastepne dalej opozniony..itd.. FPGA byloby idealne, wejscia zegarowe sa laczone 1 linia, gdyby tylko jeszcze dalo sie recznie ustawic polaczenia pomiedzy LE, to w malym cyclone

1c3 zmiescilbym caly projekt lacznie z odczytem rejestrow. jeszcze lepiej byloby uzyc dedykowanego chipu..Ale czy sa takowe?
Reply to
Greg
Loading thread data ...

Greg:

floorplan w quartus pozwala recznie umiescic logike w dowolnym miejscu, ale rozmieszczenie 1024 bramek bedzie troche klopotliwe; mozna to tez zrobic zwyklym edytorem tekstu w pliku <projekt>.qsf;

takie opoznienia na bramkach beda troche zalezec od temperatury i z pewnascia nie beda idealnie rowne, bo zaleza od 'oddalenia' bramek, opoznienie miedzy sasiednimi bramkami jest znaczaco mniejsze niz miedzy bramkami w sasiednich kolumnach czy rzedach;

jezeli pomiar moze trwac dluzszy czas, to mozna pomyslec o zastosowaniu zewnetrznej, programowalnej linii opozniajacej, o ile sie orientuje sa takie linie majace step 0.25ns;

JA

Reply to
JA

nie zwrocilem uwagi na to wczesniej:

[...] > mamy np 1024 przerzutnikow D, wszystkie wejscia zegarowe > laczymy razem, natomiast wejscie D pierwszego podajemy > sygnal, na drugie sygnal opozniony o kilkaset ps, > na nastepne dalej opozniony..itd..

cos tu nie gra, albo 10 bitow, albo opoznienia kilkaset ps ...

a przy okazji - chyba lepszym pomyslem na lancuch opoznien sa opoznienia w I/O celach, niz logika w fpga;

JA

Reply to
JA

nie bardzo rozumiem - chcesz zmierzyc pozycje zbocza z rozdzielczoscia .. 20ps ?

Cos od oscyloskopow ?

J.

Reply to
J.F.

tak, dokladnie da sie zrobic, bo chlopaki w firmie robia... tyle ze robia to przy okazji i wsadzaja ten bloczek jako jeden z wielu do scalaka..

Reply to
Greg(G.Kasprowicz

mialo byc kilkanascie:)

Reply to
Greg(G.Kasprowicz

tak, ale IMHO nie pozwala na zabawe bramkami..

to akurat przeboleje..od czego jest linearyzacja...

pomiar ma byc powarzany co 20ns , z tego liczone histogramy..

Reply to
Greg(G.Kasprowicz
Reply to
Greg(G.Kasprowicz

o pojedyncze bramki w FPGA trudno, moze u Actela. Musialbys manipulowac raczej polaczeniami.

J.

Reply to
J.F.

okazuje sie ze chipy ACAM'a idealnie rozwiazuja sprawe.. zeby bylo zabawniej, chlopaki z firmy uzywaja ich w eksperymencie COMPASS :) teraz trzeba sie do nich tylko ladnie usmeichnac..

formatting link

Reply to
Greg(G.Kasprowicz

zalezy, co rozumiesz pod 'zabawe bramkami'; quartus pozwala recznie zrobic wszystko;

no wlasnie, co 20ns i z rozdzielczoscia 20ps, to calkiem poza zastosowaniami fpga;

ale ... w nocy, i pod pewnym wplywem piwa, myslalem o takim oto rozwiazaniu: quartus pozwala podniesc czestotliwosc za pomoca pll do 400MHz, co przy wykorzystaniu obu zboczy daje juz 800MHz, rozdzielczosc 1.25ns, jakby podac wejsciowy zegar na 4 pll, podniesc do 400MHz, i kazde z wyjsc pll-ek poprzesuwac miedzy soba o 100ps [na co pozwala quartus, na ile prawdziwe jest to 100ps - nie potrafie powiedziec] to korzystajac z obu zboczy mamy teoretyczna rozdzielczosc 50ps; nie jest to jeszcze wymagane 20ps, ale jak na fpga wynik niezly :)

wierze nawet, ze przy uwaznym rozmieszczeniu logiki dalo by sie w _praktyce_ uzyskac dokladnosc rzedu setek ps;

JA

Reply to
JA

bede musial sie w to wgryzc...do tej pory kompilator robil wszystko... mam nastepujacy problem.. potrzebuje sprobkowac sygnal rozdzielczoscia min 125ps oraz z opoznieniem kilkadziesiat ns...kilka s (sic!) odtworzyc go.. sygnal trwa max 200ns

w tym celu moge dac SERDES 10 gbit i po LVDS poslac do FPGA, do tego zegar

622MHz lub 155.5 MHz, w FPGA ten strumien rozdzielam na 4 po 155.5 MHz i laduje do 4 pamieci 1kx16 bitow.. Ale to drogie rozwiazanie.. same SER i DES sa po 80$ u Maxima... mam inny pomysl..

dac 4 rejestry 8 bit w logice ECL, one maja Tsu i Th <80ps. Zasilic je zegarem 250MHz, 1 rejestr normalnie, drugi odwroconym o 180st (zamienione linie PECL), 3 rejest zegar opozniony o 90 stopni, 4 - opozniony i odwrocony.. w ten sposob mamy probkowanie co 1ns i 32 bity danych Nastepnie na kazde z wejsc rejestru podajemy te sama dana, ale opozniona o

125ps, np za pomoca odowiedniej dlugosci sciezek laczac poszczegolne wejscia rejestrow razem, dostajemy efektywna szybkosc probkowania 8 GHz !!! niezle jak na FPGA.. problem ze 8 szt 4-ro bitowych rejestrow ECL ksoztuje ponad 100$, czyli drozej niz ten SERDES.... Wraz drogo..

dalsze uproszczenie... wsadzamy rejestry do FPGA... dajemy do 8 pinow opozniony o 125ps sygnal , czyli D0 - bezposredni, D1 - opozn 125ps D2 opozn 250ps D3 - opozn 375ps D4 itd...

Dla Cyclone Tsu i Th < 30ps , wiec niezle..

PYTANIE: czy da sie recznie poukladac te przerzutniki na wejsciach LVDS, zeby opoznienie od padu do 4 przerzutnikow bylo zblozone z dokl kilkunastu ps?? Moge w sumie polaczyc po 4 pady razem..ale nie powinno to byc konieczne Co do zegara, to powinno dac rade wygenerowac przesuniety o 90 stopni bez problemu... taki uklad by rozwiazal problem kosztem niemal zerowym - nie liczac FPGA...

Nastepny problem - synteza przebiegu... moge zrobic to za pomoca Deserialiser'a 10 gbit... ale fajnei byloby to zrobic za pomoca opoznien na PCB i przerzutnikach w FPGA... osiagneicie tych 100ps impulsow jest raczej niewykonalne, ale z uwagi ze minim. dlugosc impulsu wejsciowego to ok 3ns, powinno dac sie cos zrobic..Mysle nad tym..

Reply to
Greg(G.Kasprowicz

mialem na mysli serialiser.. np MAX3952 juz wiem ze da sie w FPGA zrobic i za pomoca sciezek...pytanie jak wyzej, co z dokladnosci opoznien dla poszczegolnych padow...

Reply to
Greg(G.Kasprowicz

nie rozumiem :( [zwlaszcza "z opoznieniem kilkadziesiat ns...kilka s"]; wczesniej chodzilo, zdaje sie, o pomiar opoznienia zbocza jednego sygnalu wzgledem zbocza innego; moglbys, moze na adres prywatny, narysowac idee tego, co chcesz zrobic i wytlumaczyc, tak jak chlopu na miedzy ...

tego tez nie rozumiem :( lvds podnosi co prawda czestotliwosc, by przeslac rownolegle slowo seryjnie, ale to nie znaczy, ze probkuje jakis sygnal z 10krotnie wieksza czestotliwoscia;

pomijajac juz to, co to za przerzutniki na wejsciach lvds, przerzutniki mozesz sobie poukladac jak ci sie podoba, pytanie, na ile stale jest opoznienie miedzy padem, a celami sasiadujacymi z tym padem, floorplan moze pokazywac identyczne opoznienie, ale to sa w koncu tylko liczby wpisane w timing model, a nie faktyczne wartosci; samo lutowanie da nieco rozna pojemnosc i indukcyjnosc kazdego pinu;

nie wiem czy to ci cos pomoze, ale najwieksza powtarzalnosc parametrow czasowych powinno dac wykorzystanie przerzutnikow w I/O cell; I/O cele tez maja programowalne opoznienia miedzy padem a flip-flop, z krokiem ok. 60ps, wiec chyba z podobna dokladnoscia [ale tylko stratix, cyclone ma chyba tylko 3 ustawienia; jak wyglada I/O cela i co mozna w niej ustawic mozesz zobaczyc w 'resource editor', w quartus ->tools->chip editor i w nim podwojny click na cele I/O]; do ustawiania drobnych opoznien mozna uzyc rowniez pll - ale oczywiscie tylko do sygnalu bedacego stala fala prostokatna o niezmiennych parametrach;

tego tez nie rozumiem :(

na koniec - moim zdaniem rozrzut parametrow w fpga zupelnie wyklucza takie "pikosekundowe zastosowania", pobaw sie, jesli to nie jest jakis krytyczny projekt, jesli jest, to ja bym sie zwrocil do fachowcow [dobrych] od analogowki;

JA

Reply to
JA

poprzedni problem pomiaru zbocza rozwiazuja mi uklady TDC, teraz mam zdefiniowany nowy problem mam sobie sygnal cyfrowy trwajacy ok 3...200ns, z diody odbiorczej dalmierza laserowego i musze zrobic symulator udajacy odbicie wiazki.. potrzebuje wiec odebrac sygnal, opoznic i nadac z powrotem.. z dokladnoscia < 0.5ns opoznienie regulowane od kilkunastu ns do ponad 60us albo wiecej.. tak wiec probkuje sobie ten sygnal z czestotliwoscia ekwiwalentna kilka GHZ, wrzucam do RAM i czekam...potem go odtwarzam..

SERDES to sa szybkie reejstry przesuwne + PLL pracuje to na czestotliwosci np 10 GHZ ze slowem 16 bit tak wiec taki rejesr zbiera mi dane co 100ps i uklada w slowa 16bit potem juz odbieram je rownolegle z szybkoscia 622MHz po LVDS i zegarem

311MHz (to Cyclone powinno dac rade zrobic) synteza przebiegu wyglada odwrotnie, wysylam slowa 16bit, a SER zamienia mi na ciag bitow o zegarze 10GHz

zgadza sie, LVDS bedzie pracowal z zegarem kilkase MHz dlatego pomysl jest by probkowac rownolegle w 8 kanalach ten sam przebieg, tylko w kazdym kanale nieco opozniony.. w ten sposob zwiekszamy efektywna predkosc zbieranai informacji 8-smio krotnie. Pomysl jest sprawdzony w innym projkecie i dziala calkiem przyzwoicie

jestem tego swiadom..wyglada na to ze w najgorszym wypadku porzebby stroic niezaleznie zewnetrzne linie opozniajace, jest to do zrobienia wezme chyba PGA na warsztat, podepne Agilenta 60GHz i posprawdzam jak to jest z tymi czasami pad -rejestr, mam pomysl jak o zrobic

tak, ale takowe maja Setup Time i Hold Time rzedu 300ps, rejestry LE maja je ponizej 30ps

moze sie przydac.. istnieje gdzies w quartusie do tego ustawienie? czy sa takowe komponenty? a moze tylko przy okazji wyjscia do pamieci DDR?

tak, jestem tego swiadom

opisalem to powyzej

dlatego ciagle mysle dac uklady SERDES...one rozwiaza problem calkowicie albo zrobic to na rejstrach ECL ciekawe o ile moga sie roznic opoznienia w tym samym egzemplarzu scalaka pomiedzy 2 sasiadujacymi padami.. jesli mniej niz 50ps, to byloby o zaakcepowania.

Reply to
Greg(G.Kasprowicz

Greg:

dokladnosc czego ? - opoznienia, szerokosci sygnalu ?

z grubsza wiem, co to serdes, jakies 8 lat temu uzywalem ich do zmniejszenia ilosci polaczen miedzy plytkami;

ten rejestr, ktory podales w innym poscie max3952, zbiera dane z zegarem 640MHz, 10GHz to czestotliwosc transmisji szeregowej; nawiasem mowiac setup i hold time rejestrow rownoleglych dla tego ukladu to 200ps, czyli dokladnosc 'skanowania' efektywnie wynosi 400ps;

jesli dane katalogowe sa prawdziwe, to z dokladnoscia 400ps;

nie znalazlem takich danych, ale przeskanowalem jedynie manual cyclone na setup time, glebiej szukac mi sie po prostu nie chcialo (: ;

zrobilem z quartusem kilka prob, ktore daly takie wyniki: [cyclone2] powtarzalnosc opoznienia miedzy padem, a rejestrem LE ~20ps; [wg. floorplan, na ile dane pokazywane przez to narzedzie odpowiadaja rzeczywistosci to osobna sprawa] opoznienie miedzy padem a I/O FF 0ps, wiec chyba powtarzalnosc tez okolo 0ps; clock skew jesli zegar jest prowadzony bezposrednio z pinu kilkanascie ps jesli zegar jest prowadzony przez clock buffer [clock_ctrl] kilka ps;

moim zdaniem - jesli dobrze rozumiem co chcesz osiagnac, i zakladajac uzycie fpga, ktore moim zdaniem do tego sie nie nadaje - byloby opoznienie mierzonego sygnalu sciezkami na pcb i zapisywanie ich w rejestrach I/O cell, byc moze korzystajac z opcji, ze w I/O cell sa 2 rejestry zapisujace na narastajacym i opadajacym zboczu zegara; i wymuszenie na kompilatorze generowanie zegara przez clock_ctrl, co zapewnia najmniejsze mozliwe clock skew;

sprawdzilem, cyclone2 ma 7 krokow, mniej wiecej co 60ps;

set_instance_assignment -name PAD_TO_CORE_DELAY 0/1/2...6 -from <name>

-to <name>

w *.qsf file;

na poczatku prosciej chyba w 'compilator report' kliknac na "fitter", potem na "resource section", dalej na "input pins" tam wybrac "input", zanaczyc jakis input signal i klik prawa myszka - z menu wybrac: 'locate in resource property editor' i ustawic opoznienie; po skompilowaniu - 'assigments->back annotate assigments->

zaznaczyc 'pin, cell, routing...' i 'delay chains'; po tej operacji mozna zobaczyc jak wyglada przypisanie zarowno w *.qsf file jak i w 'assignment editor' quartusa;

?

architektura I/O jest przygotowana do wspolpracy z ddr, co nie znaczy, ze nie mozna jej wykorzystac inaczej :); moge podpowiedziec jak skonfigurowac I/O cell altery, by robila to, co od niej oczekujemy;

JA

Reply to
JA

jednego i drugiego

tak, chodzi mi zeby zbierac dane szeregowo i zamieniac na rownolegle.. strumien jest 1 bitowy ale poniewaz oba uklady beda pracowac synchronicznie, to nie dbam w tej chwili o timingi interfejsu roznoleglego ani jego Tsu i Th, cala ciezka robote odwala SERDES, FPGA tylko gromadzi dane.. uklad SER i DES moge zapuscic z tego samego zegara 10GHz znalalzme takze uklady pracujace na 2.48GHz, mozliwe ze wystarcza takowe..

byloby super...pomierze jak wyglada rzeczywistosc..

ciekawe jak stabilne w czasie to jest...

dzieki, bede probowal

dzieki, na razie sprobuje z tymi serdes, potrzebuje rozwiazania ktore ruszy na pewno, potem bede optymalizowal..

Reply to
Greg

powodzenia, daj znac jak poszlo;

JA

Reply to
JA

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.