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:
Hilfe wäre sehr willkommen, ich bin etwas verwirrt und finde es schwierig, online klare Informationen darüber zu erhalten. Danke!
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.
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 logic
Typ 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 .
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.
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 wolltenalways
Blö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.
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.
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.
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/
Betrachtung
Andrés AG
Shashank-VM