Systemverilog:不同顺序的解压缩数组之间的分配(向下与向上)
Systemverilog: assignment between unpacked arrays of different order (downto vs. upto)
假设两个(编辑:解压缩)int 数组被定义为具有不同的索引排序(downto 与 upto)但大小相同,例如
int a [10:1];
int b [1:10];
它们之间的分配,
assign b = a;
- 是非法的,或者
- 导致“相同索引”赋值(b[1]=a[1] ... b[10]=a[10]),或
- 导致“镜像索引”赋值 (b[1]=a[10] ... b[10]=a[1])?
我没能在语言参考手册中找到信息,两个商业工具的行为不同。
这是合法代码,您显示的是 未压缩 数组,而不是 已压缩 数组。无论哪种方式,范围都是从左到右。所以你的选项 3 是正确的行为。请参阅 IEEE 1800-2017 SystemVerilog LRM
中的 6.22.2 等效类型 和 7.6 数组赋值 部分
假设两个(编辑:解压缩)int 数组被定义为具有不同的索引排序(downto 与 upto)但大小相同,例如
int a [10:1];
int b [1:10];
它们之间的分配,
assign b = a;
- 是非法的,或者
- 导致“相同索引”赋值(b[1]=a[1] ... b[10]=a[10]),或
- 导致“镜像索引”赋值 (b[1]=a[10] ... b[10]=a[1])?
我没能在语言参考手册中找到信息,两个商业工具的行为不同。
这是合法代码,您显示的是 未压缩 数组,而不是 已压缩 数组。无论哪种方式,范围都是从左到右。所以你的选项 3 是正确的行为。请参阅 IEEE 1800-2017 SystemVerilog LRM
中的 6.22.2 等效类型 和 7.6 数组赋值 部分