检测作业中压缩维度的形状不匹配

问题描述 投票:0回答:1

系统 verilog 允许信号的多个打包维度。但是,从另一个形状为 3x2 的信号分配形状为 2x3 的信号时,定义的行为是什么?总位数是相同的,但模拟似乎很乐意接受这种分配。

示例:

module test();
   wire [1:0][2:0] x;
   assign x[0][0] = 1;
   assign x[1][2] = 1'dx;
   wire [2:0][1:0] y;
   wire [5:0] z;

   assign y = x;       // <-- Would like an error or lint error to occur
   assign z = x;       // <-- Would like an error or lint error to occur

   wire [2:0][1:0] w;
   assign w = 6'd63;   // <-- Would like an error or lint error to occur

   initial $display("FOOOOO %06b %06b %06b %06b", x, y, z, w);
endmodule

vcs、questa 和 verilator 都运行此代码,不会发出任何警告或错误。它们可以配置为将此检测为错误吗?还有其他可用的 linter 工具吗?

system-verilog
1个回答
0
投票

这是打包数组的定义行为,并且是标准所允许的。如果您想要检查数组大小,可以使用解压数组。

以下是标准的相关部分:

出于赋值的目的,压缩数组被视为向量。任何向量表达式都可以分配给任何压缩数组。目标打包数组的打包数组边界不会影响赋值。如果没有显式转换,打包数组不能直接分配给未打包数组。

© www.soinside.com 2019 - 2024. All rights reserved.