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:
- Sind diese Vorstellungen davon, welche systemC- und Verilog-Sprachen (oder HDL-Sprachen, wenn Sie möchten) richtig sind?
- Wann sollte ich SystemC verwenden und wann Verilog?
- 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 ...
- 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?
- 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!