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
assignx=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 :
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.
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