Hallo zusammen Ich arbeite mich im Moment in die Programmiersprache Verilog ein. Bei einigen Beispielen sehe ich die Enscheidungsoperatoren "?" Gibt es irgend einen Vorteils diese "?"? Ich persönlich finde solchen Code nämlich sehr unschön.
Das "?" ist kürzer! Nachteil zu if/else-Konstrukten: if()... else if()... else if()... else if()... -> so viele Fälle auf einer Ebene wie du brauchst ... <= (Bedingung)? Fall 1 (Bed. erfüllt) : Fall 2 (Bed. nicht erfüllt); oder ... <= (Bedingung)? Fall 1 (Bed. erfüllt) : ((Bedingung 2)? Fall 2.1 : (Bedingung 3) Fall 3.1 ...; -> nur 2 Fälle pro Entscheidungsebene, mehrere Fälle nur über Verschachtlung möglich. Zusammenfassung: ? bei einfachen Ja/Nein-Abfragen praktischer
Daniel T. schrieb: > Gibt es irgend einen Vorteils diese "?"? In der Kürze liegt die Würze... > Ich persönlich finde solchen Code nämlich sehr unschön. Über Schönheit darf gestritten werden. Der ?-Operator gefällt mir schon in C sehr gut. In VHDL vermisse ich so was knackiges und kompaktes... EDIT: Hurra, ich hab ihn wieder gefunden, den Beitrag "Re: VHDL: 4Bit Hex -> ASCII" mit dem Fragezeichenoperator... ;-)
:
Bearbeitet durch Moderator
Daniel T. schrieb: > Gibt es irgend einen Vorteils diese "?"? Da es sich um einen Ausdruck (expression) handelt kann man den Operator auch innerhalb eines Ausdrucks verwenden. Das wiederum kann in bestimmten Situationen notwendig sein.
Trundle Trollkönig schrieb: > -> nur 2 Fälle pro Entscheidungsebene, mehrere Fälle nur über > Verschachtlung möglich. Wenn du das als If-Else-Kette hinschreibst, ist diese ebenfalls verschachtelt. Normalerweise würde sie so aussehen:
1 | if(Bedingung1) { |
2 | Fall1; |
3 | }
|
4 | else { |
5 | if(Bedingung2) { |
6 | Fall2; |
7 | }
|
8 | else { |
9 | if(Bedingung3) { |
10 | Fall3; |
11 | }
|
12 | else { |
13 | if(Bedingung4) { |
14 | Fall4; |
15 | }
|
16 | else { |
17 | Fall5; |
18 | }
|
19 | }
|
20 | }
|
21 | }
|
Oft wird diese Verschachtelung etwas kaschiert, indem man überflüssige Klammen und die Einrückung weglässt:
1 | if (Bedingung1) Fall1; |
2 | else if (Bedingung2) Fall2; |
3 | else if (Bedingung3) Fall3; |
4 | else if (Bedingung4) Fall4; |
5 | else Fall5; |
Entsprechendes kann man aber beim ?:-Operator ebenfalls machen:
1 | Bedingung1 ? Fall1 : |
2 | Bedingung2 ? Fall2 : |
3 | Bedingung3 ? Fall3 : |
4 | Bedingung4 ? Fall4 : |
5 | Fall5 ; |
Das sieht dann sogar noch etwas übersichtlicher aus als das Beispiel davor.
:
Bearbeitet durch Moderator
ich kann gerade nicht 100 prozentige Bestätigen ob
1 | if(Bedingung1) { |
2 | Fall1; |
3 | }
|
4 | else { |
5 | if(Bedingung2) { |
6 | Fall2; |
7 | }
|
8 | else { |
9 | if(Bedingung3) { |
10 | Fall3; |
11 | }
|
12 | else { |
13 | if(Bedingung4) { |
14 | Fall4; |
15 | }
|
16 | else { |
17 | Fall5; |
18 | }
|
19 | }
|
20 | }
|
21 | }
|
und
1 | if (Bedingung1) Fall1; |
2 | else if (Bedingung2) Fall2; |
3 | else if (Bedingung3) Fall3; |
4 | else if (Bedingung4) Fall4; |
5 | else Fall5; |
in verilog wirklich das gleiche ist??? beim ersten gibts es klar ne Priorisierung der Abfragen (ich will es jetzt nicht Sequenz nennen weil ja alles noch in einem Takt passieren kann). und ich weiß nicht ob das bei Fall 2 ebenso ist, speziell wenn man Bedingungen betrachtet wo Bedinung 2 eine Untermenge von Bedingung 1 oder so ist. ich will nicht behaupten, das man mit beiden konstrukten nicht gleiches Verhalten herstellen kann, aber ob das immer so ist ohne nochmal was umzustellen keine ahnung...
:
Bearbeitet durch Moderator
Trundle Trollkönig schrieb: > ich kann gerade nicht 100 prozentige Bestätigen ob > [beides] in verilog wirklich das gleiche ist??? Mal abgesehen, dass die entsprechende Verilog Syntax im ersten Fall natürlich etwas anders aussieht ist es das gleiche. > beim ersten gibts es klar ne Priorisierung der Abfragen > und ich weiß nicht ob das bei Fall 2 ebenso ist, speziell wenn man > Bedingungen betrachtet wo Bedinung 2 eine Untermenge von Bedingung 1 > oder so ist. Wenn die Syntese beweisen kann, dass zwei Fälle mutually exclusive sind, kann sie damit machen was sie will. Wenn nicht, muss priorisiert werden. Der Simulation ist das alles sowieso egal. In SystemVerilog kann man mit unique if auch der Simulation bekannt geben, dass man keinen Prioritätsencoder haben möchte. Dann wird zur Laufzeit überprüft ob die Exclusivität der Fälle gegeben ist.
:
Bearbeitet durch User
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.