You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog不同索引顺序等长非打包数组赋值行为咨询

SystemVerilog反向索引非打包数组赋值行为解答

现有两个长度相同、索引顺序相反的int型非打包数组定义:

int  a [10:1];
int  b [1:10];

执行连续赋值操作:

assign b = a;

针对三个选项的判断如下:

  • 选项1错误:两个数组均为一维int非打包数组,长度均为10,类型和维度完全匹配,赋值操作合法。
  • 选项2错误:该行为是部分工具未严格遵循标准的实现结果,不属于规范定义的正确行为。
  • 选项3正确:符合IEEE 1800 SystemVerilog标准的定义。

标准依据

根据IEEE 1800规范,非打包数组赋值时按**序数位置(ordinal position)**匹配元素,而非直接匹配索引数值:

数组声明的范围[left:right]中,左边界对应第0个序数位置,向右依次递增,右边界对应最后一个序数位置。非打包数组赋值时,相同序数位置的元素一一对应赋值。

对应到示例中的数组:

  • a[10:1]的序数位置0对应a[10],位置9对应a[1]
  • b[1:10]的序数位置0对应b[1],位置9对应b[10]
    最终赋值结果为b[1]=a[10]、b[2]=a[9]……b[10]=a[1],即镜像索引赋值。

商用工具出现结果差异,是因为部分早期工具的实现未严格遵循标准规范,采用了索引值直接匹配的逻辑,不属于标准要求的正确行为。


内容的提问来源于stack exchange,提问作者Fischreiher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:54:01