В приведенной ниже программе запускаются четыре процесса. Сначала задача ожидает, что последний процесс начнет выполнение, а затем ждет завершения первого процесса. В этот момент родительский процесс принудительно завершает все разветвленные процессы, которые еще не завершены.Почему эти процессы SystemVerilog не заканчиваются?
program automatic test;
initial begin
do_n_ways;
end
task do_n_ways;
process job[1:4];
for(int i=1;i<=4;i++)
fork
automatic int j = i;
job[j] = process::self();
$display("process %d starting...",j);
if(j==2) begin
#100 $display("delay 2ns");
end
join_none
for(int j = 1;j<=4;j++) begin //wait for all process starting
wait(job[j] != null);
end
job[1].await(); //wait for first process finish
for(int j=1;j<=4;j++) begin
if(job[j].status != process::FINISHED) begin
job[j].kill();
$display("process %d killed...",j);
end
end
endtask
endprogram
Представляется, что процесс # 2 никогда не будет убит, так как я никогда не видел «процесс 2 убит ...» Почему этот процесс продолжает работать?
О, боже мой, извините, я ошибаюсь !!! большое спасибо!!! – crazylk
Привет, я пробую вашу программу, но только отображаю сообщение «delay 2ns», а не сообщение «process 2 killed», и я использую VCS. Вы должны использовать modelsim в www.edaplaygroud.Then я добавляю if (j == 2) .. иначе ..., так что это правильно! HAHA – crazylk