SystemVerilog中的二维切片

问题描述

在SystemVerilog中,我正在尝试执行以下操作:

wire signed [0:95][0:4][0:4][31:0] X;

wire signed [0:31][0:31][31:0] Y;

assign X[0] = Y[0:4][0:4];

assign X[1] = Y[0:4][1:5];

assign X[2] = Y[1:5][0:4];

assign X[3] = Y[1:5][1:5];

...

错误

Error-[SE] Syntax error
  Following verilog source has Syntax error :
  "try.sv",399: token is '[',column 53
                assign X[0] = Y[0:4][0:4];

请帮助

解决方法

SystemVerilog不允许切片表示数组的非连续区域。您必须使用forforeach循环来执行此操作。我不确定您的意图是什么,但这应该可以助您一臂之力。

for(int i=0;i<5;i++)
  for(int j=0;j<5;j++)
     X[0][i][j] = Y[i][j];