SV-线程控制

        在类里边用,在软件世界里,验证环境里只能。fork join来创建并行的线程。

        fork的差别就在于结尾处。

         上面的线程要等20ns,下面的线程是要等eventA触发了以后。fork join是线程同时结束才能退出。;fork join_any是最短时间线程完成就会退出(后台线程还会继续执行)。join_none不需要等待。

`timescale 1ns/1ps
module tb;
    task automatic exec(int id, int t);
        $display("@%t exec[%0d] entered", $time, id);
        #(t*1ns);
        $display("@%t exec[%0d] entered", $time, id");
endtask

initial begin
    exec(1, 10);
end

initial begin
    exec(2, 20);
end

initial begin
    exec(3, 30);
end

initial begin
    exec(4, 40);
end
endmodule


module tb2;
    task automatic exec(int id, int t);
        $display("@%t exec[%0d] entered", $time, id);
        #(t*1ns);
        $display("@%t exec[%0d] exited", $time, id");
    endtask

    initial begin
        $display("@%t fork-join_any entered", $time);  
        fork
            exec(1, 10);
            exec(2, 20);
        join_any
        $display("@%t fork-join_any exited", $time);  
        $display("@%t fork-join_any entered", $time);  
        fork
            exec(3, 30);
            exec(4, 40);
        join_none
        $display("@%t fork-join_none exited", $time);  
        wait fork;
        $display("@%t ini_proc1 exited", $time); 
    end

    initial begin
        #200ns;
    end
endmodule

        可用wait fork或者disable fork来停止或等待(当前begin-end下所有的fork)子程序全部完成。

         wait fork是包含begin end里边所有fork;disable会把所有没有执行完的失能掉。

        class中使用时序控制,应该放在task里。等一些特定的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值