验证基础技巧记录(四)

1.fork的一些特性:

(1)fork-join_none的特性会使得fork认为这个进程已经执行过,所以嵌套并不能约束等其的完成;

module fork_test1;

    int agent [5];

    initial begin
        $display("test start");
        fork    
            foreach(agent[i]) fork
                automatic int j = i;
                automatic int k = $urandom_range(5,10); 
                begin
                    #(k);
                    $display("@%0t thread[%0d] finish",$time,j);
                end
            join_none
        join
        $display("test end");
    end

endmodule
test start
test end
@5 thread[2] finish
@7 thread[4] finish
@8 thread[3] finish
@9 thread[0] finish
@10 thread[1] finish

2.fork的调度问题,并发线程需要使用automatic来储值,假若存在并发循环,则用于计数的变量需要并发通过循环定义并重新赋值,在循环中使用重新赋值后的变量完成事务;

posted @ 2025-07-07 17:50  NoNounknow  阅读(11)  评论(0)    收藏  举报