【问题标题】:Is there a way to change range of cells in an array?有没有办法改变数组中单元格的范围?
【发布时间】:2021-05-24 19:15:00
【问题描述】:

给定一个矩阵

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 块中这样做:

always_ff@(posedge clk or negedge resetN)
begin
     matrix[y-1:y+1][x] <= 0;
end

但它说范围必须是最终索引。

谢谢。

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

    您要求的 范围 在 SystemVerilog 中称为 slicepart-select。您正在尝试做的事情有两个问题。

    1. 您只能对选择的最后一个维度进行切片。换句话说,select 必须表示一组连续的位。你正试图做相反的事情。
    2. 选择必须具有恒定的宽度。假设您解决了第一个问题,您将不得不执行[y-1 +:3] 之类的操作。见What is `+:` and `-:`?

    但使用for 循环可能会更好。

    always_ff@(posedge clk)
         for(yy=y-1;yy<y+2;y++) matrix[yy][x] <= 0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 2022-08-02
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多