logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Szerokość danych we/wy wieksza od liczby we/wy ukladu- DCM.

mariusz102102 15 Mar 2007 22:23 1989 8
REKLAMA
  • #1 3682533
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Witam,

    W moim projekcie szerokosc danych wejsciowych przekroczyla liczbe wejsc/wyjsc ukladu.

    Narazie mam takie rozwiazanie(np dla 16 bitow):
    -dziele 16 bitow na 2*8 bitow
    - wrzucam do rejestru z CLK*2
    CLK - zegar pozostalej czesci logiki


    Potrzebuje jakiegos rozwiazania uniwersalnego. Szerokosc danych wejsciowych i calej logiki projektu jest parametryzowana.
    Teraz potrzebuje dodac parametryzacje w zaleznosci od wielkosci ukladu (liczby wyprowadzen) i szerokosci danych wejsciowych.


    Pytania:
    1. Jak taki problem nalezy prawidlowo rozwiazac?
    2. Do dzielenia CLK domyslam sie ze powinienem uzyc DCM (Xilinx)? Moge prosic o jakis przyklad prawidlowego uzycia DCM?



    Z gory dziekuje za pomoc.

    Pozdrawiam
    Mariusz
  • REKLAMA
  • #2 3683010
    tony_tg
    Poziom 16  
    Posty: 140
    Pomógł: 13
    Ocena: 3
    Czesc,

    Mozesz napisac wiecej jakie masz zalozenia projektowe na dane wejsciowe? Musza byc szybkie? Piszesz, ze chcesz pomnozyc zegar systemowy x2 i uzyc go na flipflopy, ktore maja zatrzasnac Ci dane wejsciowe, do tego bedziesz potrzebowal sygnal enable dla kazdej polowki Twojego slowa wejsciowege.

    Ogolnie to co dokladnie bedzie Ci podawalo te dane wejsciowe i jak szybkie to ma byc? Sa interfejsy w tym Virtex'ie duzo szybsze ale one sa szeregowe wiec cos co bedzie Ci podawalo dane do FPGA musialoby to robic w takim wlasnie formacie a w FPGA jest deserializacja i potem mozesz sobie uzywac tego. Te interfejsy zaczynaja sie od 3 Giga bitow wiec sa wiecej niz szybkie dla wiekszosci aplikacji.


    Jesli chodzi o DCM to jest to proste. W Virtex 4 masz DCM_ADV ktory jest w zasadzie taki sam jak standardowy DCM. Mozesz uzyc go w swoim designie po prostu instancjonujac go. Pamietaj tylko nie uzywac tego zegara wejsciowege jako Twojego zegara systemowego tylko daj go na wejscie tego dcm'a i uzyj wyjscia CLK0 przez globalny bufor zegarowy jako zegara systemowego dla Twojej logiki. Wyjscie CLK2X przez globalny bufor zegara BUFG to Twoj zegar pomnozony przez 2. Oba zegary sa automatycznie deskewed i w perfekcyjnej fazie. (feedback idzie z wyjscia CLK0 za BUFG a nie przed!) Reset jest active high a wyjscie LOCKED powie Ci kiedy zegar jest stabilny.

    Jak chcesz to napisz na priv'a i wysle Ci gotowca.

    Tutaj jest sciezka z mojej maszyny do dokumentacji gdzie znajdziesz informacje na temat komponentu DCM (C:\EDA_APPS\Xilinx\ISE\Ver9.1\doc\usenglish\books\docs\lib\lib.pdf) zmien nazwe na DCM_ADV jak go bedziesz chcial uzyc w Virtex4.


    Pozdrawiam,
    tony_tg
  • REKLAMA
  • #3 3683231
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Witam,

    Prześlij mi proszę gotowca z uzyciem DCM.

    Dane wejściowe/ wyjściowe to liczby w formacie stalo przecinkowym - fixed. Na początku robilem wlasna implementacje (reprezentacji stalo przecinkowej), ale teraz uzywam biblioteki http://www.vhdl.org/vhdl-200x/vhdl-200x-ft/packages/files.html (jeszcze nie widzialem nic lepszego).

    Dane wejściowe od 1 liczby do max 1024 liczb+2 liczby na wyjsciu + sygnaly CLK, RST, ewentualnie sterujace. Szerokość jednej liczby od 8 bitow do 24 bitow. Czyli max szerokość ponad 1024*24 = 24000 bitow :).(ale to jest max teoretyczny, ograniczeniem na pewno będzie wielkość ukladu).

    Jeśli chodzi o wymagania. Jak najwieksza prędkość przy minimalnym uzyciu zasobow sprzętowych.;)

    Mozesz cos wiecej napisac o innych rozwiazaniach? Wiem ze Virtex maja cos takiego jak Rocket I/O. Ale boja sie troche samej implementacji z uzyciem rocket I/O. Pozatym Rocket I/O jest tylko w rodzinie FX.

    Pozdrawiam
    Mariusz
  • #4 3683387
    tony_tg
    Poziom 16  
    Posty: 140
    Pomógł: 13
    Ocena: 3
    Czesc,

    Interpretacja danej to Twoje zadanie wewnatrz FPGA, teraz problem ktory masz przed soba to faktycznie jak przeslac wiecej bitow przez mniej pinow. Czyli jak przeslac 24 bity uzywajac np 8 pinow.

    To co zaproponowales czyli skladac szersze dane jest najprostszym rozwiazaniem ale nie najszybszym. Do tego bedzie wymagalo paru dodatkowych pinow do sterowania ktora czesc slowa akurat jest obecna aby wiedziec gdzie to upchnac w FPGA.

    Ja osobiscie skupilbym sie na Twojej logice i testowal ja nawet na mniejszej przepustowosci a sprawe podawania danych zostawil bym na pozniej. Nie musisz uzywac tego zegara 2x tylko podawaj sobie dane 8 bitowe i sygnal kontrolny ktory Ci powie ktore 8 bitow sa ktora czescia Twojej 24 bitowej danej no i albo automat ktory bedzie mowil kiedy dane sa valid obserwujac co zostalo zapisane albo dodatkowy sygnal ktory bedzie mowil, ze juz wszystko jest gotowe, cos jak enable dla Twojej logiki, ze dane moga byc uzyte. Jak to rozwiazesz nie ma znaczenia.
    Na poczatek optowalbym za posiadaniem sygnalu enable dla Twojej logiki nawet jak dane wejsciowe to strumien, ale zawsze mozesz puscic Twoja logike nawet na jeden cykl zegara jesli to strumien.

    Rocket IO nie jest taki zly ale polecalbym posiadanie pelnej wersji ISE. Core Generator juz by Ci sie przydal do generacji clock management a i serializacja/deserializacja bylaby pomocna.

    Mozna by sie zastanowic nad uzyciem dedykowanych blokow IO do pamieci DDR. One maja dwa ff i mozna sobie zatrzaskiwac dane na oba zbocza zegara ale to tez wymaga sygnalow kontrolnych. No ale te bloki sa naprawde szybkie.

    Polecalbym tez poszperanie na stronie Xilinx'a, oni maja mnostwo ciekawych app notes i moga miec sugestie jak takie problemy rozwiazywac w ich ukladach. Maja tez rewelacyjne materialy jak bys byl zarejestrowanym posiadaczem pelnego ISE. Pogadaj na uczelni i choc jedna wersje sobie zalatwcie. Baza wiedzy u Xilinx'a jest potezna. Mowie to serio teraz. No i search engine z google'a jest rewelacyjny aby znalezc informacje. Nie wiem jak jest teraz ale kiedys moznabylo sobie poprosic Xilinx'a aby przeslali Ci DVD z wszystkimi app notes i data sheet plus wszystkie kody do przykladow. Cos takiego to czytania na 2 lata ale za to niesamowicie pomocne jest jak trzeba znalezc jakas informacje. Tak jak miec ich strone u siebie na kompie. Altera juz nie jest taka pomocna i nie maja tak rozbudowanego support dla klienta ;)

    Gotowca przesle za chwile na priva.

    Pozdrawiam,
    tony_tg
  • REKLAMA
  • #5 3683443
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Czesc,

    Jesli chodzi o ISE to korzystam z pelnej wersji ISE Fundation 8.2 - z uczelni. Syntyzer Synplify pro 8.1 ewentulanie LeonardoSpectrum.

    Jesli chodzi o logike - ponad tydzien testowania na prostych testbanch-ach (symulacja funkcjonalna, po syntezie i implementacji) wskazuje, ze wszystko dziala.

    Mam maly problem z jesli chodzi o dokladnosc obliczen, ale z tego zaraz zrobie nowy post.

    Jesli chodzi o testowanie wiekszej logiki to wrzuce prosty rejestr przesuwny ktory bede wypelnial w 2 taktach (lub wiecej ) i co 2 takty wrzucal (lub wiecej) na moja logike. Do testow powinno wystarczyc. Ale docelowo musze i tak cos dodac.


    Czekam na przyklad z DCM.
    Jesli chodzi o materialy Xilinxa przyznaje racje jest ich mnostwo... , ale zeby wyciagnac z nich potrzebne infomacje to faktycznie trzeba lat.

    Dziekuje za odpowiedz.
    Inne propozycje, linki itp mile widziane.


    Pozdrawiam
    Mariusz
  • #6 3694353
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Witam,

    Moze ma ktos jakies doswiadczenie z serializacja/deserializacja w Virtex4 (i nietylko Virtex4)?
    Wydaje mi sie ze mechanizm serializacje deserializacji powinien najlepiej rozwiazac moj problem z liczba we/wy ukladu oraz dac najlepsze wyniki jesli chodzi o szybkosc dzialania i wykorzystanie zasobow sprzetowych.

    Z tego co rozumiem cala realizacja mechanizmu serializacja/deserializacji jest w sposob natywny sprzetowy, a nie przez realizowanie odpwiedniej logiki za pomoca LUT itd.

    Pozdrawiam
    Mariusz
  • REKLAMA
  • #7 3694433
    griva
    Poziom 17  
    Posty: 203
    Pomógł: 12
    Ocena: 1
    kiedys uczestniczylem w projekcie w ktorym uzyte byly LVDS-y, po kablu scasi przesylalismy zegar i dane, strasznie to bylo czule na wszystko, doszlo do tego ze ekranowalizmy kabel folia aluminiowa :) ale po tym kabelku przesylalismy 32b/150MHz co dawalo 4.8Gbps po 4 albo 8 parach nie pamietam dokladnie, kabel mial dlugosc ok 1 m.
    Musielismy wymienic generatory zagara na gen. z mniejszym jitterem, DCM przy mnozeniu FX doklada tak duzy jitter ze doszlismy do tego ze mozna tylko uzywac przy takich rzeczach wyjsc tylko CLK0 i CLK2X.

    Teraz wiem ze na V4 jest duzo fajnych rzeczy do LVDS-ow ktore moga pomoc, ale na V2 to byl horror. Grzebanie w FPGA editorze i ustawianie, zmienianie area bylo na porzadku dziennym plus zmiana fazy zegara na DCM-ie. Generalnie slabo polecam ;-)
  • #8 3694652
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Griva,
    skrot LVDS oznacza - Low voltage differential signaling jak sie domyslam. Chce zrobic w miare prosto i szybko - przesylanie SCASI + przesylanie czestotoliwosci po kablu raczej odpada:).


    Virtex-4 ISERDES is a dedicated serial-to-parallel converter. Uzywal ktos tego komponentu?

    Pozdrawiam
    Mariusz
  • #9 3694886
    griva
    Poziom 17  
    Posty: 203
    Pomógł: 12
    Ocena: 1
    scasi byl tylko kabel bo ma ladnie poprzelatane pary, zegar byl przesylany bo to byly 2 oddzielne boardy.

    LVDS to tez pewnego rodzaju sposob przesylania danych, uruchom coregen-a i wszystko bedzie jasne ;-)

Podsumowanie tematu

✨ W dyskusji poruszono problem przesyłania szerokich danych wejściowych o szerokości przekraczającej liczbę dostępnych pinów układu FPGA. Proponowane rozwiązania obejmują dzielenie szerokich słów danych na mniejsze fragmenty i przesyłanie ich w kolejnych cyklach zegara, co wymaga dodatkowych sygnałów sterujących i synchronizacji. Zastosowanie podwójnej częstotliwości zegara (CLK*2) do rejestracji danych jest możliwe, jednak wymaga użycia modułu DCM (Digital Clock Manager) w układach Xilinx, np. DCM_ADV w Virtex-4, który pozwala na generowanie zegara o wyższej częstotliwości. Wskazano, że DCM należy instancjonować poprawnie, nie używając bezpośrednio zegara wejściowego jako zegara systemowego.

Alternatywnie, rekomendowane jest rozważenie mechanizmów szeregowo-równoległych (serializacja/deserializacja) dostępnych natywnie w FPGA, takich jak ISERDES w Virtex-4, które pozwalają na efektywne przesyłanie szerokich danych przy ograniczonej liczbie pinów, minimalizując zużycie zasobów i zwiększając prędkość transmisji. Wspomniano również o interfejsach Rocket I/O w rodzinie Virtex-FX, choć ich implementacja może być bardziej skomplikowana.

Dyskutowano także o przesyłaniu danych LVDS (Low Voltage Differential Signaling) jako metody wysokowydajnej transmisji, jednak z uwagi na złożoność i wrażliwość na zakłócenia, autor preferuje prostsze rozwiązania. Podkreślono, że testowanie logiki na mniejszych przepustowościach i stopniowe rozszerzanie jest praktycznym podejściem. Wskazano na dostępność bibliotek VHDL do reprezentacji liczb stałoprzecinkowych oraz narzędzi takich jak Coregen do generowania IP dla interfejsów LVDS i DCM.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA