How to declare and use 1D and 2D byte arrays in Verilog?

后端 未结 3 904
面向向阳花
面向向阳花 2021-01-30 05:39

How to declare and use 1D and 2D byte arrays in Verilog?

eg. how to do something like

byte a_2D[3][3];
byte a_1D[3];

// using 1D
for (int i=0; i< 3;          


        
3条回答
  •  -上瘾入骨i
    2021-01-30 05:48

    In addition to Marty's excellent Answer, the SystemVerilog specification offers the byte data type. The following declares a 4x8-bit variable (4 bytes), assigns each byte a value, then displays all values:

    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
    

    This prints out:

    Address = 0, Data = 00000001
    Address = 1, Data = 00000010
    Address = 2, Data = 00000100
    Address = 3, Data = 00001000
    

    This is similar in concept to Marty's reg [7:0] a [0:3];. However, byte is a 2-state data type (0 and 1), but reg is 4-state (01xz). Using byte also requires your tool chain (simulator, synthesizer, etc.) to support this SystemVerilog syntax. Note also the more compact foreach (b[i]) loop syntax.

    The SystemVerilog specification supports a wide variety of multi-dimensional array types. The LRM can explain them better than I can; refer to IEEE Std 1800-2005, chapter 5.

提交回复
热议问题