我正在尝试使用输入作为索引从数组中访问元素,并且我不断收到此错误:
cache.v:27:错误:数组'tagc'索引在此上下文中必须是常量。
以下是我尝试这样做的方法:
assign tagc[index] = tag;
tagc是1024个regs的数组; index是10位输入; tag是20位输入。
有办法吗?
答案 0 :(得分:1)
两种可能性:
您正在尝试分配tagc的索引位置以镜像tag的值,在这种情况下,您需要将index作为常量(parameter,localparam或`define)。
您使用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
类型