Virtuelle Anzeige für einfache GPU-Entwicklung

Verwandte Themen: Wo fange ich an, wenn ich erwäge, eine GPU zu bauen?

Ich bin ein ziemlich starker Programmierer, aber ich bin sehr neu im Hardwaredesign, also entschuldigen Sie, wenn ich seltsame Terminologie verwende.

Mein langfristiges Ziel ist es, eine benutzerdefinierte GPU zu schreiben, aber ich beginne mit einem einfachen Framebuffer, um mich mit dem Hardwaredesign vertraut zu machen. Hier ist ein Überblick darüber, was ich mit meinem Projekt zu tun erwarte:

  1. Empfangen eines Frames von Pixeldaten auf einem Bus
  2. Rahmen in einem Stapel auf dem Beschlag ablegen
  3. Frames mit der Monitoraktualisierungsrate ausgeben

Ich kann Nr. 1 und Nr. 2 herausfinden, aber ich habe noch nie so etwas wie Nr. 3 gemacht. Ich denke, das optimale Entwicklungs-Setup wäre ein virtuelles Display, das an die Ausgangspins meines Designs (VGA oder DVI) angeschlossen und in einem Fenster auf meinem Computer angezeigt wird. Ich könnte dies wahrscheinlich mit einem FPGA und einem kleinen LCD tun, aber ich denke, es wird für die Entwicklung (insbesondere auf Reisen) einfacher sein, alles simulieren zu lassen.

Gibt es dafür schon eine Lösung? Wenn ja, wonach kann ich suchen, um weitere Informationen darüber zu erhalten? Wenn nicht, was ist das übliche Entwicklungs-Setup für so etwas?

Ich entwickle unter Linux mit Icarus Verilog, daher wäre eine Lösung, die damit funktioniert, vorzuziehen.

Ich glaube nicht, dass Sie eine sofort einsatzbereite Software finden werden, mit der Sie über eine Verilog-Simulation ein virtuelles Display auf Ihrem Desktop steuern können. Ehrlich gesagt denke ich, dass der einfachste Weg für Sie wäre, einen billigen VGA-Monitor und ein FPGA mit einem VGA-Anschluss zu bekommen. Schreiben Sie einfache gerichtete Tests, die in der Simulation verifiziert werden können, aber um tatsächlich zuzusehen, wie Ihr Design eine Anzeige steuert, müssen Sie es wahrscheinlich synthetisieren und in Echtzeit ausführen.
Seconded - Die eigentliche VGA-Ausgabe ist viel einfacher als der Versuch, sie zurück in den Computer zu leiten. Ein Oszilloskop, das Signale mit Videogeschwindigkeit verarbeiten kann (z. B. 100 MHz), kann sehr nützlich sein, wenn Sie nichts anzeigen können.
@Tim - Verdammt, das ist bedauerlich. Ich denke, es ist kein sehr großer Markt ...
@tjameson Beachten Sie auch, dass Simulationen im Vergleich zur tatsächlichen Echtzeitausführung im Allgemeinen viel langsamer sind. Bei einem großen Design kann es eine oder mehrere Stunden dauern, bis ein Computer eine Verilog-Simulation um 1 Millisekunde vorrückt. Das wird keine Computergrafik sehr beeindruckend machen :). Ich denke, es macht sowieso mehr Spaß, einen echten Monitor zu fahren, abgesehen von Reise-/Portabilitätsproblemen.
@ Tim - Richtig. Ich habe hauptsächlich nach etwas gesucht, das ich in einem Flugzeug oder an einem Ort tun kann, an dem ich meinen Dev-Stack nicht habe. Ich denke, das wird immer unrealistischer, je größer das Design wird ... Das Anschließen an einen echten Monitor würde jedoch definitiv viel mehr Spaß machen! Danke!

Antworten (1)

Eine Alternative wäre, PLI/VPI zu verwenden, um einen C-Code aufzurufen. Rufen Sie also, anstatt die Pin-Steuerung auf oberster Ebene durchzuführen, eine Systemtask auf, die das Pixel in einem Software-Frame-Puffer speichert und in einem Fenster rendert.

Ich habe die gleiche Technik kürzlich für einen UART verwendet - einen anderen UART mit gekreuztem TX + RX instanziiert, und wenn der in der Testbench Daten empfängt - füttere ihn mit einem Systemtask, der in einen PTY schreibt (und und umgekehrt).

Da die Simulation wahrscheinlich nicht so schnell läuft, kann das Schreiben von Bilddateien oder Binärdaten und die anschließende Nachbearbeitung nützlicher sein.

Das klingt ziemlich vernünftig und wäre sehr nützlich, um Software-basierte Unittests zu schreiben.