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