SystemC vs HDLs

9

Ich bin derzeit an einem Universitätsprojekt zur Implementierung eines Prozessors eines vorhandenen Befehlssatzes beteiligt. 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. Bis jetzt läuft alles gut. Ich habe vor einigen 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 seit Jahren mit Hardware-Design befasst sind, und sie haben mir vorgeschlagen, bevor ich fortfahre, SystemC für die Implementierung zu verwenden. Nun, machte mich sehr sehr verwirrt, weil dies mein Gedanke war:

Verilog -> Als HDL-Sprache zielt es speziell auf das Hardware-Design ab. Hat einige Abstraktionsebenen wie strukturelles und verhaltensbezogenes Verilog, ist jedoch eine sehr übersichtliche Form der Angabe der RTL eines Entwurfs. Sie können es definitiv mit einer Reihe von Tools synthetisieren, je nachdem, welches FPGA Sie auswählen (in meinem Fall verwende ich Xilinx Vivado 2014- und Zynq-Boards). Auf der anderen Seite bietet Verilog nicht genügend Abstraktion für die Verifizierung, und deshalb haben Sie Dinge wie System Verilog.

SystemC -> Dies ist eine C ++ - Klassenbibliothek, die das Zeitkonzept in C ++ effektiv einführt und es Ihnen ermöglicht, eine ereignisgesteuerte Simulation durchzuführen. Es ist eindeutig viel höher als jedes 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, damit die Leute anfangen können, Treiber und Dinge für einen Chip zu entwerfen, 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), und in einigen Fällen ermöglicht es SystemC, sehr große Systeme zu entwerfen, bei denen ein höherer Abstraktionsgrad praktisch ist.

Meine Fragen sind also:

  1. Sind diese Vorstellungen davon, welche systemC- und Verilog-Sprachen (oder HDL-Sprachen, wenn Sie möchten) richtig sind?
  2. Wann sollte ich SystemC verwenden und wann Verilog?
  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 Synthesewerkzeug im Grunde genommen viel weniger Einschränkungen bei der Synthese auferlegen. Wäre dies mit einer höheren Abstraktionsebene kein Problem? dh wenn ich systemC benutze, könnte ich ein sehr langsames, leistungshungriges, großes Design haben ...
  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 vorziehen. Was genau bedeutet das? Ich hatte den Eindruck, dass sich die Architektur normalerweise auf den Befehlssatz und die Mikroarchitektur auf eine Implementierung eines Befehlssatzes bezieht (die Mikroarchitektur ist also das eigentliche RTL, das die Befehle ausführt). Bedeutet Architekturforschung also, dass er glaubt, ich implementiere einen Prozessor, um zu sehen, wie machbar ein Befehlssatz ist?
  5. Er sagte, dass ein Argument für die Verwendung von SystemC ist, dass es viel einfacher ist, weil es eine höhere Abstraktionsebene als eine HDL ist. Er behauptete auch, es sei einfacher, das richtige Timing für das Design zu finden. Inwieweit ist das wahr?

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

Andrés AG
quelle
Hallo, kann ich fragen, welcher akademische Kurs es war?
Reflexion
Hallo, ich habe Informatik studiert. Genau genommen ist dies nicht Teil des Standardkurses. Ich habe mich für den Aufbau eines Prozessors auf Basis des Transputers für meine Masterarbeit von Grund auf entschieden.
Andrés AG

Antworten:

3

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

  1. Teilweise. Sie haben zwischen Verilog als HDL und SystemVerilog als Verifizierungssprache unterschieden und festgestellt, dass SystemC eine höhere Abstraktion, aber auch eine synthetisierbare Teilmenge aufweist. Hier gibt es zwei Fehler. Erstens ist SystemVerilog auch eine HDL mit einer vollständig synthetisierbaren Teilmenge, die als Verilog mit offensichtlichen Korrekturen (z. B. ein einziger logicTyp für Drähte) und vielen synthetisierbaren Abstraktionsmechanismen (z. B. Schnittstellen) wieder aufgenommen werden kann. Es wird von vielen Tools unterstützt, einschließlich Vivado. SystemC dagegen nichtDirekt synthetisierbar (nicht einmal eine Teilmenge), ist es für die Modellierung auf höherer Ebene und die Erforschung der Architektur gedacht, obwohl eine Teilmenge davon in ein High-Level-Synthesewerkzeug wie Vivado HLS eingespeist werden kann, das es dann in synthetisierbares (obwohl vom Menschen nicht lesbares) Verilog übersetzt .

  2. Verilog und die synthetisierbare Teilmenge von SystemVerilog sind Sprachen für das HW-Design, die normalerweise zur Beschreibung von HW auf Registerübertragungsebene verwendet werden, dh als Satz von Blöcken wie Registern, kombinatorischen Funktionen, Maschinen mit endlichen Zuständen usw. Verilog-2001 kann dies auch angemessen beschreiben hw als Netzliste auf Gate-Ebene, während SV auch für eine viel höhere Abstraktionsebene verwendet werden kann, daher seine Überprüfungsmöglichkeiten. Andererseits eignet sich SystemC für die Modellierung von Systemen auf hoher Ebene, in denen ganze Blöcke nur auf Verhaltensebene auf hoher Ebene beschrieben werden. Es ist auch sehr leistungsfähig für die architektonische Erkundung, dh das Variieren von Parametern und Eigenschaften einer Architektur und das Bewerten von Änderungen in der Gesamtleistung.

  3. Dies gilt nur, wenn Sie versuchen, Dinge bei der Entwicklung eines RTL-Modells nicht RTL-artig zu beschreiben. Der richtige Weg, um einen Block zu beschreiben, der eine sich wiederholende Multiplikationsakkumulation durchführt, ist beispielsweise eine Finite-State-Maschine, die einen kombinatorischen Multiplikator, einen kombinatorischen Addierer und ein Register ansteuert - wenn Sie dies mit Verhalten wie in Software (einer for-Schleife) beschreiben wollten, dann Ja, Verhaltenscode funktioniert nicht. Wenn Sie meinen, jeden der von mir beschriebenen Blöcke (mult, add, reg und FSM) über zu beschreibenalwaysBlöcke, das ist vollkommen in Ordnung und wird in einer Netzliste ausgeführt, die genau das realisiert, was Sie angegeben haben, mit hervorragenden Ergebnissen (oft besser als ein äußerst struktureller Ansatz, der die Fähigkeit des Synthesewerkzeugs zur Optimierung der Logik einschränkt). Tatsächlich führt die SystemC-Synthese auf hoher Ebene häufig nur dann zu guten Ergebnissen, wenn Sie sich an sehr ähnliche Muster halten, wodurch alle Vorteile bei der Verwendung einer Sprache auf höherer Ebene effektiv zunichte gemacht werden. In jedem 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. In modernen Prozessoren ist ISA-Design nur ein kleiner Teil des Puzzles. Im Zusammenhang mit dem Entwurf eines Systems bedeutet Architektur normalerweise die Auswahl auf Systemebene (z. B. kann der DMA von einem beliebigen Kern oder nur von einem speziellen gesteuert werden? Ist der L1-Cache vollständig oder assoziativ festgelegt? Haben Sie einen Cache? überhaupt oder Speicher in SW verwalten?), einschließlich der ISA und auch der Prozessor-Mikroarchitektur. Ich denke, was Ihr Freund gemeint hat, ist, dass Sie verschiedene Konfigurationen Ihres Prozessors untersuchen, nämlich Architekturerkundung (oder Mikroarchitekturerkundung, wenn Sie es vorziehen). Möglicherweise hat er jedoch die Tatsache ü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, kann 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 Datenpfad-Retiming verwenden müssten, aber ich denke, das ist nicht der Fall möglich in Vivado). In allen anderen Fällen und insbesondere in einem hochkomplexen und strukturierten Objekt wie einem Prozessor führt HLS zu aufgeblähtem, nicht abbaubarem und oft einfach falschem Verilog, das dann synthetisiert werden muss - die Tools sind einfach nicht für diesen Job konzipiert.

Francesco Conti
quelle
Danke für die Hilfe. Ich habe das Projekt bereits mit Verilog gestartet, aber ich habe noch viel aus Ihrer Antwort gelernt!
Andrés AG
3

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

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

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

markt
quelle
0

Seien wir ehrlich, es ist alles Programmierung. Was Sie in SystemC tun können, können Sie auch in VHDL oder Verilog programmieren. Es ist nur eine Frage der Werkzeugunterstützung. SystemC oder SystemVerilog werden nicht benötigt.

Wenn Anbieter die naheliegende Lösung für die Konvertierung von RTL-Designern in die Systemprogrammierung finden, müssen sie lediglich die entsprechende 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/

Jim Lewis
quelle
0

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

Eine bekanntere Methode zur Beschreibung von Hardware ist die Verwendung von Verilog, dessen Synthese in vielen EDA-Tools unterstützt wird.

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

MayurKubavat
quelle