1

我正在尝试使用输入作为索引访问数组中的元素,但我不断收到此错误:

cache.v:27:错误:数组“tagc”索引在此上下文中必须是常量。

这是我正在尝试的方法:

assign tagc[index] = tag;

tagc 是 1024 个 reg 的数组;index 是 10 位输入;tag 是一个 20 位的输入。

有没有办法做到这一点?

4

2 回答 2

1

两种可能:

  1. 您正在尝试分配 tagc 的索引位置以反映 tag 的值,在这种情况下,您需要 index 是一个常量(参数、localparam 或`define)。

  2. 您使用 tagc 作为内存,将 tag 的值存储在由动态变量“index”索引的位置。在这种情况下,您需要在决定什么事件应该触发 tagc 更新之后,在 always 块中进行分配。

于 2016-07-01T00:07:05.143 回答
0

通常使用动态索引的数组分配是在时钟程序块中完成的。

always @(posedge clk) begin
  tagc[index] <= tag;
end

也可以通过闭锁来完成。使用启用信号并确保index启用时不会更改。

always @* begin
  if (enable) begin
    tagc[index] <= tag;
  end
end

或另一个闩锁选项:

integer i;
always @* begin
  for(i=0; i<PARAM_SIZE_OF_TAG; i=i+1)
    if (index==i) tagc[i] <= tag;
  end
end

仅供参考:tagc必须定义reg为非wire类型

于 2016-07-01T00:11:42.413 回答