Initialisieren einer großen Bitzahl als Null

Gibt es eine effizientere Möglichkeit, einen Anfangswert für eine Variable zu registrieren als

reg [3:0] COUNT = 4'b0000;  

Wo müsste ich in diesem Fall, wenn ich beispielsweise einen 32-Bit-COUNT definieren würde, 32'b (hier 32 Nullen) schreiben?

Antworten (2)

Nichts sagt, dass Sie immer alle Nullen in Binärbasis angeben müssen. Eigentlich kann man es so schreiben:

reg [31:0] COUNT = 32'd0;

....mit einer Dezimalbasis. Der Verilog erweitert diese dezimale Null auf die angegebene 32-Bit-Breite.

32'b0wird genauso gut funktionieren, so wird 32'h0. Verilog füllt jede "vorzeichenlose" Konstante mit Nullen und jede "vorzeichenbehaftete" Konstante mit Kopien des MSB auf.
reg [WIDTH -1: 0] count = {WIDTH{1'b0}}kann auch benutzt werden.

Verilog füllt schmale ganzzahlige Werte immer links mit Nullen auf, wenn sie breiteren Variablen zugewiesen werden, und schneidet links ab, wenn breitere schmalere Variablen zugewiesen werden. Du hättest also schreiben können

reg [31:0] COUNT = 0;

Das Verilog-Zeichen wird erweitert, wenn die Variablen alle vorzeichenbehaftete Datentypen sind. Die Regeln werden kniffliger, wenn Sie Operanden von vorzeichenbehafteten und vorzeichenlosen Typen mischen.

Es ist nicht die beste Option, überhaupt keine Breite anzugeben. Standardmäßig sind Konstanten 32 Bit breit. Wenn Sie dies also mit einer 16-Bit-Zahl versuchen, erhalten Sie Synthesizer-Warnungen darüber, dass Konstanten abgeschnitten werden, damit sie passen.