System verilog 有没有办法改变数组中单元格的范围?
给定一个矩阵System verilog 有没有办法改变数组中单元格的范围?,system-verilog,System Verilog,给定一个矩阵 logic [0:3] [0:3] matrix = {4'b 1111, 4'b 1111, 4'b 1111, 4'b 1111 } 在运行时,我将输入(x,y)作为索引。 我希望达到索引(x,y+1),(x,y),(x,y-1)并更改它们 例如,如果我得到(x,y)=(1,2),那么我会得到 {4'b 1111, 4'b 1011, 4'b 1011, 4'b 1011 } 我试着
logic [0:3] [0:3] matrix =
{4'b 1111,
4'b 1111,
4'b 1111,
4'b 1111
}
在运行时,我将输入(x,y)作为索引。
我希望达到索引(x,y+1),(x,y),(x,y-1)并更改它们
例如,如果我得到(x,y)=(1,2),那么我会得到
{4'b 1111,
4'b 1011,
4'b 1011,
4'b 1011
}
我试着在一个总是不停的街区里做:
always_ff@(posedge clk or negedge resetN)
begin
matrix[y-1:y+1][x] <= 0;
end
始终\u ff@(posedge clk或NEGDEDGE resetN)
开始
矩阵[y-1:y+1][x]您要求的范围在SystemVerilog中称为切片或部分选择。您尝试执行的操作有两个问题
只能对选定对象的最后一个维度进行切片。换句话说,select必须表示一组连续的位。你正试图做相反的事情
选择必须具有恒定的宽度。假设您解决了第一个问题,您必须执行类似于[y-1+:3]
的操作。看
但是,只使用for
循环可能更好
always_ff@(posedge clk)
for(yy=y-1;yy<y+2;y++) matrix[yy][x] <= 0;
始终\u ff@(posedge clk)
对于(yy=y-1;yy