0
下面的程序啓動四個進程。該任務首先等待最後一個進程開始執行,然後等待第一個進程終止。此時,父進程強制終止尚未完成的所有分叉進程。爲什麼這些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
嗨,我嘗試你的程序,但只顯示「延遲2ns」,而不是「進程2死亡」的消息,並使用VCS.You應使用modelsim在www.edaplaygroud.Then我添加if(j == 2)..其他......,沒錯!哈哈 – crazylk