Indexing Verilog:在LHS上索引信号的替代方法

Indexing Verilog:在LHS上索引信号的替代方法,indexing,verilog,xilinx,hdl,xilinx-ise,Indexing,Verilog,Xilinx,Hdl,Xilinx Ise,我正在使用Xilinx,它使用XST来综合我的设计。当我编写类似于someReg[offest*index+:constant]的东西时,我遇到了麻烦。如果XST不支持部分选择(+:/-:),并且您无法升级到IEEE Std 1364-2001中的某个内容,那么您将需要使用1995年的方法;位分配: for(bit_idx = 0; bit_idx < WIDTH*COL_A; bit_idx=bit_idx+1) begin currentRowA[idx] <= AsigHo

我正在使用Xilinx,它使用XST来综合我的设计。当我编写类似于
someReg[offest*index+:constant]的东西时,我遇到了麻烦。如果XST不支持部分选择(
+:
/
-:
),并且您无法升级到IEEE Std 1364-2001中的某个内容,那么您将需要使用1995年的方法;位分配:

for(bit_idx = 0; bit_idx < WIDTH*COL_A; bit_idx=bit_idx+1) begin
  currentRowA[idx] <= AsigHolder[WIDTH*COL_A*idxA + bit_idx];
end

注意:通过修复索引分配,零件选择(
+:
/
-:
)可能会工作,因为设计无法达到超出范围的索引。

感谢您注意,
idxA
idxB
可能超出范围。XST只在这一行上抱怨
CsigHolder[WIDTH*(idxA*行A+idxB)+:WIDTH]我这样定义了CsigHolder
reg-signed[WIDTH-1:0]CsigHolder[0:ROW_A*列B-1]。当我尝试使用下面的assign语句将导线
C
连接到
CsigHolder
时,XST给出了一个错误
assign C=CsigHolder。如何将
C
连接到
CsigHolder
for(bit_idx = 0; bit_idx < WIDTH*COL_A; bit_idx=bit_idx+1) begin
  currentRowA[idx] <= AsigHolder[WIDTH*COL_A*idxA + bit_idx];
end
reg signed [WIDTH*COL_A-1:0] AsigHolder [0:ROW_A-1];
...

always @(posedge clk) begin     // assume we have the transpose of matrix B
  currentRowA <= AsigHolder[idxA];
if (idxB < ROW_B-1) begin
  idxB <= idxB + 1;
end
else begin
  idxB <= 0;
  if (idxA < ROW_A-1) begin
    idxA <= idxA + 1;
  end
  else begin
    idxA <= 0;
  end
end