Das ist so, als würden Sie zu Ihrer Collage-Abschlussprüfung für den naturwissenschaftlichen Unterricht gehen und dies als Ihre Frage haben: Beschreiben Sie das Universum. Seien Sie kurz und doch prägnant. Es gibt keine Möglichkeit, diese Frage auf praktische Weise zu beantworten - daher beantworte ich eine andere Frage.
Was muss ich wissen, bevor ich versuche, eine GPU zu entwerfen?
In einer groben chronologischen Reihenfolge sind sie:
- Entweder VHDL oder Verilog.
- FPGAs (nützlicher Bereich zum Schreiben digitaler Logik).
- Grundlegende Datenpfade wie FIFOs.
- Busschnittstellen wie PCIe- und DDR2 / 3-Schnittstellen
- Binäre Implementierungen von mathematischen Funktionen, einschließlich Gleitkomma usw.
- CPU-Design.
- Standards für Videoschnittstellen.
- Analoges Hochgeschwindigkeitsmaterial (die analoge Seite von digitalem Hochgeschwindigkeitsmaterial)
- PLLs und andere semi-fortgeschrittene Clocking-Sachen.
- PCB-Design von Hochgeschwindigkeitsschaltungen.
- Design des Niederspannungs- und Hochstrom-DC / DC-Wandlers.
- Viele, viele Software-Sachen.
- Und schließlich ASIC oder ein anderes kundenspezifisches Chip-Design.
Ich werde auch sagen, dass Sie so etwas nicht aus TTL-Logik-Chips machen werden. Ich bezweifle, dass Sie eine vernünftige DDR2 / 3-Speicherschnittstelle erhalten könnten, die mit normalen TTL-Chips funktioniert. Die Verwendung eines großen FPGA wäre viel einfacher (aber nicht einfach).
Wenn Sie mit Schritt 6 fortfahren, ist dies wahrscheinlich "gut genug, um Ihren intellektuellen Durst zu stillen". Dies könnte auch innerhalb eines angemessenen Zeitraums - etwa eines Jahres - geschehen, um ein kurzfristiges Ziel festzulegen.
BEARBEITEN: Wenn Sie nur ein Videosignal ausspucken möchten, ist dies relativ einfach. Es handelt sich im Wesentlichen um einen Speicherblock, der mit 60 Hz auf eine Anzeige verschoben wird. Der Teufel steckt im Detail, aber hier ist eine grobe Beschreibung, wie das geht:
Beginnen Sie mit einem Dual-Port-RAM. Es muss kein echter Dual-Port-RAM sein, sondern nur etwas RAM, das eine CPU lesen / schreiben kann und das Ihre Video-Schaltung lesen kann. Die Größe und Geschwindigkeit dieses RAM hängt davon ab, welche Art von Anzeige Sie steuern. Ich persönlich würde DDR2 SDRAM verwenden, das an die Speicherschnittstelle eines Xilinx Spartan-6 FPGA angeschlossen ist. Ihr "Memory Interface Generator" -Kern (MIG) macht es einfach, daraus einen Dual-Port-RAM zu machen.
Entwerfen Sie als Nächstes eine Schaltung, die steuert, wie dieser RAM gelesen wird, und spucken Sie diese Daten über einen einfachen Bus aus. Normalerweise lesen Sie den RAM nur nacheinander. Der "einfache Bus" ist wirklich genau das. Es sind einige Bits mit dem Pixelwert - und das war's. Diese Schaltung muss zwei weitere Dinge tun: Sie muss bei jedem Videobild zum Anfang des RAM zurückkehren und die Ausgabe während der horizontalen / vertikalen Rücklaufperioden "pausieren".
Drittens: Erstellen Sie eine Schaltung, die die Videosteuerungssignale (HSync, Vsync usw.) ausgibt, und teilen Sie der vorherigen Schaltung mit, wann sie angehalten und neu gestartet werden soll. Diese Schaltungen sind eigentlich ziemlich einfach zu machen. Es ist schwieriger, den geeigneten Videostandard zu finden.
Und zum Schluss: Verbinden Sie die Steuersignale und den Videopixel-Datenbus mit "etwas". Das könnte ein kleines Farb-LCD sein. Es könnte sich um einen Video-DAC zur Ausgabe eines VGA-kompatiblen Signals handeln. Es gibt NTSC / PAL-Encoder, die diese Signale aufnehmen würden. Usw.
Wenn die Auflösung sehr gering ist, können Sie möglicherweise den internen RAM des FPGA anstelle eines externen DDR2-SDRAM verwenden. Ich sollte Sie warnen, dass Sie, wenn DDR2 SDRAM verwendet wird, wahrscheinlich ein FIFO und einige andere Dinge benötigen - aber auch das ist nicht besonders schwierig. Mit DDR2 SDRAM können Sie jedoch Displays mit relativ hoher Auflösung unterstützen. Sie können auch FPGA-Entwicklungskarten mit integrierten VGA-DACs und anderen Formen von Videoausgängen finden.