VHDL und Verilog sind einige der heute verwendeten HDLs. Was sind die Vor- und Nachteile der Verwendung von Verilog oder VHDL gegenüber anderen?
Ich kann Ihnen nicht sagen, was Sie lernen sollen, aber hier sind einige kontrastierende Punkte (von einem sehr VHDL-zentrierten Benutzer, aber ich habe versucht, so fair wie möglich zu sein!), die Ihnen helfen können, eine Wahl basierend auf Ihren eigenen Vorlieben zu treffen in Bezug auf den Entwicklungsstil:
Und denken Sie an das berühmte Zitat, das in etwa so lautet: "Ich bevorzuge, welches der beiden ich derzeit nicht verwende" (Entschuldigung, ich kann mich nicht erinnern, wer das tatsächlich geschrieben hat - möglicherweise Janick Bergeron?)
Anfangs viele Kompilierungsfehler, aber dann funktioniert es meistens so, wie Sie es erwarten. Dies kann zu einer sehr steilen Gefühlslernkurve führen (zusammen mit der ungewohnten Syntax).
Fehler werden später in der Simulation gefunden - die Lernkurve zum "Gefühl, etwas erledigt zu haben" ist flacher, dauert aber länger (wenn das die richtige Metapher ist?)
Ebenfalls zu Gunsten von Verilog ist, dass sich die High-End-Verifizierung immer mehr an SystemVerilog anlehnt, das eine riesige Erweiterung von Verilog darstellt. Die High-End-Tools können aber auch VHDL-Synthesecode mit SystemVerilog-Verifikationscode kombinieren.
Für einen ganz anderen Ansatz: MyHDL – Sie erhalten die gesamte Leistungsfähigkeit von Python als Verifizierungssprache mit einer Reihe von Syntheseerweiterungen, aus denen Sie entweder VHDL oder Verilog generieren können.
Oder Cocotb – die ganze Kraft von Python als Verifikationssprache, wobei Ihr synthetisierbarer Code immer noch in dem HDL geschrieben ist, für das Sie sich entschieden haben (dh VHDL oder Verilog).
SystemC ist auch eine gute Option für ein HDL. SystemC unterstützt sowohl das Design auf Systemebene als auch auf Register Transfer Level (RTL). Sie brauchen nur einen C++-Compiler, um es zu simulieren. High-Level-Synthesetools konvertieren dann SystemC-Code in Verilog oder VHDL für die Logiksynthese.
Ich habe beides in derselben Woche gelernt. VHDL ist wie ADA/Pascal und Verilog ist wie C. VHDL ist ausführlicher und schwieriger zu kompilieren, aber sobald Sie eine Kompilierung erhalten, sind Ihre Erfolgschancen besser. Zumindest habe ich das gefunden. Verilog ist wie C ziemlich zufrieden damit, dass Sie sich selbst in den Fuß schießen. Einige Branchen wie Luft- und Raumfahrt/Regierung neigen zu VHDL, andere zu Verilog. Das Problem, das ich bei beiden finde, sind die Prüfstandsfähigkeiten, und wenn ich versuche, zu lernen und zu versuchen, von der Simulation zum Silizium/FPGA zu gelangen, ist das Schreiben von nur synthetisierbarem Code eine andere Bildungsebene.
Es gibt eine Sprache, die ich wirklich mag und die CDL heißt . Es ist streng synthetisierbar, Sie schreiben Ihre Testbenches auf andere Weise, es generiert synthetisierbares Verilog, das Sie in andere Tools übernehmen können. Leider fehlen die CDL -Dokumente, ich hoffe, einige Beispiele in die Welt zu bringen, um zu zeigen, wie viel einfacher es zu verwenden ist als Verilog oder VHDL, aber das habe ich einfach nicht getan. Es wird mit einer eigenen Simulations-/Testumgebung geliefert. Mit CDL und GTKWave können Sie eine beträchtliche Menge an Arbeit erledigen.
Ein weiteres Tool namens Verilator ist ziemlich streng, um Ihr Verilog sauber zu halten. Es ist ein kostenloser Verilog-Simulator mit einer sehr einfachen Möglichkeit, ihn an die Simulation anzuhängen oder Prüfstände in C/C++ zu erstellen. Sie können auch Verilog verwenden, sind jedoch nicht darauf beschränkt. Es gibt auch Icarus Verilog , das größer und bekannter ist, aber ich würde Verilator empfehlen, wenn Sie Verilog lernen möchten. Für VHDL gibt es GHDL , meine Erfahrung damit war nicht so gut wie Verilator , aber immerhin gibt es ein kostenloses Tool, um zu versuchen, Ihre Füße nass zu machen. Wenn Sie Erfahrung in der Softwareprogrammierung haben, werden Sie Verilog wahrscheinlich schneller erlernen und genießen als VHDL.
Ich stimme Leon definitiv zu, probiere beides aus. fpga4fun und andere Webseiten haben einige gute Informationen und einige dieser Seiten geben Ihnen sowohl die Verilog- als auch die VHDL-Äquivalente für das Thema, das sie diskutieren. Ich finde Seiten wie diese am nützlichsten, um die beiden Sprachen zu vergleichen. Wenn Sie in Ihrer Karriere ein HDL verwenden möchten, empfehle ich, zumindest einige Fähigkeiten mit beiden zu haben, vielleicht wirklich gut mit einem, aber nicht völlig unfähig zu sein, das andere zu verwenden.
Viele heilige Kriege wurden deswegen geführt. Ein besonderer Nachteil von Verilog ist sein nicht deterministisches Verhalten. http://www.sigasi.com/content/verilogs-major-flaw
Beides hat Vor- und Nachteile. VHDL ist akademischer, ausführlicher und komplexer. Sie müssen mehr Code schreiben, aber die Strenge bedeutet, dass es wahrscheinlicher funktioniert. Verilog ist einfacher für typisches digitales Design, macht es jedoch einfacher, knifflige Fehler zu erstellen. VHDL ist eher an Universitäten verbreitet. Verilog ist häufiger in großen Halbleiterunternehmen anzutreffen.
Normalerweise hängt die Wahl des einen oder anderen von den verwendeten Tools ab. Einige der beliebten FPGA-Tools funktionieren besser mit VHDL. Einige beliebte ASIC-Tools funktionieren besser mit Verilog. Was besser ist, hängt also davon ab, was Sie damit machen möchten.
Angenommen, Sie möchten kleine Projekte mit den Altera-FPGAs erstellen, die in EE-Schulen beliebt sind. Die kostenlosen Tools unterstützen beide HDLs. Aber Sie werden vielleicht feststellen, dass die Benutzergemeinschaft hauptsächlich VHDL verwendet. Es wird mehr Beispielcode, wiederverwendbare Module usw. geben, wenn Sie sich für diese Sprache entscheiden.
Umgekehrt, wenn Sie beabsichtigen, in einem großen Unternehmen zu arbeiten, das ernsthafte Chipdesign-Arbeiten durchführt, verwenden heutzutage fast alle Verilog. Die leistungsfähigen Synthese-, Simulations- und Verifikationswerkzeuge sind für Verilog optimiert. Und in letzter Zeit SystemVerilog – Erweiterungen von Verilog zur Unterstützung von Systemdesign und -überprüfung auf hoher Ebene.
Mehr Diskussion hier und nützliche Links hier:
Für einen Anfänger/Hobbyisten ist es am besten, zu entscheiden, mit welchen Chips Sie spielen möchten, und zu sehen, welche Beispiele der Anbieter anbietet. Verwende das. Sobald Sie ein erfahrener Digitaldesigner sind, dauert das Erlernen der anderen Sprache nur wenige Tage.
Kurze Antwort : Verwenden Sie SystemVerilog, aber lernen Sie auch VHDL . Vermeiden Sie Verilog-2001, wenn Sie können.
Sehr lange Antwort : Im Moment gehe ich davon aus, dass Sie mit Verilog Verilog-2001 meinen, was wahrscheinlich auch die meisten anderen Antworten annehmen. Der beste Vorschlag wäre wahrscheinlich, beides zu lernen, aber keines zu verwenden (mehr dazu am Ende der Antwort). Die wesentlichen Unterschiede lassen sich im Folgenden zusammenfassen:
wire
vs reg
)Allerdings teilen sich die beiden Sprachen die wichtigsten Konzepte, wenn auch unter unterschiedlichen Namen (z. B. always
vs process
), und in jedem Fall hängt die Schwierigkeit beim Erlernen einer HDL eher mit den dahinter stehenden Konzepten zusammen (wie z. B. der Gleichzeitigkeit aller Prozesse, der HW Konventionen etc.) als auf die Sprache selbst. In Anbetracht der Unterschiede, wenn die Wahl zwischen Verilog 2001 und VHDL besteht, würde ich persönlich jeden Anfänger zu VHDL ansprechen.
Wie gesagt, mein Vorschlag ist jedoch, weder VHDL noch Verilog-2001 zu verwenden, wenn Sie die Wahl haben. Im Gegensatz zu dem, was viele Leute annehmen, ist SystemVerilog keine höhere Sprache, die nur für das Design oder die Verifikation auf Systemebene nützlich ist, und hat wenig mit Sprachen gemeinsam, die in ein höheres Synthesetool wie SystemC eingespeist werden können.
Stattdessen ist SystemVerilog ein vollständiges Update der Verilog-Sprache (basierend auf Verilog-2005, siehe http://en.wikipedia.org/wiki/SystemVerilog ), das eine vollständig synthetisierbare Teilmenge hat, die der Prägnanz von Verilog mit höherer Ausdruckskraft entspricht als beide Verilog-2001 und VHDL bieten meiner Meinung nach das Beste aus beiden Welten.
Beispiele für sehr wichtige Konstrukte/Ausdrücke, die in SystemVerilog verfügbar sind, die in Verilog-2001, VHDL oder beiden nicht verfügbar sind, sind:
always_ff
, always_latch
, always_comb
Blöcke, die dem Designer helfen, sofort zwischen Blöcken zu unterscheiden, die verschiedene Arten von Logik implementieren, und - for always_comb
und always_latch
- automatisch die Signale ableiten, die auf die Sensitivitätsliste kommen sollten (eine Quelle unendlicher Fehler in VHDL und Verilog, insbesondere für Anfänger!)logic
wire
Typen, die die verwirrenden und reg
Typen von Verilog-2001 ersetzenlogic [N-1:0][M-1:0][P-1:0]
), während Verilog-2001 nur zweidimensionale Busse unterstützt und VHDL den Designer dazu zwingt, neue Typen zu definieren, um ähnliche Strukturen zu bauenstruct
(ähnlich wie VHDL record
) und sogar High-Level-Konstrukte interface
, die sehr effektiv verwendet werden können, um reguläre Strukturen zu modellieren (z. B. die Ports eines Busses)Ich habe all diese Unterschiede "auf meiner Haut" getestet, während ich zu Forschungszwecken an einem recht komplexen Multicore-System gearbeitet habe. Es wird jetzt von vielen Tools unterstützt, und ich weiß mit Sicherheit (da ich sie fast täglich verwende), dass es von Synopsys-Tools (sowohl für ASIC- als auch FPGA-Syntheseabläufe), Xilinx Vivado (für FPGA-Synthese) und Simulationstools wie z B. MentorGraphics Modelsim, Cadence NCsim und Synopsys VCS.
Um ganz vollständig zu sein, gibt es zwei weitere wichtige Arten von Sprachen in der Toolbox des Hardware-Designers (obwohl die Qualität dieser Tools sehr unterschiedlich sein kann):
Meine Karriere in den letzten 13 Jahren bestand zu 80 % aus ASIC und zu 20 % aus FPGA.
VHDL wurde für die ersten 3,5 Jahre verwendet und der Rest war Verilog. Ich fand den Wechsel zu Verilog nicht schwierig, und aus Standort- (Silicon Valley) und Geschwindigkeitsgründen codiere ich heute nur noch in Verilog.
Außerdem mache ich viele Async-Schnittstellen, Latches und Semi-Custom-Designs auf Gate-Ebene für die Leistung, sodass VHDL in meinem Leben jetzt nur noch sehr wenig Verwendung findet. Stattdessen fand ich SystemVerilog und SystemC viel nützlicher, um sie für große technische Projekte aufzugreifen und zu verwenden.
Zu einem bestimmten Zeitpunkt haben mir Tools wie Verilator (kostenlos! und schnell) viel dringend benötigtes Geld für kritische Simulationen gespart. GHDL ist für VHDL verfügbar. Und Sie brauchen es vielleicht nie, wenn Sie immer in einem wohlhabenden Pool schwimmen oder keine >1 Million Gate-Designs machen.
Trotzdem ist VHDL besser für Anfänger, bevor sie solide HW-Designprinzipien entwickeln. Meine Kommunikation mit EDA-Leuten hier deutet darauf hin, dass sie in den letzten 10 Jahren kleine VHDL-Entwicklungen durchgeführt haben und dass heute ein großer Antrieb hinter HLS steckt. Es wird also nicht viele Entwickler von VHDL-Tools geben ...
Ich entschied mich für VHDL, vor allem, weil ich C wirklich gut kenne und feststellte, dass der Versuch, Verilog zu schreiben, dazu führte, dass ich schrieb, als würde ich auf eine CPU abzielen, die keine Hardware beschreibt.
Sehr ärgerlich, eine Seite Code zu schreiben und zu erkennen, was Sie geschrieben haben, war effektiv ein sequentielles Programm, kein Hardware-Design, ja, es wäre ein Synthesizer, aber das Ergebnis war hässlich und langsam.
VHDL war so anders, dass ich es viel einfacher fand, in Begriffen des Logikdesigns und nicht des Kontrollflusses zu denken.
Am Ende des Tages ist die Sprache selten das Schwierige, das Können liegt im Systemdesign, nicht im Tippen.
Grüße, Dan.
Letztes Jahr hat die Universität, an der ich studiert habe, zwei offene Kurse für Anfänger angeboten. Beide deckten denselben Inhalt ab, aber einer verwendete VHDL und der andere Verilog.
Natürlich habe ich beide Professoren nach den Unterschieden von VHDL und Verilog gefragt. Beide konnten nicht den Besten wählen.
Also musste ich beide Kurse machen, um zu sehen, welcher für mich besser sein könnte. Mein erster Eindruck war, dass VHDL eher Pascal-ähnlich und Verilog eher C-ähnlich ist .
Danach habe ich mich entschieden, nur noch VHDL zu machen, weil ich damals mit Delphi gearbeitet habe.
Aber ich habe nach dem Kurs nie mit FPGA gearbeitet. Also das ist das Beste, was ich Ihnen helfen kann.
Ich verwende fast ausschließlich VHDL. Meine Erfahrung ist, dass VHDL in Europa häufiger ist, Verilog in den USA, aber VHDL macht auch in den USA stetige Fortschritte. Die starke Typisierung von VHDL stört mich nicht, weil ich es wie eine altmodische Hardware-Designsprache verwende, wie sie in kleinen programmierbaren Logiken wie PALASM oder Alteras AHDL verwendet wird.
Das große Problem für die meisten Leute, die VHDL verwenden, sind die starken Typen. Sie wollen Zuweisungen zwischen std_logic_vector (was ich als eine Sammlung von Drähten im Ziel ansehe) und "int" (was ich als eine Zahl ansehe, die in dem Computer gespeichert ist, der das Design kompiliert) machen. Die nervigste Typkonvertierung, die mir im Allgemeinen begegnet, ist die zwischen bit_vector (was ich als Beschreibung einer Sammlung von Drähten im Computer betrachte, der das Design kompiliert) und std_logic_vector. Was mich gerade zu Stackexchange gezogen hat, war die Suche nach einer Konvertierung von char (einer im Kompilierungscomputer gespeicherten Zeichenvariablen) in int.
Früher war der bekannteste Konflikt zwischen VHDL und Verilog der Designwettbewerb, der vom ASIC & EDA-Magazin veranstaltet wurde. Google "Unexpected Results From A Hardware Design Contest: Verilog Won & VHDL Lost? -- You Be The Judge!", zum Beispiel: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Beispiel/lrgeEx2/cooley.html
Der Wettbewerb bestand darin, ein ziemlich kompliziertes 9-Bit-Register zu implementieren. Es hatte Aufwärts-/Abwärtszählen sowie ein paar andere Dinge. Das Ergebnis war, dass bei 8 der 9 Verilog-Designer der Code nach 90 Minuten lief. Bei null der 5 VHDL-Typen funktionierte irgendetwas.
Ich benutze VHDL nicht wie jeder andere. So wie ich es benutze, kommen mir die Typen nicht oft in die Quere. Ich hätte das obige Projekt genauso implementiert wie alles andere, vollständig in std_logic und std_logic_vector, wobei ich (damals) die unsignierte IEEE-Bibliothek verwendet habe. Stattdessen stelle ich mir vor, dass die VHDL-Designer ihre Arbeit mit int gemacht haben und sich in der Typkonvertierung verloren haben.
Es gibt zwei Orte, an denen Sie sich bei der Typkonvertierung verlieren können: (a) Ihr Design und (b) Ihr Prüfstand. Für mich ist es einfach einfacher, die Testbench (fast) vollständig in std_logic zu schreiben, damit die Testbench selbst (fast) synthetisierbar ist. Mit "fast" meine ich, dass ich die Uhr mit einer verzögerten Zuordnung definiere, die nicht synthetisiert werden kann. Aber abgesehen davon (und Anmerkungen) können Sie meine Prüfstände nicht von der synthetisierten Logik unterscheiden.
Wie auch immer, bevor Sie sich für eine erste zu lernende Sprache entscheiden (fast jeder hat eine Präferenz, aber fast jeder verwendet beide), würde ich raten, diesen Wettbewerb nachzuschlagen und den Kommentar dazu zu lesen.
Eines der Probleme, die ich bei VHDL beobachtet habe, ist, dass, da es sich um eine sehr ausführliche Sprache handelt, (in den Köpfen der Designer) die Tendenz zu bestehen scheint, zu glauben, dass keine Kommentare erforderlich sind. Stimmt natürlich nicht, man sollte die Kommentare vor den Code schreiben.
Ich werde meine zwei Cent wiegen: Ich bin selbst ein starker VHDL-Benutzer, aber Verilog kann die Arbeit sicherlich genauso gut erledigen. Sie können immer einen in den anderen packen (allerdings mit Zeit- und Tippkosten).
Was ich festgestellt habe, ist, dass rohem VHDL viele praktische Funktionen fehlen. (ODER oder UND: Ein ganzer std_logic_vector kommt mir in den Sinn). Wenn Sie sich also eine Toolbox mit debuggten, synthetisierbaren Funktionen aufbauen, können Sie Ihre Produktivität bei der Verwendung von VHDL erheblich steigern.
Vielleicht könnte jemand auf eine gute Open-Source-Bibliothek verweisen, die all diese "gut zu habenden" Funktionen bietet?
Die vorherigen Antworten decken die Kontraste zwischen den beiden Sprachen ziemlich gut ab, und dieser Artikel behandelt die Punkte auch ziemlich gut: http://www.bitweenie.com/listings/verilog-vs-vhdl/
Ich möchte auch noch ein paar Punkte ansprechen, die noch nicht erwähnt wurden.
Ich würde aus mehreren Gründen empfehlen, zuerst VHDL zu lernen. Die starke Typisierung hilft, einige leichte Anfängerfehler vom Compiler abzufangen. Ich habe auch gehört, dass VHDL nach der ersten Verwendung von Verilog schwieriger zu erfassen ist.
Ehrlich gesagt kann man mit beiden Sprachen nichts falsch machen; und wenn man sehr lange in dieser branche arbeitet, lernt man irgendwann sowieso beide sprachen.
Leon Heller
dsgdfg