我正在尝试使用输入作为索引访问数组中的元素,但我不断收到此错误:
cache.v:27:错误:数组“tagc”索引在此上下文中必须是常量。
这是我正在尝试的方法:
assign tagc[index] = tag;
tagc 是 1024 个 reg 的数组;index 是 10 位输入;tag 是一个 20 位的输入。
有没有办法做到这一点?
两种可能:
您正在尝试分配 tagc 的索引位置以反映 tag 的值,在这种情况下,您需要 index 是一个常量(参数、localparam 或`define)。
您使用 tagc 作为内存,将 tag 的值存储在由动态变量“index”索引的位置。在这种情况下,您需要在决定什么事件应该触发 tagc 更新之后,在 always 块中进行分配。
通常使用动态索引的数组分配是在时钟程序块中完成的。
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
类型