Hallo, kenne mich in beiden Sprachen nicht so gut aus, habe aber das Gefühl, dass VHDL übersichtlicher, eindeutiger und strukturierter als Verilog ist. Verilog erscheint mir ein wenig wie C, da es kurzen uneindeutigen Code zulässt. Was sind eure Meinungen und Erfahrungen ? Gruß Hannes !
Meine Erfahrung ist dass ich mit Verilog deutlich schneller zum Ziel komme, ist schlichtweg für die gleichen Aufgaben deutlich weniger Schreibarbeit. Das mit dem uneindeutigen Code ist wohl richtig - wenn man sich da allerdings an die eigene Nase packt, kann man durchaus auch gut erkennbaren Code schreiben. Man sollte halt Zeugs wie
1 | assign x = a ? 1'b1 : b ? 1'b1 : 1'b0; |
vermeiden, weil da selbst der Programmierer ne Stunde später nicht mehr auf Anhieb erkennt was er da macht.
VHDL ist geschwätzig, aber quasi selbsdokumentierend, das war auch die Absicht, als diese Sprache vom DoD (amerik. Verteidigungsministerium) als Verhaltensbeschreibungssprache definiert wurde. Ich schaue immer wieder in die Verilog-Ecke, konnte mich aber nie dazu durchringen, diese Sprache zu verwenden, weil (zu) viel implizites Wissen hinter dem geschriebenen Quelltext steckt. Dazu ein Beispiel aus http://de.wikipedia.org/wiki/Verilog :
1 | always @(posedge clock or negedge reset) |
2 | begin
|
3 | // Register reagiert auf positive clock-Flanke oder fallende reset-Flanke. |
4 | if (!reset) //asynchroner Rücksetzen, wenn reset = LOW |
5 | register_value <= 1'b0; |
6 | else if (set) // synchrones Setzen, wenn set = HIGH |
7 | register_value <= 1'b1; |
8 | else if (en) // synchrones Übernehmen des Wertes von datain, wenn en = HIGH |
9 | register_value <= datain; |
10 | end
|
Obwohl da steht: negedge reset ist der Reset PEGEL sensitiv :-o Ganz anders aber bei den set und en Signalen. Das ist m.E. extrem unlogisch und verwirrend. Hier wirk der clock implizit mit, obwohl er in der Beschreibung nicht verwendet wird :-/ So ist auch die Erklärung >> Register reagiert auf positive clock-Flanke oder fallende reset-Flanke. schlichtweg falsch. Das Register reagiert in der Realität auf den PEGEL am Reset-Eingang. Richtig müsste der Kommentar heißen: >> Die Beschreibung des Registers reagiert auf... Wenn ich dagegen in VHDL ein Signal in der Sensitivity-List habe, muß ich es trotzdem in der Beschreibung verwenden damit es irgendwas bewirkt.
Um die Meinungen zusammenzufassen: Ist eigentlich reine Geschmackssache :-) Beide Sprachen taugen als Beschreibungssprachen. Die Europäer mögen VHDL lieber, die Amis Verilog. Bei FPGA Beschreibungen ist VHDL weiter verbreitet.
Ja, wahrscheinlich entscheidet letztendlich der eigene Geschmack. Mir schmeckt VHDL besser, was aber vielleicht auch daran liegt das ich VHDL besser kenne. Kann es sein, dass durch die Geschwätzigkeit und die Einschränkungen in VHDL das Synthese-Ergebnis eindeutiger ist? Beispielsweise gibt es in VHDL die Mehrprozess-Darstellung von FSM, die klar zwischen Neben läufigen- und getakteten Schaltungen unterscheidet. Bei Verilog habe ich bisher immer nur einen @-Block gesehen, bei dem ich nicht nachvollziehen konnte, was davon als Flip-Flop und was als Nebenläufige Anweisung synthetisiert wird. Was nützt mir die Zeitersparnis, beim Verilog-coden, wenn der Code nach dem Programmieren unverständlich und damit wertlos wird? Gruß von Nase
> Bei Verilog habe ich bisher immer nur einen @-Block gesehen, bei dem ich > nicht nachvollziehen konnte, was davon als Flip-Flop und was als > Nebenläufige Anweisung synthetisiert wird. Wie ich oben schon geschrieben habe, keiner hält einen davon ab das nicht so zu machen. Wenn sich jemand entscheidet, das alles in einen always-Block zu wursten, dann isses halt unübersichtlich. Wenn man es beschreibt wie man es gelernt hat (State register, Next State Logic, Output Logic) und das getrennt anlegt, isses meines erachtens nach sogar übersichtlicher als in VHDL weil weniger Sprach-Blahblah dazu notwendig ist.
1 | Verilog : VHDL = C : Pascal |
oder (etwas lästerischer ;-))
1 | Verilog : VHDL = C : COBOL |
Mir gefällt Verilog etwas besser, weil mir auch C besser gefällt. Ich habe mich aber hauptsächlich deswegen für Verilog entschieden, weil in meinem Bekanntenkreis alle Verilog machen. Und das, obwohl sie bei europäischen Firmen arbeiten. An deutschen Unis und FHs wird aber wohl hauptsächlich VHDL gelehrt. Ich denke aber, dass die Entscheidung für eine der beiden Sprache nur von geringer Bedeutung ist: FPGA-Design als Ganzes ist schwer und erfordert viel Einarbeitungszzeit und Erfahrung. Das Lernen einer der beiden Hardwarebeschreibungssprachen hingegen ist leicht, da der Sprachumfang bei beiden sehr klein ist, zumindest, wenn man sie mit Computer-Programmiersprachen wie C++ oder C# vergleicht. Wenn man also zufälligerweise mit der "falschen" Sprache begonnen hat, ist es später eine Sache von 3 Tagen, sich die andere auch noch anzueignen. Das restliche Wissen über FPGA-Design, in das man Jahre investiert hat, ist unabhängig von der verwendeten Sprache weiter nutzbar.
> FPGA-Design als Ganzes ist schwer und erfordert > viel Einarbeitungszzeit und Erfahrung. Anders herum gesagt: auf ein bestimmtes Problem werden 10 Verilog-Programmierer 10 verschiedene Beschreibungen. Und genauso werden 10 VHDL-Programmierer 10 verschiedene Beschreibungen abliefern (zwar etwas später, aber dafür inclusive Testbench ;-). > Wenn man also zufälligerweise mit der "falschen" Sprache begonnen hat, > ist es später eine Sache von 3 Tagen, sich die andere auch anzueignen. Würde ich auch sagen... Mir ist auf jeden Fall nichts bekannt, was ich mit der einen Sprache könnte, was die andere nicht kann.
@yalu ganz meine Meinung und ich dachte, ich hätte den Vergleich erfunden: Verilog : VHDL = C : Pascal Wenn jemand C programmieren kann, dann fällt der Einstieg in Verilog sehr leicht. Allerdings ist es unverzichtbar eine guten und eindeutigen Programmierstil zu entwickeln. Für meinen Geschmack erkenne ich einem Verilog Code eher, was der Code in der Hardware tatsächlich bewirkt. Bei Opencores.org ergibt sich etwas folgendes Projektverhältnis (kann mich evtl. auch verzählt haben): Verilog: ca. 116 VHDL: ca. 146 Testbenches sollte man eh immer schreiben, den Code auch selbst sauber dokumentieren... Viele Grüße Arndt
Vielleicht gibt es aber noch einen kleinen Unterschied, der hier bisher nicht beleuchtet wurde: Verilog ist eher hardwarelastiger als VHDL. Man beschreibt dort mehr die Umsetzung, also die Logik und die Flip-Flops. Bei VHDL kann man das zwar auch, aber es ist besser geeignet eine Verhaltensbeschreibung seiner Aufgabe zu schreiben. Man muss sich in VHDL ein Stück weit davon lösen in Flip-Flops und Gattern zu denken. Wie die Synthese das letztlich in Logik und Flip-Flops umsetzt, sollte dann nicht mehr das vorrangigste Problem des Programmierers sein. Das bedarf aber meist einer größeren Erfahrung in Bezug auf die Resultate der Synthese. Dieser Unterschied wird aber erst bei etwas komplexeren Aufgaben deutlich. An Beispielen einfacher Logik und/oder einiger Register läßt sich das nicht verdeutlichen.
Hallo Arndt und Yalu, um bei den Vergleichen zu bleiben: C : VHDL = Verilig : ADA Der Ansatz von ADA war absolut der selbe, wie der von VHDL. Auch die Quelle rund um das amerik. Verteidigungsministerium ist der selbe. Eine wichtige Eigenschaft beider Sprachen ist die klare und unmisverständliche Typprüfung und die Eindeutigkeit und Lesbarkeit des geschriebenen Codes. Gut von ADA redet kein Mensch mehr. VHDL klebt uns allerdings am Schuh wie Teer. VHDL und Verilog wurden im Übrigen nie für die Synthese von digitalen Schaltungen erfunden, sondern für deren Verifikation( für die Definition von Schaltwerken waren damals ABEL und andere herstellerspezifische Sprachen zuständig und die Definition erschöpfte sich in recht hardwarenahen Elementen). Dass es Synthesewerkzeuge gibt welche aus relativ abstrakter VHDL-Beschreibung für FPGAs einigermassen passende Netz- und Logiklisten synthetisieren werden,ist das Ergebnis langjähriger Optimierungen. Gruß Andreas
> aus relativ abstrakter VHDL-Beschreibung Nein, der VHDL-Syntaxumfang für die Synthese ist genau soweit eingeschränkt, dass was Sinnvolles dabei rauskommt. Mit der Zeit verstehen die Synthesewerkzeuge allerdings auch aufwendigere Sprachelemente. Allerdings trifft das auch auf Verilog zu: Ich kann in Verilog eine ganz einfache Zeile hinschreiben, die (bis auf Ausnahmefälle) nicht synthetisierbar ist: Eine ganz ordinäre Division.
Hallo Lothar, meine Anmerkung bezüglich der Fähigkeiten der VHDL-Synthesewerkzeuge ( und auch der Verilog) bezieht sich z.B. auf die beschriebene Schaltung auf die FPGA Hardware abzubilden. So war es in den Neunzigern keineswegs selbstverständlich, daß die Synthesewerkzeuge die in den FPGAs befindliche Carrylogik für einen Counter(!) nutzten. Von anderen Spielereien mal ganz abgesehen. Nicht umsonst pflegten die FPGA-Hersteller Ihre eigenen Makrobibliotheken in denen "optimierte" Primitive wie Adder und Counter zu finden waren. Das galt nicht nur den Malern am Bildschirm sondern war teils schon nötig wenn lange Zählerstrecken mit mehr als 5MHz rennen sollten... Gruss Andreas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.