我有一个名为List<T>
的模块,它具有用于输入和输出的2D解包数组。我想将每列输入和输出传递给模块module2
。我试着用以下方式编写代码。但它在module1
中显示语法错误
通过模块传递一片数组的正确语法是什么?
.xin(xin[0:7][i])
答案 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]})