Indexing Verilog:在LHS上索引信号的替代方法
我正在使用Xilinx,它使用XST来综合我的设计。当我编写类似于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
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]我这样定义了CsigHolderreg-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