SystemVerilog:需要在非常大的数组中更改2位

时间:2015-12-07 05:36:44

标签: arrays indexing system-verilog

我有一个大小为2400的数组。我希望能够根据确定该位索引的组合逻辑更新此数组中的某个位。

由于已经为数组分配了一个初始值,因此直接访问该位会给我带来多个驱动程序错误,并且在尝试实现状态机之后,我发现它几乎不可能,因为它需要整个数组的先前值。即:不能用变量分配范围。

| ID |  B |
|----|----|
|  1 | 22 |
|  3 | 34 |

任何帮助都会很棒!

注意:我相当确定我可以通过某种类型的状态机完成此操作,因为我正在分配原始值,但我无法弄明白。是否可以优先分配值?

减去问题是因为数字太大了。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是你要找的,但是有一个2400位的数组(向量)。给定一个索引,我们假设您使用组合逻辑推导出,如上所述,该索引处的元素已更新。

我提供了一个适用于可综合RTL的解决方案,因为您使用了组合这个词,我假设您正在尝试将此逻辑合成到硬件中。

logic [2399:0] big_array;
logic [11:0]   index;

always_comb begin
   // combinational logic here
   index = ...
end

always_ff @(posedge clk, posedge reset) begin
   if (reset) begin
      big_array = '0;    // vector fill operation
   end else begin
      big_array[index] = ...;
   end
end

我没有检查上面的代码是否存在语法错误。另外,请注意我使用了一个时钟进程进行数组更新,但是,如果您不打算合成此代码,则可以使用其他一些触发机制。 同样,您可以使用初始语句而不是重置块。

我认为作业big_array[index] = ...会详细说明,但如果没有,你可以遍历所有索引,直到找到其他评论者提出的匹配为止。