Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

fpga + sdram = videoram?

14 Cze 2009 00:38 2663 10
  • Poziom 10  
    witam. robię projekt bazujący na module mmfpga12 od propox'a. na module tym znajduje się kość pamięci sdram. chcę kość tą wykorzystać jako pamięć videoram. czytam dokumentację tej pamięci i nie mogę wyciągnąć wniosków, czy będzie ona wystarczająco szybka. chcę pobierać dane z pamięci w odstępach maxymalnie 20ns. w dokumentacji napisane jest że sygnał zegarowy to 7ns. ale przecież jak doliczymy całą procedurę zaadresowania komórki pamięci i inne operacje to chyba nie wyrobię się w tych 20ns. czy ktoś bawił się już taką pamięcią bądź tym modułem i ma z tym jakieś doświadczenie? może jest jakieś ciekawsze i prostsze rozwiązanie na realizację pamięci videoram (może jakaś kość dwuportowa)?
  • PCBway
  • VIP Zasłużony dla elektroda
    Podaj jakieś odnośniki do datasheetów płytki, FPGA, pamięci. Na pewno nie dasz rady z zapisami/odczytami typu burst?

    Pozdrawiam,
    Dr.Vee
  • Poziom 10  
    tu jest opis modułu: http://www.propox.com/products/t_154.html
    tu jest pdf od pamięci: http://doc.chipfind.ru/pdf/amicc/a43l4616.pdf

    odczyty burst mogły by zdać egzamin, "w wolnych chwilach" przerzucić większą paczkę danych z pamięci do wewnętrznego dodatkowego buforu i dopiero z buforu czytać bajt po bajcie. to jest jakiś pomysł :D ale jednak zależy mi bardziej na prostocie konstrukcji, bez zbędnych udziwnień i komplikacji. wiadomo... proste rozwiązania są najbardziej skuteczne. a co z innymi rozwiązaniami? czytałem dużo o dostępności (a raczej jej braku) pamięci dwuportowych. czy sytuacja w tej kwestii nadal jest tak kiepska? interesuje mnie również "przesiadka" na coś większego od w/w modułu (przede wszystkim większa liczba nóżek, aby móc całą komunikacje ze światem zewnętrznym maxymalnie zrównoleglić). moduły altery z dużymi cyclonami to też raczej deficytowy towar. wracając do tej pamięci... ktoś ma jeszcze jakieś pomysły?
  • PCBway
  • Poziom 1  
    jeżeli zastosujesz na przemian zapis/odczyt z/do bufora w FPGA w burstach np. po 8 słów, możesz inicjować następny dostęp jeszcze w trakcie odczytywania/zapisu poprzedniego bursta (będącego w trakcie). krytyczne będzie przełączanie /OE. wówczas przy taktowniu 7 ns (około 142MHz) uzyskasz 8 słów z pamięci w czasie 56 ns i w takim czasie zapiszesz je też do SDRAMu.
    jeżeli obawy z przełączaniem szyny danych się potwierdzą możesz zastosować pauzę między burstami - bezpieczną - tracisz wtedy max około 6 cykli (42 ns) na inicjację bursta + 8 cykli odczytu (56 ns) - czyli 98 ns - grubo poniżej wymaganych 160 ns (8 * 20 ns).
    jeżeli kontroler w FPGA będzie wykonywał te odczyty zapisy w sposób ciągły i buforował dane w FIFO'ach - najlepiej dual-portowych - problem będzie rozwiązany. powinno się udać.
    FIFO dp potrzebuje parę cykli na synchronizację, jednak gdy będzie zapisywane/odczytywane w sposób ciągły - z punktu widzenia systemu opóźnienie nie będzie istotne (zauważalne tylko przy starcie).

    prostszym rozwiązaniem (pod względem interfejsu w FPGA) były by zewnętrzne pamięci SRAM np. UtSRAM firmy SAMSUNG - taka pozwala na naprzemienne odczytywanie/zapis danych - niemniej jednak możesz mieć kłopot z ich zdobyciem w Polsce.
  • Poziom 15  
    Ja póki co zrobiłem to na statycznym ramie 10 ns 16 bit, tylko że musiałem dwie kości zastosować żeby pokryć cały ekran dla 800x600. Rozwiązanie najprostsze w zaprogramowaniu. Odczytuję piksele po kolei do jakiegoś fifo, a zapisuję w dowolnym momencie, bo fifo do odczytu zawsze się trochę zapełni przy czasach powrotu plamki. Co prawda rewelacyjnego odświeżania nie wyciśniesz z tego.
    Tu masz efekt: http://proj.cal.pl/index.php?title=Karta_graficzna

    A tak btw, to mam też odpaloną grafę na spartanie 3 z frame bufferem na ddr, ale niestety to już musi być bga więc raczej pcb na tym nie zrobię ;/.
  • Poziom 10  
    dzięki za propozycje, chyba jednak przekonałem się do szybkich sram'ów. skoro większość osób w ten sposób coś realizowało to sposób jest sprawdzony i skuteczny i nie ma sensu zbytnio przekombinowywać. a może macie jakaś propozycję jak można podpiąć się z procesorem do FPGA tak aby współdzielić tą pamięć (w FPGA po podpięciu pamięci mam juz tylko 11 wolnych pinów). moja propozycja jest taka aby nie pchać się z szyną danych/adresu procesora do fpga tylko bezposrednio do pamięci (równolegle do fpga). pilnować wtedy jednak trzeba by było aby fpga i procesor jednoczesnie nie "wysyłali" danych. czy taki sposób byłby do zrealizowania?
  • Poziom 10  
    pidorek napisał:
    Ja póki co zrobiłem to na statycznym ramie 10 ns 16 bit, tylko że musiałem dwie kości zastosować żeby pokryć cały ekran dla 800x600. Rozwiązanie najprostsze w zaprogramowaniu. Odczytuję piksele po kolei do jakiegoś fifo, a zapisuję w dowolnym momencie, bo fifo do odczytu zawsze się trochę zapełni przy czasach powrotu plamki. Co prawda rewelacyjnego odświeżania nie wyciśniesz z tego.
    Tu masz efekt: http://proj.cal.pl/index.php?title=Karta_graficzna

    A tak btw, to mam też odpaloną grafę na spartanie 3 z frame bufferem na ddr, ale niestety to już musi być bga więc raczej pcb na tym nie zrobię ;/.


    Witam

    Jestem w trakcie realizacji podobnego projektu na Spartan-3E. Chciałbym użyć dwóch kości 512kx8 bit i mam pytanie następujące: w jakiej topologii to połączyć aby nie pojawiły się "efekty specjalne" towarzyszące magistralom wysokiej częstotliwości? Mam zamiar zrealizować wszystko na płytce dwuwarstwowej. Czy kolega mógłby troszeczkę naświetlić sposób przyłączenia SRAM do FPGA?

    Pozdrawiam
  • Poziom 15  
    A nie lepiej zastosować pamięć 16bit? 256bitowy kolor to tak troche skromnie :). Co masz na myśli pytając o topologie? Ja osobiście znam tylko jeden sposób podłączenia SRAM. Z tego co pamiętam to starałem się szyny adresowe i danych umieszczać w całości w obrębie jednego banku, po za tym żadnych specjalnych zabiegów nie ma co tam robić. W porównaniu z DDR te pamięci to ślimaki, więc z tymi magistralami wysokiej częstotliwości to nie przesadzaj. Jak będziesz potrzebował dokładniejszych szczegółów pytaj.

    Pozdrawiam
  • Poziom 10  
    Myślę o konfiguracji 2x 512kx8 = 512kx16, czyli dane będą o szerokości 16 bit. Oczywiście wolałbym zastosować jedną kość, ale nie wiem gdzież mógłbym dostać SRAM np 1Mx16, albo chociaż wspomniane 512x16. Są jakieś "osiągalne dla śmiertelnika" sklepy, które mają w swojej ofercie takie SRAMy, najlepiej z czasami ok 10-20ns?

    W sensie topologii: chodzi mi o sposób prowadzenia magistrali adresowej i danowej. Zauważyłem na zdjęciach że wykorzystujesz 2 kości SRAM podłączone do Spartana. Czy linie adresu są połączone w topologii gwiazdy, jak na obrazku?

    fpga + sdram = videoram?

    Czy może w Daisy Chain ?

    fpga + sdram = videoram?

    Czy zostały użyte rezystory terminujące? Pytania są o tyle zasadne, że nie chciałbym po prostu zrobić płytki bubla. Nie stać mnie na pomyłki :) Wiadomo jak to jest z tematyką Signal Integrity.. przez niedopatrzenie łatwo o katastrofę...
  • Poziom 15  
    PCB nie robiłem wiec sam musiałem jak to jest zrobione. No więc odnośnie topologii to przypomina bardziej Daisy Chain. Na szynie danych rezystorki 22R. Pamięci jakie mam na schemacie to IDT71V416. Nie pamiętam jednak czy takie zostały użyte :P.
  • Poziom 10  
    Tak też mi się wydawało że to Daisy Chain. Nie wyobrażam sobie panowania nad impedancją tych ścieżek w topologii gwiazdy... Tak też będę projektował. Dziękuję za informację.