Obecnie pracuję nad Super OSD - projektem wyświetlania na ekranie. http://code.google.com/p/super-osd ma wszystkie szczegóły.
W tej chwili używam MCU dsPIC do wykonania zadania. Jest to bardzo potężny procesor DSP (40 MIPS przy 80 MHz, operacje jednotaktowe z trzema rejestrami i jednostka MAC) i, co ważne, jest dostarczany w pakiecie DIP (ponieważ używam płyty kontrolnej do prototypowania.) Naprawdę czerpię z tego każdą ostatnią wydajność, uruchamiając OSD - układ ma około 200ns lub 10 cykli na piksel na etapie wyjściowym, więc kod musi być bardzo zoptymalizowany w tej części (z tego powodu zawsze będzie napisany w montaż.)
Teraz zastanawiałem się nad użyciem do tego FPGA, ponieważ ze względu na równoległą architekturę takiego układu możliwe jest posiadanie prostego programu logicznego z OSD. Rzeczy takie jak rysowanie linii i kod algorytmiczny byłyby obsługiwane przez MCU, ale rzeczywiste dane wyjściowe byłyby wykonywane za pomocą FPGA. I kilka prostych rzeczy, takich jak ustawianie pikseli lub rysowanie linii poziomych i pionowych, które chciałbym zintegrować z FPGA, aby poprawić szybkość.
Mam parę pytań:
- Czy będzie to kosztować znacznie więcej? Najtańsze FPGA, które znalazłem, wynosiły ~ 5 £ każda, a dsPIC wynosi 3 £ każda. Będzie to kosztowało więcej, ale o ile?
- DsPIC mieści się w pakiecie SO28. Nie chciałbym być większy niż SO28 lub TQFP44. Większość układów FPGA, które widziałem, występuje w pakietach BGA lub TQFP> 100, które obecnie nie są opcją ze względu na rozmiar ścinania i trudność samodzielnego ich lutowania.
- Ile prądu zużywa FPGA? Rozwiązanie dsPIC zużywa obecnie około 55 mA +/- 10 mA, co jest w tej chwili w porządku. Czy FPGA zużyłoby mniej więcej? Czy jest zmienny, czy raczej dość statyczny, jak dsPIC?
- Potrzebuję co najmniej 12 KB pamięci graficznej do przechowywania grafiki OSD. Czy układy FPGA mają taką pamięć dostępną w układzie, czy jest ona dostępna tylko w przypadku układów zewnętrznych?
źródło
Moją skłonnością byłoby użycie czegoś do buforowania czasu między procesorem a wyświetlaczem. Posiadanie sprzętu, który może wyświetlać całą klatkę wideo bez interwencji procesora, może być przyjemny, ale może przesadzić. Sugerowałbym, że najlepszym kompromisem pomiędzy złożonością sprzętową i programową byłoby prawdopodobnie stworzenie czegoś z dwoma lub trzema niezależnymi 1024-bitowymi rejestrami przesuwnymi (dwa bity na piksel, aby umożliwić czarny, biały, szary lub przezroczysty), i środek przełączania się między nimi. Niech PIC załaduje rejestr przesuwny, a następnie sprzęt zacznie go przesuwać podczas ustawiania flagi, aby PIC mógł załadować następny. W przypadku dwóch rejestrów przesuwnych PIC miałby 64us między czasem, w którym powiedziano, że rejestr przesuwny jest dostępny a czasem, kiedy wszystkie dane muszą zostać przesunięte. Dzięki trzem rejestrom zmianowym
Zauważ, że podczas gdy 1024-bitowy FIFO byłby tak dobry jak dwa 1024-bitowe rejestry przesuwne, a w CPLD FIFO kosztuje tylko jeden makrokomórkę na bit, plus pewną logikę sterowania, w większości innych rodzajów logiki dwa bity rejestru przesuwnego będzie tańszy niż jeden kawałek FIFO.
Alternatywnym podejściem byłoby podłączenie CPLD do SRAM i stworzenie z nim prostego podsystemu wideo. Pod względem estetycznym podoba mi się generowanie wideo w locie, a jeśli ktoś stworzyłby tanie, tanie 1024-bitowe układy z przesuwnym rejestrem, preferuję takie podejście, ale korzystanie z zewnętrznej pamięci SRAM może być tańsze niż korzystanie z FPGA z wystarczającą ilością zasobów, aby wykonaj wiele 1024-bitowych rejestrów przesuwnych. W celu uzyskania rozdzielczości wyjściowej konieczne będzie wyrejestrowanie danych z szybkością 12 mln pikseli / s lub 3 MB / s. Powinno być możliwe zaaranżowanie rzeczy tak, aby dane mogły być taktowane z prędkością do 10 Mb / s bez większych trudności dzięki przeplataniu cykli pamięci; największą sztuczką byłoby zapobieganie uszkodzeniu danych, jeśli puls synchronizacji nie nadejdzie w spodziewanym momencie.
źródło