Hallo zusammen, ich habe angefangen Verilog zu lernen und bin dabei unter anderem auf das Tutorial bzw Zusammenfassung auf dieser Seite gestoßen. Dort wir unter anderem Folgendes Beispiel Bitvektoren angeführt: (Mit folgenden Hinweis: Aufmerksamen Lesern ist vielleicht aufgefallen, dass die Art der Zuweisung eigentlich in einen initial- oder always-Block hätte gepackt werden müssen- um so zu funktionieren. Eine andere Möglichkeit wäre- ein assign-Konstrukt daraus zu machen. Aus Übersichtlichkeit wurde hierbei darauf verzichtet. ) <verilog> wire [15:0] data; ... data[0] = 1; // Setze nur Bit 0 data[15:13] = 3'b110; // Setze Bits 15, 14 = 1, Bit 13 = 0, Wert ist binär data[13:11] = 3'd2; // Setze Bits 13-11, Wert ist dezimal data[10:1] = 9'h0a; // Setze Bits 10-1, Wert ist hexadezimal </verilog> Jetzt habe ich als Neuling zuvor gelesen, dass Wire's nur mit einem assign-Konstrukt "verdrahtet" werden können. Dem oberen Hinweis würde ich pers. entnehmen, dass es auch die Möglichkeit über Inital/Always dem Wire einen Wert zuzuweisen. Bei meinem Online Simulator bekomme ich bei meinen Versuchen prompt Error Meldungen ala: Wire als L-Value bei einer solchen Operation nicht möglich.(Einfach nur über das oben genannte Beispiel ein Initial begin / end gelegt). Nun zu meiner eigentlichen Frage :) Gibt es eine Möglichkeit sowas in einen Inital/ Alwaysblock zu verschieben oder geht es nur über ein assign-Konstrukt? MfG, Felix
Felix schrieb: t). > > Nun zu meiner eigentlichen Frage :) > Gibt es eine Möglichkeit sowas in einen Inital/ Alwaysblock zu > verschieben oder geht es nur über ein assign-Konstrukt? > Ja gibt es. Ich gehe mal davon aus, dass es hier nicht nur einfache Zuweisungen gehen soll. Für einfache Zuweisungen und Verknüpfungen ist das assign einfacher und lesbarer.
1 | reg [15:0] data; |
2 | |
3 | ... |
4 | always @(*) |
5 | begin |
6 | if( Bedingung ) |
7 | begin |
8 | data[0] = 1; // Setze nur Bit 0 |
9 | |
10 | data[15:13] = 3'b110; // Setze Bits 15, 14 = 1, Bit 13 = 0, Wert ist binär |
11 | data[13:11] = 3'd2; // Setze Bits 13-11, Wert ist dezimal |
12 | data[10:1] = 9'h0a; // Setze Bits 10-1, Wert ist hexadezimal |
13 | end |
14 | else |
15 | data[15:0] = 16'h0000; |
16 | end |
Anmerkung @(*) ist eine automatische Sensitivity List, gibt es in VHDL 2008 auch.
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.