【发布时间】:2016-08-18 02:44:24
【问题描述】:
我无法理解为什么我的代码有闩锁
logic [1:0] lru_list [0:3];
always_comb begin
if(reset) begin
lru_list[0] = 0;
lru_list[1] = 0;
lru_list[2] = 0;
lru_list[3] = 0;
end
else begin
case({access, update, access_index_i < 4})
3'b101: begin
lru_list[0] = lru_list[0] + 1;
lru_list[1] = lru_list[1] + 1;
lru_list[2] = lru_list[2] + 1;
lru_list[3] = lru_list[3] + 1;
lru_list[access_index_i] = 0;
end
3'b011: begin
lru_list[0] = lru_list[0];
lru_list[1] = lru_list[1];
lru_list[2] = lru_list[2];
lru_list[3] = lru_list[3];
lru_list[access_index_i] = 0;
end
default: begin
lru_list[0] = lru_list[0];
lru_list[1] = lru_list[1];
lru_list[2] = lru_list[2];
lru_list[3] = lru_list[3];
end
endcase
end
end // always_comb
在 case 语句中,我有一个默认情况,它将捕获所有不匹配的值。我还为数组中的每个索引设置了一个值。我不明白我在哪里隐式地将我的数组设置为隐式值。
我认为这可能与 lru_list[access_index_i] = 0; 有关,但将这两行注释掉仍然会给我保存错误。
【问题讨论】:
标签: arrays switch-statement verilog system-verilog hdl