Доброго всем пятничного!
Либо уже устал к концу недели, либо ещё что, но не могу понять в чём дело:
module tb;
logic clk;
initial begin
clk = 0;
forever #10ns clk = !clk;
end;
task process_zone;
input logic [7:0] size;
output logic process_zone_end;
enum {ST_ZONE_IDLE, ST_ZONE, ST_END_ZONE} state_zone;
integer i;
i = 0;
forever @(posedge clk) begin
case (state_zone)
ST_ZONE_IDLE : state_zone <= ST_ZONE;
ST_ZONE : state_zone <= i == size ? ST_END_ZONE : ST_ZONE;
ST_END_ZONE : state_zone <= ST_END_ZONE;
default : state_zone <= ST_ZONE_IDLE;
endcase
i = state_zone == ST_ZONE ? i + 1 : 0;
process_zone_end = state_zone == ST_END_ZONE;
end
endtask : process_zone
logic state_next_zone;
initial #10ns process_zone (8'd5, state_next_zone);
endmodule : tb
state_next_zone остаётся в третьем состоянии, невзирая на process_zone_end:
ЧЯДНТ?
Проект на всякий случай также прилагаю.
test.zip