Oltre alla ottima risposta di Marty, la specifica SystemVerilog offre il tipo di dati byte
. La seguente dichiara una variabile 4x8 bit (4 byte), assegna ogni byte un valore, quindi visualizza tutti i valori:
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
Questo stampa:
Address = 0, Data = 00000001
Address = 1, Data = 00000010
Address = 2, Data = 00000100
Address = 3, Data = 00001000
Questo è concettualmente simile a Marty reg [7:0] a [0:3];
. Tuttavia, byte
è un tipo di dati a 2 stati (0 e 1), ma reg
è a 4 stati (01xz). L'utilizzo di byte
richiede anche la catena di strumenti (simulatore, sintetizzatore, ecc.) Per supportare questa sintassi SystemVerilog. Nota anche la sintassi del loop foreach (b[i])
più compatta.
Le specifiche SystemVerilog supportano un'ampia varietà di tipi di array multidimensionali. LRM può spiegarli meglio di me; fare riferimento a IEEE Std 1800-2005, capitolo 5.
Non i cicli for devono essere <= 3 anziché <3? –
La dichiarazione dell'array @RossAiken dello stile [a: b] è compresa nell'intervallo. Quindi <= è corretto. – siu
@siu - All'inizio mi sbagliavo - ross-aiken ha individuato l'errore e ho modificato la risposta ... – Marty