如何使用变量作为索引访问数组元素?

时间:2016-06-30 22:25:42

标签: arrays reference verilog iverilog

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

  

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

以下是我尝试这样做的方法:

assign tagc[index] = tag;

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

有办法吗?

2 个答案:

答案 0 :(得分:1)

两种可能性:

  1. 您正在尝试分配tagc的索引位置以镜像tag的值,在这种情况下,您需要将index作为常量(parameter,localparam或`define)。

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

答案 1 :(得分: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类型