Pytanie:
Od czego zacząć, rozważając zrobienie GPU?
Dean
2011-06-23 00:30:35 UTC
view on stackexchange narkive permalink

Niedawno obejrzałem ten film i pomyślałem, jak zaprojektować coś takiego jak GPU. Gdzie byś zaczął? Bardziej interesuje mnie tylko czytanie o tym, jak działają, a nie tworzenie takiego z TTL (i tak).

Wiem, że to brzmi jak pytanie „jak zrobić język programowania”, ale jakikolwiek początek punkty byłyby dobre, ponieważ nie mam pojęcia, od czego zacząć.

Czy interesuje Cię „szybka grafika 3D” lub „jak sterować monitorem CRT / LCD”
@Joby atm po prostu wyświetla coś na wyświetlaczu. Kwadrat koloru byłby fajny.
Czy ktoś może mi wyjaśnić, dlaczego otrzymałem głos negatywny? Więc mogę rozwiązać wszelkie problemy z pytaniem.
Trudność, jaką widzę w tym pytaniu, polega na tym, że jest DUŻO uziemienia między generowaniem tylko monochromatycznego wyświetlacza znaków 80x25, co kiedyś można było nazwać generatorem wyświetlania wideo, a tym, co oznacza „GPU”. Wskazówka, że ​​możesz chcieć zrobić coś „z TTL”, przybliża Cię do końca starego generatora wyświetlaczy 80x25.
@JustJeff, Ok, nie wiedziałem, jak jeszcze się nazywają, dlaczego tak się różnią, skoro wykonują podobną pracę?
Poza tym, dlaczego dostałem kolejny głos przeciw, czy możesz wyjaśnić, dlaczego zostałeś przeciwny?
Sześć odpowiedzi:
user3624
2011-06-23 01:04:49 UTC
view on stackexchange narkive permalink

To trochę tak, jakbyś poszedł na końcowy egzamin z kolażu na lekcje przedmiotów ścisłych i postawił sobie pytanie: Opisz wszechświat. Pisz krótko, ale zwięźle. Nie ma możliwości, aby odpowiedzieć na to pytanie w jakikolwiek praktyczny sposób - więc odpowiem na inne pytanie.

Jakie rzeczy muszę wiedzieć przed przystąpieniem do projektowania GPU?

W przybliżonym porządku chronologicznym są to:

  1. Albo VHDL, albo Verilog.
  2. FPGA (użyteczny obszar do zabawy przy pisaniu logiki cyfrowej).
  3. Podstawowe elementy ścieżki danych, takie jak FIFO.
  4. Interfejsy magistrali, takie jak interfejsy PCIe i DDR2 / 3
  5. Binarne implementacje funkcji matematycznych, w tym zmiennoprzecinkowe itp.
  6. Konstrukcja procesora.
  7. Standardy interfejsów wideo.
  8. Szybkie analogowe elementy (analogowa strona szybkich układów cyfrowych)
  9. PLL i inne pół-zaawansowane elementy taktowania.
  10. Projektowanie PCB obwodów o dużej szybkości.
  11. Niskonapięciowy, wysokoprądowy projekt konwertera DC / DC.
  12. Wiele, wiele rzeczy związanych z oprogramowaniem.
  13. I wreszcie, ASIC lub inny niestandardowy projekt chipa. >

Ośmielę się również powiedzieć, że nie będziesz robił tego typu rzeczy z układów logicznych TTL. Wątpię, czy można było uzyskać rozsądny interfejs pamięci DDR2 / 3 działający ze zwykłymi układami TTL. Korzystanie z dużego FPGA byłoby znacznie łatwiejsze (ale nie łatwe).

Przejście do kroku 6 będzie prawdopodobnie „wystarczająco dobre, aby ugasić intelektualne pragnienie”. Można to również zrobić w rozsądnym czasie - około roku - jako cel krótkoterminowy.

EDYTUJ: Jeśli wszystko, co chcesz zrobić wypluwa sygnał wideo, wtedy jest to stosunkowo łatwe. W istocie jest to fragment pamięci, który jest przenoszony na wyświetlacz przy 60 Hz. Diabeł tkwi w szczegółach, ale oto ogólny zarys tego, jak to zrobić:

Zacznij od dwuportowej pamięci RAM. Nie musi to być prawdziwa dwuportowa pamięć RAM, tylko część pamięci RAM, którą procesor może odczytywać / zapisywać i który może odczytać Twój obwód wideo. Rozmiar i szybkość tej pamięci RAM będą zależeć od rodzaju wyświetlacza, który prowadzisz. Osobiście użyłbym DDR2 SDRAM podłączonego do interfejsu pamięci układu FPGA Xilinx Spartan-6. Ich rdzeń „generatora interfejsu pamięci” (MIG) ułatwia przekształcenie go w dwuportową pamięć RAM.

Następnie zaprojektuj obwód, który będzie kontrolował odczytywanie tej pamięci RAM i wypluwanie tych danych na prostą magistralę. Zwykle po prostu odczytujesz pamięć RAM sekwencyjnie. „Prosty autobus” tak naprawdę jest właśnie tym. To kilka bitów z wartością piksela - i to wszystko. Ten obwód będzie musiał zrobić jeszcze dwie rzeczy: będzie musiał wracać do początku pamięci RAM dla każdej klatki wideo i będzie musiał „wstrzymywać” wyjście podczas okresów powrotu w poziomie / pionie.

Po trzecie : stwórz obwód, który będzie wysyłał sygnały sterujące wideo (HSync, Vsync itp.), a także informował poprzedni obwód, kiedy należy wstrzymać i ponownie uruchomić. Te obwody są w rzeczywistości dość łatwe do wykonania. Znalezienie odpowiedniego standardu wideo jest trudniejsze, imho.

I na koniec: podłącz sygnały sterujące i szynę danych pikseli wideo do „czegoś”. Może to być mały kolorowy wyświetlacz LCD. Może to być przetwornik cyfrowo-analogowy wideo w celu wyprowadzenia sygnału zgodnego z VGA. Istnieją kodery NTSC / PAL, które przyjmują te sygnały. Itd.

Jeśli rozdzielczość jest naprawdę mała, możesz uciec od używania wewnętrznej pamięci RAM FPGA zamiast zewnętrznej pamięci DDR2 SDRAM. Powinienem cię ostrzec, że jeśli używasz DDR2 SDRAM, prawdopodobnie będziesz potrzebować FIFO i kilku innych rzeczy - ale to też nie jest strasznie trudne. Ale dzięki DDR2 SDRAM możesz obsługiwać wyświetlacze o dość wysokiej rozdzielczości. Możesz również znaleźć płytki rozwojowe FPGA ze zintegrowanymi przetwornikami cyfrowo-analogowymi VGA i innymi rodzajami wyjść wideo.

Wow, nie jest to krótkie zadanie. Rozumiem, że nie ma zwięzłej odpowiedzi. Ale dałeś mi dobry punkt wyjścia i będę musiał to robić w bardzo ograniczonym czasie wolnym. Ale powinno być ciekawym doświadczeniem.
@Dean Hmmm ... Są tutaj TRZY różne rzeczy: CPU, GPU i coś, co wypluwa sygnał wideo. Łatwo jest zrobić coś, co wypluje sygnał wideo. GPU jest bardziej podobny do procesora zaprojektowanego do przetwarzania związanego z wideo / grafiką: grafiki 3-D, akceleracji grafiki 2-D itp. Jeśli chcesz po prostu wypluć sygnał wideo, jesteś gotowy. Jeśli chcesz grafikę 3-D lub nawet częściowo zaawansowaną 2-D, musisz przejrzeć moją listę.
Jak łatwo wypluć sygnał wideo? Myślę, że to byłby lepszy pierwszy krok.
@Dean Zredagowałem swoją odpowiedź, dodając informacje o tym, jak wypluć sygnał wideo.
@David: Tak, myślę, że to wszystko, co ktoś może zrobić na płytce prototypowej. Kiedyś projektowałem kontrolery wyświetlaczy dla Raster Technologies, Apollo Computer i pomogłem ATI wejść w 3D. Te rzeczy od dawna są niestandardowymi lub częściowo niestandardowymi silikonami. Niektóre nowoczesne procesory graficzne mają więcej tranzystorów niż procesor je napędzający. Oświetlenie, cieniowanie, mapowanie tekstur, interpolacja, korekta perspektywy i rasteryzacja wymagają wielu obliczeń.
@Olin "i pomógł ATI wejść w 3D" -----> = O Musisz napisać wszechstronny podręcznik EE zawierający po prostu wszystko, co wiesz. Zrobiłbym absurdalne rzeczy, żeby dostać to w swoje ręce.
Kiedyś napisałem książkę o grafice komputerowej (ISBN 0-471-13040-0), ale jest ona bardzo wstępna. W latach 90., kiedy ATI miała tylko swoje chipy MACH64 i chciało zająć się 3D, zatrudnili mnie jako konsultanta, który nauczy ich niektórych koncepcji, pomoże im w pracy i pomoże przy architekturze. Rezultatem były pierwsze żetony RAGE. Byłem wtedy grafikiem. Sprawdź amerykański patent 5097427, jeśli mi nie wierzysz. Myślę jednak, że patent na interpolację kwadratową (US 5109481) był ważniejszy, ale mniej krzykliwy. Możesz rozpoznać na nich inne nazwiska ;-)
Toby Jaffey
2011-06-23 01:45:14 UTC
view on stackexchange narkive permalink

Racing the Beam to szczegółowe spojrzenie na projekt i działanie Atari VCS. Opisuje dokładnie adapter interfejsu telewizyjnego.

TIA to najprostszy i praktyczny procesor graficzny.

Zrozumienie małego, ale kompletnego, działający system może być dobrym sposobem na naukę nowego przedmiotu.

Dostępne są pełne schematy, podobnie jak podręcznik techniczny.

Atari 2600 zasady! Większość systemów gier używa sprzętu do generowania wyświetlacza, ale 2600 robi to wszystko za pomocą magii. Porównaj coś w rodzaju Combat, a nawet Asteroids z czymś w rodzaju Toyshop Trouble (Asteroids i Toyshop Trouble to 8K). Walka pokazuje dwa jednokolorowe obiekty o rozdzielczości 2-liniowej; Toyshop Trouble pokazuje 16 obiektów z rozdzielczością jednoliniową i kolorami na linię (bez migotania). Brak dodatkowego sprzętu dla Toyshop Trouble poza przełącznikiem bankowym, który pozwala na 8k kodu. Tylko sprytne kodowanie i trochę magii.
BTW, programowanie 2600 może być niejasne, ale jeden projekt nakładki wideo oparty na PSOC, który wykonałem dla klienta, wydawał się raczej 2600-ish. Skonfiguruj sprzęt na chipie, aby generował niektóre taktowania i użyj kodu do przesyłania danych do urządzenia podrzędnego SPI, aby można było je wyrejestrować jako piksele.
niewiarygodne, że cały kod gry musiał zostać wykonany w czasie odtwarzania wiązki
JustJeff
2011-06-23 05:58:32 UTC
view on stackexchange narkive permalink

Jeśli chcesz po prostu umieścić coś na ekranie i myślisz, że naprawdę naprawdę możesz polubić okablowanie, możesz dążyć do systemu grafiki postaci z początku lat 80-tych. Jeśli uda ci się trafić w synchronizację RS-170A, możesz nawet wepchnąć sygnał do wolnego wejścia AV w 50-calowym telewizorze plazmowym i przejść do stylu retro w wielkim stylu.

Niektóre wczesne systemy używał swoich 8-bitowych procesorów do bezpośredniego generowania wyświetlacza, na przykład 6507 w Atari 2600 i Z-80 w Timex Sinclair ZX-81. Możesz nawet zrobić to samo z nowoczesnymi mikrokontrolerami. Zaleta w ten sposób jest to, że sprzęt jest prosty, ale oprogramowanie generalnie musi być w asemblerze i jest bardzo wymagające, a wyniki będą naprawdę rozczarowujące. Prawdopodobnie 2600 wykorzystywało dodatkowy sprzęt, ale TIA nie miało zbyt wiele FIFO, i 6502 (no, naprawdę 6507) musiał zrzucać do niego bajty w czasie rzeczywistym. W tym podejściu nie ma standardowego trybu wideo; każda aplikacja, która używa wideo, musi być ściśle połączona z potrzebą utrzymania przepływu pikseli.

Jeśli naprawdę chcesz zbudować coś z TTL, następnym poziomem złożoności byłoby przejście do pamięci ROM znaków b wyświetlacz tekstowy. Pozwala to na umieszczenie dowolnego z, powiedzmy, 256 znaków w dowolnej z na przykład 40 kolumn i 25 pozycji w wierszach. Można to zrobić na kilka sposobów.

Jeden sposób - zrób to, co zrobiłem w modelu TRS80. Grupa liczników 74161 z zestawem bramek wygenerowała adres wideo; trzy zmultipleksowane 12 bitów 74157 adresu procesora z adresem wideo, aby dostarczyć adres do statycznej pamięci RAM 2K. Dane RAM były buforowane z powrotem do CPU, ale niebuforowane jako adres do pamięci ROM zestawu znaków. Nie było arbitrażu autobusowego; jeśli procesor chciał pamięci wideo RAM, system wideo został nadepnięty, co spowodowało efekt „śniegu”. Adres zmiksowanego wideo został połączony z kilkoma liniami z sekcji licznika, aby zaokrąglić niskie adresy; wyjście znaków ROM zostało zrzucone do rejestru przesuwnego 74166. Całość uciekała od podziałów z kryształu 14,31818 MHz. W tym podejściu miałbyś dokładnie jeden tryb wideo całkowicie zaimplementowany sprzętowo, taki jak 40x25 lub 64x16 itd., I jakikolwiek zestaw znaków, który możesz umieścić w pamięci ROM.

Innym sposobem - wykop tak zwany chipem CRTC jak 6845. Łączyły one większość logiki licznika i kleju, i zapewniały procesorowi interfejs kontrolno-rejestrowy, dzięki czemu można było przeprogramować część taktowania. Systemy takie jak ten mogą być nieco bardziej elastyczne, na przykład można uzyskać 40x25 i 80x25 z tego samego sprzętu, pod kontrolą rejestru. Jeśli sprytnie podchodzisz do częstotliwości zegara, możesz pozwolić procesorowi na swobodny dostęp do pamięci RAM wideo przez połowę taktowania, a dostęp do generatora adresu wideo w drugiej połowie, eliminując w ten sposób potrzebę arbitrażu magistrali i wyeliminowanie efektu śniegu.

Jeśli jednak chcesz skorzystać z prawdziwych trybów graficznych, szybko przekonasz się, że obracanie własnego jest problematyczne. Oryginalny Apple 2 poradził sobie z tym, ale ten system miał w sobie około 110 układów MSI TTL, a mimo to było kilka zabawnych rzeczy, z którymi trzeba było sobie poradzić, jak nieliniowe odwzorowanie bufora wideo na wyświetlacz i niezwykle ograniczone palety kolorów. , żeby wymienić dwa. Powszechnie uznaje się, że Woz miał wskazówkę. Zanim pojawiło się „2e”, Apple już umieszczał system wideo w niestandardowym chipie. C-64, mniej więcej w tym samym czasie, zawdzięczał swoje możliwości graficzne niestandardowym chipom.

Więc ... Powiedziałbym, że istnieją dwa sposoby, aby to zrobić. Jeden sposób - wyciągnij swój stary TTL i aspiruj do jednokolorowego wyświetlacza tekstowego 80x25; w drugą stronę - kup sobie dobrą tablicę ewaluacyjną FPGA, zrób wszystko w VHDL i zacznij od wyświetlacza tekstowego 80x25.

Jon L
2011-06-23 00:54:17 UTC
view on stackexchange narkive permalink

Musiałbyś zacząć od podstaw architektury komputera i równolegle zacząć od podstawowego projektowania ASIC przy użyciu VHDL lub innego języka opisu.

Gdy nauczysz się podstaw architektury komputera, ja poleciłby zająć się grafiką komputerową, być może zaczynając od kilku prostych projektów OpenGL. Głównym wnioskiem byłoby zapoznanie się z architekturą renderowania potoku graficznego.

Następnym krokiem byłoby zastanowienie się nad sposobami realizacji tego potoku renderowania za pomocą dedykowanego sprzętu, niż w oprogramowaniu.

Jeśli chodzi o budowanie procesora graficznego i podłączanie go do komputera, nie sądzę, aby było to wykonalne przy budżecie entuzjastów, ale może jest coś bardzo podstawowego, z czym można spróbować wbudowana platforma ARM-linux (która odsłania magistralę systemową) i FPGA (w tym przypadku FPGA to twój układ GPU napisany w VHDL) wysyłające do wyświetlacza VGA o niskiej rozdzielczości jako projekt typu „wszystko razem”. Wymagałoby to również napisania sterowników. Jeśli możesz to zrobić, byłoby to zabójcze przy wznowieniu.

Joe
2011-06-23 00:55:17 UTC
view on stackexchange narkive permalink

Spójrz na schematy blokowe wysokiego poziomu procesorów graficznych AMD i NVidia. Prawdopodobnie znajdziesz sporo informacji od ludzi zajmujących się otwartą grafiką, którzy projektują sprzęt graficzny o otwartym kodzie źródłowym, ze sterownikami o otwartym kodzie źródłowym.

Następnie musisz przyjrzeć się temu, czego chcesz.

  • Wyjście, HDMI, DVI czy VGA?
  • Przekształcenia wierzchołków?
  • Teksturowanie?
  • Cieniowanie pikseli?
  • Przycinanie trójkątów i rasteryzacja?
  • Jakiekolwiek teksturowanie?
  • Operacje na rastrze?

Jeśli nie wykonałeś żadnych programowanie przy użyciu funkcji GPU, które również warto wiedzieć.

Myślę, że Leon też to załatwił. Użyłbym Verilog, gdybym to zrobił.

Jeśli chcesz tylko wideo compsite, jak w opublikowanym filmie. Istnieje wiele przykładów. Heck, spójrz na implementację Apple II przez Woz. :)

Czy @Leon zostawił komentarz? Jeśli tak, nie mogę tego zobaczyć.
Usunąłem to. Zasugerowałem użycie FPGA do implementacji prostego procesora. Zrobiłem to kilka lat temu z projektem z książki napisanej w VHDL, którą zmodyfikowałem dla mojego sprzętu.
Ahh ok, to dlatego to widzę.
Chris Stratton
2011-06-23 21:47:14 UTC
view on stackexchange narkive permalink

Wygląda na to, że nie chcesz zrobić GPU (w sensie 3D i cieniowania itp.), a raczej generatora wideo. Wiele płyt FPGA eval ma na sobie złącze do monitora VGA lub innego typu i przykładowe projekty od producenta lub innych użytkowników do wyświetlania rzeczy na tym monitorze. Istnieją również płyty z wbudowanymi wyświetlaczami LCD, ale zwykle są one w klasie 300 USD i więcej, podczas gdy podstawowe, które mogą napędzać standardowy monitor, kosztują 60-120 USD.

Większość FGPA nie ma wystarczająco dużo pamięci wewnętrznej, aby zrobić więcej niż mały wyświetlacz, ale wtedy wiele płyt ma pamięć zewnętrzną o większej pojemności. Wiele z nich obsługuje analogowe monitory VGA cyfrowo, tj. RG i B są albo całkowicie włączone, albo całkowicie wyłączone, chociaż kilka daje dwa poziomy i prawdopodobnie znajdziesz taki z przetwornikiem cyfrowo-analogowym lub złączem interfejsu monitora cyfrowego.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...