我正在做一个项目,在追查了一个错误后,我将其范围缩小到它是由一个未正确触发的 Always 块引起的。
module Counter(start,clk_len,done,clk,reset);
input [4:0] clk_len;
input clk,start,reset;
output done;
reg [4:0] cntr_var = 0; reg start_val = 0;
assign done = !start_val;
reg test = 0;
always @(reset){cntr_var,start_val} = 2'b0;
always @(posedge start) begin
start_val = start;
end
always @((done and cntr_var == clk_len)) begin // <=== This is the source of the problem
cntr_var = 0;
start_val = 0;
test = 1;
end
always @(clk and !reset) begin
if (start_val == 1 && cntr_var != clk_len)
cntr_var = cntr_var + 1;
end
endmodule
always 块之一应该在done
AND时触发(cntr_var == clk_len)
。
我尝试同时使用&&
和and
作为逻辑运算符。为什么这不起作用?