Neben hervorragender Antwort Marty bietet die SystemVerilog-Spezifikation den byte
Datentyp. Das folgende erklärt ein 4x8-Bit-Variable (4 Byte), weist jedem Byte einen Wert, zeigt dann alle Werte:
module tb;
byte b [4];
initial begin
foreach (b[i]) b[i] = 1 << i;
foreach (b[i]) $display("Address = %0d, Data = %b", i, b[i]);
$finish;
end
endmodule
Dies gibt:
Address = 0, Data = 00000001
Address = 1, Data = 00000010
Address = 2, Data = 00000100
Address = 3, Data = 00001000
Dies ist im Konzept ähnlich Martys reg [7:0] a [0:3];
. byte
ist jedoch ein 2-State-Datentyp (0 und 1), aber reg
ist 4-State (01xz). Die Verwendung von byte
erfordert auch Ihre Werkzeugkette (Simulator, Synthesizer usw.), um diese SystemVerilog-Syntax zu unterstützen. Beachten Sie auch die kompaktere foreach (b[i])
Schleifensyntax.
Die SystemVerilog-Spezifikation unterstützt eine Vielzahl von mehrdimensionalen Array-Typen. Das LRM kann sie besser erklären, als ich es kann; Siehe IEEE Std 1800-2005, Kapitel 5.
Müssen die for-Schleifen nicht <= 3 und nicht <3 sein? –
@RossAiken-Array-Deklaration von [a: b] -Stil ist inklusive Bereich. Also <= ist richtig. – siu
@siu - Ich hatte es ursprünglich falsch - ross-aiken entdeckte den Fehler und ich bearbeitete die Antwort ... – Marty