在systemverilog中通过模块传递一片二维数组的一维数组

时间:2015-09-16 18:38:47

标签: arrays system-verilog

我有一个名为List<T>的模块,它具有用于输入和输出的2D解包数组。我想将每列输入和输出传递给模块module2。我试着用以下方式编写代码。但它在module1中显示语法错误 通过模块传递一片数组的正确语法是什么?

.xin(xin[0:7][i])

2 个答案:

答案 0 :(得分:0)

SystemVerilog仅允许引用一组相邻位的部分选择(切片)。您将不得不添加一些组合逻辑来改造通过端口传递的数组。

for (genvar i=0;i<=7;i++) begin:block1
 logic signed [n-1:0] _xin[0:7], _xout[0:7];
 always_comb foreach(_xin[j]) __xin[j] = xin[j][i];
 always_comb foreach(_xout[j])  xout[j][i] = _xout[j];
 module1 #(.n(n)) l1(.xin(_xin),.xout(_xout));
end

答案 1 :(得分:0)

@app.route()不是数组索引的合法语法。您可以.xin(xin[0:7][i]).xin(xin[i][0:7])

您可以展开数组以从特定的第二个索引获取所有第一个索引.xin(xin[i])

[0:7]

或者创建另一个阵列进行轮换:

.xin({xin_rotate[0][i],xin_rotate[1][i],xin_rotate[2][i],xin_rotate[3][i],
      xin_rotate[4][i],xin_rotate[5][i],xin_rotate[6][i],xin_rotate[7][i]})