Skocz do zawartości

Pomocna odpowiedź

Napisano (edytowany)

W ramach pewnego projektu muszę obsłużyć komunikację za pomocą interfejsu LVDS w układzie programowalnym FPGA (lub w zasadzie, w tej chwili, SoC). Interesuje mnie zarówno nadajnik, jak również odbiornik.

Szukam materiałów na ten temat w internecie i w zasadzie jedyne co znalazłem to odpowiednie skonfigurowanie pinów i użycie prymitywów (np. IBUFDS - dla Xilinxa) w kodzie VHDL (tego języka używam). Czy jest jakaś (w miarę prosta) możliwość zastąpienia tych prymitywów własnym kodem? Nie mam pomysłu na napisanie takiego elementu, niewprowadzającego zbędnych opóźnień. Zależy mi na zapewnieniu możliwie jak największej „przenoszalności" kodu. Czy jest możliwość sprawdzenia, co tak naprawdę znajduje się w tych prymitywach (chciałbym zobaczyć, co „siedzi" w środku)? Czy może jest to po prostu fizyczny element, „zaszyty" wewnątrz FPGA? Czy jeżeli opiszę własny komponent, mający dwa wejścia (sygnały różnicowe zanegowany i nie) i jedno wyjście (które będzie po prostu podłączone do wejścia niezanegowanego lub będzie działać według załączonej tabeli zaczerpniętej z dokumentacji Xilinxa), to narzędzie do syntezy „domyśli się", że trzeba wstawić w to miejsce wejściowy bufor różnicowy? Czy nie będzie problemu z przeniesieniem projektu na inny układ (innego producenta)?

Przepraszam za poziom pytań, ale pierwszy raz będę korzystał z transmisji różnicowej i nie wszystko jest dla mnie jasne. Ponadto, nie mam dużego doświadczenia z układami programowalnymi.

tabelaPrawdy.png

Edytowano przez piotr96

Udostępnij ten post


Link to post
Share on other sites
2 godziny temu, piotr96 napisał:

Czy może jest to po prostu fizyczny element, „zaszyty" wewnątrz FPGA?

Tak, nadajnik i odbiornik LVDS są fizycznymi elementami zaszytymi w strukturę FPGA. O ile jeszcze można sobie wyobrazić logiczne udawanie takiego nadajnika przez skorzystanie z dwóch odwróconych, "zwykłych" pinów cyfrowych o tyle zrobienie odbiornika czułego na różnicę dwóch napięć (specjalny komparator analogowy w odbiorniku LVDS) za pomocą dwóch osobnych wejść cyfrowych jest nie do zrobienia. Oczywiście w ten spsób zrobione wyjścia także nie zadziałają, bo oprócz logiki potrzeba też trochę fizyki, czyli wielkości napięć, zbalansowanych wydajności prądowych, dopasowania impedancji, kontroli szybkości zboczy itp. Tak więc niestety, w przypadku LVDS - tak samo jak w przypadku fizycznych interfejsów do pamięci DDR, wbudowanych generatorów RC, PLL, czy innych podobnych bloków "wszczepionych sprzętowo" na chip musisz używać prymitywów dostarczanych przez producenta. Syntezer nie ma tu nic do gadania, bo informacja o skorzystaniu z takiego bloku przenosi sie wprost do etapu place&route. To jest właśnie to coś, co wiąże Cię z daną rodziną FPGA i nie jest przenośne. No może w ramach rodziny lub nawet producenta czasem tak, ale już na pewno nie między konkurującymi wytwórcami.

  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Dziękuję bardzo za wyczerpującą odpowiedź. Teraz przynajmniej mam już pewność, że niestety muszę użyć tych prymitywów.

Udostępnij ten post


Link to post
Share on other sites

Cześć,

jest trochę gotowych "IP Core" dla tego problemu. Niestety są to rozwiązania komercyjne (płatne). Może dla niektórych z nich można uruchomić czasową wersję ewaluacyjną.

https://www.design-reuse.com/sip/lvds-c-280/

https://www.logicbricks.com/Products/logiSLVDS_RX.aspx

Na tym pierwszym portalu trzeba założyć darmowe konto.

Odnośnie prymitywów Xilinx'a zobacz ten dokument:

https://www.xilinx.com/support/documentation/application_notes/xapp585-lvds-source-synch-serdes-clock-multiplication.pdf

Pozdrawiam

 

  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za linki, na pewno się przydadzą, zwłaszcza ostatni. Niestety, wykorzystanie rozwiązań komercyjnych raczej nie wchodzi w grę. Projekt ma charakter edukacyjny i jak najwięcej rzeczy chcę zrobić sam. Dodatkowo, w tej chwili korzystam z Xilinxa, a ostateczna wersja będzie zrealizowana prawdopodobnie na układzie innej firmy, dlatego chciałbym mieć tak przenośny kod, jak to tylko jest możliwe.

Mam jeszcze średnie wyobrażenie o skali problemu - do tej pory myślałem, że po zastosowaniu bloków do zamiany sygnału różnicowego (zewnętrznego) na sygnał asymetryczny (wewnątrz FPGA) zrobię odbiorniki i nadajniki w podobny sposób do prostych, wolnych interfejsów UART, SPI, I2C, wykorzystując również jakiś blok PLL do generacji szybszego zegara. Muszę jeszcze sporo poczytać o tym .

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, piotr96 napisał:

Dziękuję za linki, na pewno się przydadzą, zwłaszcza ostatni. Niestety, wykorzystanie rozwiązań komercyjnych raczej nie wchodzi w grę. Projekt ma charakter edukacyjny i jak najwięcej rzeczy chcę zrobić sam.

Cześć,

zdaję sobie z tego sprawę. Dużo komercyjnych ip-core ma możliwość czasowego uruchomienia np. 1 miesiąc. Można się z nich dużo dowiedzieć jak działa takie rozwiązanie.

Akurat jeśli chodzi o firmowe IP-core dla LVDS to Intel/Altera ma wydaje mi się więcej dokumentacji niż Xilinx.

Pozdrawiam

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
6 minut temu, FlyingDutch napisał:

zdaję sobie z tego sprawę. Dużo komercyjnych ip-core ma możliwość czasowego uruchomienia np. 1 miesiąc. Można się z nich dużo dowiedzieć jak działa takie rozwiązanie.

Dziękuję raz jeszcze, pewnie skorzystam z możliwości testów, ale najpierw spróbuję sam coś uruchomić.

6 minut temu, FlyingDutch napisał:

Akurat jeśli chodzi o firmowe IP-core dla LVDS to Intel/Altera ma wydaje mi się więcej dokumentacji niż Xilinx.

Akurat, niestety, Intel nie wchodzi w grę.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...