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

SystemVerilog: Need to change 2 bits in very large array

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

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

logic [0:2400] big_array;
assign big_array = {ALL BITS ASSIGNED};
//Here is where I want to be able to update
logic [11:0] index;
//INDEX Determined via logic
assign big_array[index] = 1'b0;

任何帮助都会很棒!

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

减法不在题中,因为数字太大了。

我不确定这是否是您要查找的内容,但是有一个 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] = ... 会详细说明,但如果没有,您可以遍历所有索引,直到找到其他评论者建议的匹配项。