Forum: FPGA, VHDL & Co. Verilog versus VHDL ;-)


von Hannes (Gast)


Lesenswert?

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 !

von Gast (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Pete (Gast)


Lesenswert?

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.

von Hannes (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

> 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.

von yalu (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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.

von Arndt B. (Firma: Helion GmbH) (bussmann)


Lesenswert?

@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

von Matthias G. (mgottke)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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.

von Andreas (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.