我有一个大小为2400的数组。我希望能够根据确定该位索引的组合逻辑更新此数组中的某个位。
由于已经为数组分配了一个初始值,因此直接访问该位会给我带来多个驱动程序错误,并且在尝试实现状态机之后,我发现它几乎不可能,因为它需要整个数组的先前值。即:不能用变量分配范围。
| ID | B |
|----|----|
| 1 | 22 |
| 3 | 34 |
任何帮助都会很棒!
注意:我相当确定我可以通过某种类型的状态机完成此操作,因为我正在分配原始值,但我无法弄明白。是否可以优先分配值?
减去问题是因为数字太大了。
答案 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] = ...
会详细说明,但如果没有,你可以遍历所有索引,直到找到其他评论者提出的匹配为止。