Я работаю над проектом, и после того, как выследил ошибку, я сузил ее до причины, вызванной блоком 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
Один из блоков всегда должен срабатывать при done
AND (cntr_var == clk_len)
.
Я попытался использовать &&
и and
в качестве логического оператора. Почему это не работает?