Outre une excellente réponse de Marty, la spécification SystemVerilog offre le type de données byte
. Ce qui suit déclare une variable 4x8 bits (4 octets), attribue à chaque octet une valeur, affiche toutes les valeurs:
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
Cette imprime:
Address = 0, Data = 00000001
Address = 1, Data = 00000010
Address = 2, Data = 00000100
Address = 3, Data = 00001000
Ce concept est similaire à Marty reg [7:0] a [0:3];
. Cependant, byte
est un type de données à 2 états (0 et 1), mais reg
est un état 4 (01xz). L'utilisation de byte
nécessite également votre chaîne d'outils (simulateur, synthétiseur, etc.) pour prendre en charge cette syntaxe SystemVerilog. Notez également la syntaxe de boucle foreach (b[i])
plus compacte.
La spécification SystemVerilog prend en charge une grande variété de types de tableaux multidimensionnels. Le LRM peut les expliquer mieux que je ne peux; IEEE Std 1800-2005, chapitre 5.
Les boucles for ne doivent-elles pas être <= 3 plutôt que <3? –
La déclaration de tableau @RossAiken de style [a: b] est inclusive. Donc <= est correct. – siu
@siu - Je me suis trompé à l'origine - ross-aiken a repéré l'erreur et j'ai édité la réponse ... – Marty