Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 有没有办法改变数组中单元格的范围?_System Verilog - Fatal编程技术网

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