Поиск
Показаны результаты для тегов 'task'.
-
Кто какие приемы использует для работы с данными общими для нескольких потоков? Хорошо когда это пара переменных. А если несколько структур с десятками значений в каждой ? Самое простое это во всех точках , где происходит запись, чтение или проверка условия, прикрывать эти операции во всех потоках семафорами. Это хорошо, когда таких операций мало. Второй вариант - во всех тасках крутятся свои переменные (структуры) и в одном конкретном месте каждого таска происходит синхронизация, прикрытая семафором. с набором данных выбранным эталонным. Уже лучше, но могут возникнуть сложности с работой вроде бы с одними данными. но имеющими разные значения в разных тасках из- за еще несинхронности.
-
Доброго всем пятничного! Либо уже устал к концу недели, либо ещё что, но не могу понять в чём дело: 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