Title

SystemVerilog -- 2.5 Data Types ~ SystemVerilog Arrays

SystemVerilog Arrays

SystemVerilog 在通过不同类型的数组构建复杂的数据结构方面提供了很大的灵活性。

  • 静态阵列
  • 动态阵列
  • 关联数组
  • 队列

Static Arrays

静态数组是指其大小在编译时间之前已知的数组。在下面显示的示例中,声明了一个8位宽的静态数组,为其分配了一些值并循环访问以打印其值。

module tb;
  bit [7:0]  m_data;    // A vector or 1D packed array

  initial begin
    // 1. Assign a value to the vector
    m_data = 8'hA2;
    // 2. Iterate through each bit of the vector and print value
    for (int i = 0; i < $size(m_data); i++) begin
      $display ("m_data[%0d] = %b", i, m_data[i]);
    end
  end
endmodule

静态数组进一步分为打包数组和解压缩数组。

bit [2:0][7:0] m_data;        // Packed
bit [15:0]     m_mem [10:0];  // Unpacked

解压缩数组可以是固定大小的数组、动态数组、关联数组和队列。

Dynamic Arrays

动态数组是指在编译过程中不知道其大小,而是在运行时根据需要定义和扩展的数组。动态数组很容易通过其空方括号识别。[]

int   m_mem [];  // Dynamic array, size unkown but it holds integer values

Associative Arrays

关联数组是使用特定键存储内容的数组。这很容易通过其方括号内的数据类型的存在来识别。键在方括号内表示。[]

int          m_data[int];      // Key is of type int, and data is also of type int
int          m_name [string];  // Key is of type string, and data is of type int

m_name ["Rachel"] = 30;
m_name ["Orange"] = 2;

m_data [32'h123] = 3333;

Queues

队列是一种数据类型,其中数据可以推送到队列中或从数组中弹出。它很容易通过方括号内的符号识别。$ []

int    m_queue [$];             // Unbound queue, no size

m_queue.push_back(23);          // Push into the queue
int data = m_queue.pop_front(); // Pop from the queue

posted on 2024-05-02 17:20  松—松  阅读(26)  评论(0编辑  收藏  举报

导航