SystemC im Vergleich zu anderen HDLs [geschlossen]

Ich bin derzeit in ein Universitätsprojekt involviert, um einen Prozessor eines bestehenden Befehlssatzes zu implementieren. Die Idee ist, dass ich am Ende des Projekts in der Lage sein sollte, dieses Design zu synthetisieren und es in einem FPGA auszuführen. Bisher läuft alles gut, ich habe vor ein paar Tagen mit der Implementierung des Designs in Verilog HDL begonnen und eine sehr einfache Version zum Laufen gebracht. Jetzt das Problem: Ich habe mich mit einigen Leuten in Verbindung gesetzt, die sich seit Jahren mit Hardwaredesign befassen, und sie haben vorgeschlagen, dass ich, bevor ich weiter gehe, auf SystemC für die Implementierung umsteigen sollte. Nun, hat mich sehr, sehr verwirrt, weil dies mein Gedanke war:

Verilog -> Als HDL-Sprache zielt es speziell auf das Hardwaredesign ab. Hat einige Abstraktionsebenen wie strukturelles und verhaltensbezogenes Verilog, aber es ist eine sehr ordentliche Form, die RTL eines Designs anzugeben. Sie können es definitiv mit einer Reihe von Tools synthetisieren, je nachdem, welches FPGA Sie wählen (in meinem Fall verwende ich Xilinx Vivado 2014 und Zynq-Boards). Auf der anderen Seite bietet einfaches Verilog nicht genug Abstraktion für die Verifizierung, und deshalb gibt es Dinge wie System Verilog.

SystemC -> Dies ist eine C++-Klassenbibliothek, die das Konzept der Zeit effektiv in C++ einführt und es Ihnen ermöglicht, eine ereignisgesteuerte Simulation durchzuführen. Es ist eindeutig viel hochwertiger als jede HDL und die Dinge hier können viel schneller implementiert werden. Dies macht es zu einem sehr guten Werkzeug für Dinge wie die Verifizierung und sogar die Implementierung von Simulatoren, sodass die Leute mit dem Entwerfen von Treibern und Dingen für einen Chip beginnen können, bevor das Ding tatsächlich hergestellt wird. Anscheinend gibt es auch eine Teilmenge von SystemC, die synthetisierbar ist (ich denke, sogar Xilinx Vivado kann dies tun) und in einigen Fällen ermöglicht es, dass SystemC verwendet werden kann, um sehr große Systeme zu entwerfen, bei denen ein höheres Abstraktionsniveau praktisch ist.

Also, meine Fragen sind:

  1. Sind diese Vorstellungen von SystemC und Verilog (oder anderen HDL-Sprachen) korrekt?
  2. Wann sollte ich SystemC und wann Verilog verwenden?
  3. Mir wurde gesagt, dass selbst in Verilog die Verwendung von viel Verhaltenscode in kritischen Abschnitten der Implementierung etwas problematisch sein kann, da Sie dem Synthesetool im Grunde viel weniger Einschränkungen bei der Synthese auferlegen. Wäre das bei einer höheren Abstraktionsebene kein Problem? dh wenn ich SystemC verwende, könnte ich mit einem sehr langsamen, leistungshungrigen, großen Design enden ...
  4. Die Person, die SystemC vorgeschlagen hat, erwähnte, dass es so aussieht, als würde ich "architektonische Erkundungen" durchführen, und deshalb würde er Verilog bevorzugen. Was genau bedeutet das? Ich hatte den Eindruck, dass sich die Architektur typischerweise auf den Befehlssatz und die Mikroarchitektur auf eine Implementierung eines Befehlssatzes bezieht (die Mikroarchitektur ist also das eigentliche RTL, das die Anweisungen ausführt). Bedeutet die Erforschung der Architektur also, dass er denkt, ich implementiere einen Prozessor, um zu sehen, wie machbar ein Befehlssatz ist?
  5. Er sagte, ein Argument für die Verwendung von SystemC sei, dass es viel einfacher sei, weil es sich auf einer höheren Abstraktionsebene befinde als HDL. Er behauptete auch, dass es einfacher sei, das richtige Timing für das Design zu finden. Inwieweit stimmt das?

Hilfe wäre sehr willkommen, ich bin etwas verwirrt und finde es schwierig, online klare Informationen darüber zu erhalten. Danke!

Hallo, darf ich fragen, um welchen Studiengang es sich handelt?
Hallo, ich habe Informatik studiert. Das gehört streng genommen nicht zum Standardstudium, ich habe mich für meine Masterarbeit von Grund auf dafür entschieden, einen Prozessor auf Basis des Transputers zu bauen.
SystemC ist auch ein HDL. Sie können es für RTL Design verwenden. @AndrésAG

Antworten (4)

Ihr Freund hat entweder falsch verstanden, was Sie tun, oder an SystemC als ersten Schritt gedacht. Ein HDL ist auf jeden Fall die einzige Wahl, und ich würde vorschlagen, dass Sie ein synthetisierbares SystemVerilog verwenden, das leistungsfähig genug ist, um eine Menge Erkundungen durchzuführen, da es im Wesentlichen das gleiche wie Verilog für alles andere ist.

  1. Teilweise. Sie haben zwischen Verilog als HDL und SystemVerilog als Verifikationssprache unterschieden und gesagt, dass SystemC eine höhere Abstraktion, aber auch eine synthetisierbare Teilmenge hat. Hier liegen zwei Fehler vor. Erstens ist SystemVerilog auch ein HDL mit einer vollständig synthetisierbaren Teilmenge, die als Verilog mit offensichtlichen Korrekturen (z. B. einem einzigen logicTyp für Drähte) und vielen synthetisierbaren Abstraktionsmechanismen (z. B. Schnittstellen) fortgesetzt werden könnte. Es wird von vielen Tools unterstützt, einschließlich Vivado. SystemC hingegen nichtdirekt synthetisierbar (nicht einmal eine Teilmenge), ist es für die Modellierung auf höherer Ebene und Architekturerforschung gedacht, obwohl einige Teilmengen davon in ein High-Level-Synthesetool wie Vivado HLS eingespeist werden können, das es dann in synthetisierbares (wenn auch für Menschen nicht lesbares) Verilog übersetzt .

  2. Verilog und die synthetisierbare Teilmenge von SystemVerilog sind Sprachen für das HW-Design, die normalerweise verwendet werden, um HW auf einer Registerübertragungsebene zu beschreiben, dh als eine Menge von Blöcken wie Registern, kombinatorischen Funktionen, endlichen Maschinen usw. Verilog-2001 kann auch angemessen beschreiben hw als Netzliste auf Gate-Ebene, während SV auch auf einer viel höheren Abstraktionsebene verwendet werden kann, daher seine Verifizierungsfähigkeiten. Andererseits ist SystemC für die High-Level-Modellierung von Systemen geeignet, in denen ganze Blöcke nur auf High-Level-Verhaltensweise beschrieben werden. Es ist auch sehr leistungsfähig für die Architekturexploration, dh das Variieren von Parametern und Eigenschaften einer Architektur und das Bewerten von Änderungen in der Gesamtleistung.

  3. Das trifft nur zu, wenn man versucht, die Dinge nicht auf RTL-Art zu beschreiben, während man ein RTL-Modell entwickelt. Zum Beispiel ist der richtige Weg, einen Block zu beschreiben, der ein repetitives Multiplizieren-Akkumulieren durchführt, eine endliche Zustandsmaschine, die einen kombinatorischen Multiplikator, einen kombinatorischen Addierer und ein Register antreibt - wenn Sie mit Verhalten meinten, dies wie in Software (einer For-Schleife) zu beschreiben Ja, Verhaltenscode funktioniert nicht. Wenn Sie jeden der von mir beschriebenen Blöcke (Mult, Add, Reg und FSM) über beschreiben wolltenalwaysBlöcke, das ist vollkommen in Ordnung und wird in einer Netzliste funktionieren, die genau das realisiert, was Sie mit hervorragenden Ergebnissen angegeben haben (oft besser als ein übermäßig struktureller Ansatz, der die Fähigkeit des Synthesewerkzeugs zur Optimierung der Logik einschränkt). Tatsächlich führt SystemC-Synthese auf hoher Ebene oft nur dann zu guten Ergebnissen, wenn Sie sich an sehr ähnliche Muster halten, wodurch jeder Vorteil bei der Verwendung einer Sprache auf höherer Ebene effektiv zunichte gemacht wird. Auf jeden Fall ist SystemC eine schlechte Wahl für die Implementierung eines Prozessors.

  4. Architektur ist ein sehr weit gefasster Begriff, der nicht auf die ISA beschränkt ist, tatsächlich ist das ISA-Design in modernen Prozessoren nur ein kleiner Teil des Puzzles. Im Zusammenhang mit dem Design eines Systems bedeutet Architektur normalerweise die Menge von Wahlmöglichkeiten auf Systemebene (z. B. kann der DMA von jedem Kern oder nur einem speziellen gesteuert werden? Ist der L1-Cache vollständig oder assoziativ eingestellt? Haben Sie einen Cache?). überhaupt oder Speicher in SW verwalten?), einschließlich der ISA- und auch der Prozessormikroarchitektur . Ich denke, was Ihr Freund gemeint hat, ist, dass Sie verschiedene Konfigurationen Ihres Prozessors untersuchen, was in der Tat eine Architekturerkundung ist (oder eine Mikroarchitekturerkundung, wenn Sie dies vorziehen). Allerdings hat er möglicherweise übersehen, dass Sie dies auf einem FPGA implementieren werden, was die SystemC-Option unsinnig macht.

  5. Das ist falsch. Wenn Sie einen sehr einfachen Beschleuniger wie einen Streaming-Filter entwerfen, könnte dies zutreffen, da HLS-Tools das einfache Einfügen von Pipeline-Stufen ermöglichen, während Sie dies manuell in RTL tun müssten (oder Datapath-Retiming verwenden, aber ich denke, das ist nicht der Fall im Vivado möglich). In allen anderen Fällen und insbesondere bei einem hochkomplexen und strukturierten Objekt wie einem Prozessor führt HLS zu aufgeblähtem, nicht debuggbarem und oft einfach falschem Verilog, das dann synthetisiert werden muss - die Tools sind einfach nicht für diese Aufgabe ausgelegt.

Danke für die Hilfe. Ich habe das Projekt bereits mit Verilog gestartet, aber ich habe noch viel aus Ihrer Antwort gelernt!
Es gibt eine synthetisierbare Teilmenge von SystemC, die bereits von den meisten EDA-Anbietern unterstützt wird . Siehe accellera.org/images/downloads/drafts-review/…
SystemC ist auch ein HDL

Du bist an der Uni und studierst (vermutlich) Ingenieur. Als Ingenieur sollten Sie verstehen, wie die Dinge auf niedrigem Niveau funktionieren. Um dies zu erreichen, müssen Sie Abstraktionsschichten entfernen, nicht hinzufügen.

Aus diesem Grund rate ich Ihnen, SystemC für dieses Projekt nicht zu verwenden. Sie werden es vielleicht in Ihrer beruflichen Karriere verwenden, aber das ist für die Zukunft.

Wenn Sie es dennoch verwenden möchten, sollten Sie zuerst mit Ihrem Dozenten sprechen. Als ich an der Universität eine ähnliche Aufgabe erledigte, wurde uns ausdrücklich gesagt, dass wir SystemC aus dem oben genannten Grund nicht verwenden sollten.

SystemC wird für komplexe Designs verwendet. Zum Beispiel etwas auf architektonischer Ebene spezifizieren. Vorteil: weniger Codezeilen als bei Verilog-Designs, schnellere Simulationszeit, zyklusgenaue Modelle. Glauben Sie niemandem, der sagt, dass SystemC "nicht" synthetisierbar ist. Natürlich ist es das. Um Ihnen eine Vorstellung zu geben: In Verilog haben wir eine Abstraktionsebene, Sie können mit Schalterebene/Verhaltensebene modellieren. Die Auswahl erfolgt basierend auf der Komplexität des Designs.

Ein bekannterer Weg zur Beschreibung von Hardware ist die Verwendung von Verilog, dessen Synthese in vielen EDA-Tools unterstützt wird.

Typischerweise werden für größere Designs SystemC-Modelle und Testbench von Architekturdesignern entworfen. Diese Modelle werden dann an Elektronikdesigner übergeben, um sie mit Verilog/VHDL in RTL umzuwandeln.

Seien wir ehrlich, es ist alles Programmierung. Was Sie in SystemC können, können Sie auch in VHDL oder Verilog programmieren. Es ist nur eine Frage der Werkzeugunterstützung. Es braucht weder SystemC noch SystemVerilog.

Wenn Anbieter die offensichtliche Lösung finden, um RTL-Designer in die Systemprogrammierung umzuwandeln, müssen sie lediglich die geeignete Sprache für das FPGA-Design unterstützen. Laut der Wilson-Umfrage von Mentor 2012 ist die Sprache für FPGAs VHDL. Siehe http://blogs.mentor.com/verificationhorizons/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/

Es ist keine Programmierung, es ist Hardware-Design
Das ist eine alte Studie. Sehen Sie sich die aktualisierte Umfrage an: blogs.mentor.com/verificationhorizons/blog/2019/01/15/…
Und es zeigt, dass SystemC immer noch irrelevant ist. Und dass VHDL und Verilog im Bereich über 60 % die Nase vorn haben.