Verilog 数组17 Mar 2025 | 5 分钟阅读 Verilog 数组用于将元素分组到多维对象中,以便更容易地操作。 Verilog 没有用户定义的类型,我们只能使用内置 Verilog 类型的数组,例如 nets、regs 和其他 Verilog 变量类型。 数组是相同类型变量的集合,使用相同的名称和一个或多个索引进行访问。 每个数组维度通过在方括号内包含 min 和 max 索引来声明。 数组索引可以沿任一方向书写 通过在数组声明之后包含多个维度,可以声明多维数组。 数组标识符之前的任何方括号都是数组中复制的数据类型的一部分。 Verilog 数组是可综合的,因此我们可以在可综合的 RTL 代码中使用它们。 在 C 语言中,数组通过整数从 0 开始索引,或者转换为指针。 但是可以初始化整个数组,并且必须在过程语句中单独读取或写入每个元素。 在 Verilog-2001 中,数组从左边界到右边界进行索引。 如果它们是向量,则可以作为单个单元分配,但如果它们是数组则不能。 Verilog-2001 允许使用多个维度。 在 Verilog-2001 中,所有数据类型都可以声明为数组。 wire、reg 和所有其他网络类型也可以声明向量宽度。 在对象名称之前声明的维度称为 向量宽度 维度。 Verilog-2005 规范还将类型为 reg 的元素的一维数组称为内存。 这对于建模存储器元件(如只读存储器 (ROM) 和随机存取存储器 (RAM))很有用。 对象名称之后声明的维度称为 数组 维度。 数组保存固定数量的等大小的数据元素。 各个元素通过使用连续整数范围的索引进行访问。 有些数组允许使用任何数据类型的非连续值来访问各个元素。 数组可以分为固定大小的数组,也称为静态数组,其大小一旦声明就无法更改,或者可以调整大小的动态数组。 Verilog 只有一种数组类型。 Verilog 数组可以是 packed 或 unpacked。 Packed 数组是指在类型之后和数据标识符名称之前声明的维度。 Unpacked 数组是指在数据标识符名称之后声明的维度。 Packed 或 Fixed Arrays在 Verilog 中,术语 packed 数组是指在对象名称之前声明的维度。 一维 packed 数组也称为向量。 Packed 数组将一个向量划分为子字段,这些子字段可以作为数组元素访问。 Packed 数组保证在仿真和综合中表示为一组连续的位。 Packed 数组只能由单比特数据类型 bit、logic、reg、枚举类型以及其他 packed 数组和 packed 结构组成。 这也意味着我们不能有具有预定义宽度的整数类型的 packed 数组。 Packed 数组的最大大小可能受到限制,但至少应为 65536 (216) 位。 Packed 数组保证表示为一组 连续 的位。 Unpacked Arrays在 Verilog 中,术语 unpacked 数组用于指在对象名称之后声明的维度。 Unpacked 数组可以由任何数据类型组成。 每个固定大小的维度由地址范围表示,例如 [0:1023]。 或者是一个正数来指定固定大小的 unpacked 数组的大小,例如 [1024]。 符号 size 等效于 [0:size-1]。 Unpacked 数组可能不表示为一组 连续 的位。 Multi-dimensional Arrays可以使用 packed 和 unpacked 维度声明多维数组。 创建多维 packed 数组类似于将连续向量分割成多个维度。 当数组具有可以逻辑分组的多个维度时,使用 typedef 分阶段定义多维数组以增强可读性会很有用。 Verilog 数组索引和切片Verilog 数组一次只能访问一个元素。 在 Verilog 数组中,我们还可以选择数组的一个或多个连续元素。 这称为 slice。 数组切片只能应用于一个维度; 其他维度必须在表达式中具有单个索引值。 Verilog 数组操作Verilog 数组支持比传统 Verilog 对应项更多的操作。
访问 Verilog 数组切片的范围时,我们可以通过使用 [start+: increment width] 和 [start-: decrement width] 符号来指定可变切片。 当选择可变切片时,它们比需要计算确切的开始和结束索引更简单。 增量或减量宽度必须是常量。
Verilog 数组支持更多操作。 以下操作可以在 packed 和 unpacked 数组上执行。
可以一次分配 Verilog packed 数组,例如多位向量、单个元素或切片等等。
Verilog unpacked 数组的所有或多个元素可以分配给值列表。 该列表可以包含各个数组元素的值,或者整个数组的默认值。 下一个主题Verilog 端口 |
我们请求您订阅我们的新闻通讯以获取最新更新。