With increasing cases of COVID-19 (corona-virus), it is advised to follow WHO precautionary measures to be safe and protect others.

An unpacked array is used to refer to dimensions declared after the variable name.

Unpacked arrays may be fixed-size arrays, dynamic arrays, associative arrays or queues.

Single Dimensional Unpacked Array

 
module tb;
  byte   stack [8];     // depth = 8, 1 byte wide variable
 
  initial begin
    // Assign random values to each slot of the stack
    foreach (stack[i]) begin
      stack[i] = $random;
      $display ("Assign 0x%0h to index %0d", stack[i], i);
    end
 
    // Print contents of the stack
    $display ("stack = %p", stack);
  end
endmodule
 
Simulation Log
Assign 0x24 to index 0
Assign 0x81 to index 1
Assign 0x9 to index 2
Assign 0x63 to index 3
Assign 0xd to index 4
Assign 0x8d to index 5
Assign 0x65 to index 6
Assign 0x12 to index 7
stack = '{'h24, 'h81, 'h9, 'h63, 'hd, 'h8d, 'h65, 'h12}

Click to try this example in a simulator!   

Multidimensional Unpacked Array

 
module tb;
  byte   stack [2][4];     // 2 rows, 4 cols
 
  initial begin
    // Assign random values to each slot of the stack
    foreach (stack[i])
          foreach (stack[i][j]) begin
            stack[i][j] = $random;
            $display ("stack[%0d][%0d] = 0x%0h", i, j, stack[i][j]);
      end
 
    // Print contents of the stack
    $display ("stack = %p", stack);
  end
endmodule
 
Simulation Log
ncsim> run
stack[0][0] = 0x24
stack[0][1] = 0x81
stack[0][2] = 0x9
stack[0][3] = 0x63
stack[1][0] = 0xd
stack[1][1] = 0x8d
stack[1][2] = 0x65
stack[1][3] = 0x12
stack = '{'{'h24, 'h81, 'h9, 'h63}, '{'hd, 'h8d, 'h65, 'h12}}
ncsim: *W,RNQUIE: Simulation is complete.

Click to try this example in a simulator!   

Packed + Unpacked Array

The example shown below illustrates a multidimensional packed + unpacked array.

 
module tb;
  bit [3:0][7:0]   stack [2][4];     // 2 rows, 4 cols
 
  initial begin
    // Assign random values to each slot of the stack
    foreach (stack[i])
          foreach (stack[i][j]) begin
            stack[i][j] = $random;
            $display ("stack[%0d][%0d] = 0x%0h", i, j, stack[i][j]);
      end
 
    // Print contents of the stack
    $display ("stack = %p", stack);
 
    // Print content of a given index
        $display("stack[0][0][2] = 0x%0h", stack[0][0][2]);
  end
endmodule
 
Simulation Log
ncsim> run
stack[0][0] = 0x12153524
stack[0][1] = 0xc0895e81
stack[0][2] = 0x8484d609
stack[0][3] = 0xb1f05663
stack[1][0] = 0x6b97b0d
stack[1][1] = 0x46df998d
stack[1][2] = 0xb2c28465
stack[1][3] = 0x89375212
stack = '{'{'h12153524, 'hc0895e81, 'h8484d609, 'hb1f05663}, '{'h6b97b0d, 'h46df998d, 'hb2c28465, 'h89375212}}
stack[0][0][2] = 0x15
ncsim: *W,RNQUIE: Simulation is complete.

Click to try this example in a simulator!   

In a multidimensional declaration, the dimensions declared before the name vary more faster than the dimensions following the name.

 
bit   [1:4]     m_var   [1:5]      // 1:4 varies faster than 1:5 
bit         m_var2   [1:5] [1:3]    // 1:3 varies faster than 1:5
bit   [1:3] [1:7] m_var3;         // 1:7 varies faster than 1:3
 
bit   [1:3] [1:2] m_var4 [1:7] [0:2]     // 1:2 varies most rapidly, followed by 1:3, then 0:2 and then 1:7
 

You consent to our cookies if you continue to use our website. To know more about cookies, see our privacy policy. I accept cookies from this site.

Agree