【SystemVerilog基础】关于fork/join_none高频考点全面总结(一文全)

1、initial 中的 fork…join_none

先上结论:当program中的initial语句执行到end语句时,仿真就会终止,不管子线程是否有未执行的代码。

program automatic test;

initial begin
  $display("***start time is %0d", $time);  
  
  fork
    begin
      $display("***Driving port 1"
SystemVerilog 和 Verilog 中,`fork...join`、`fork...join_any` 和 `fork...join_none` 是用于控制并行进程执行的重要结构,它们在仿真过程中对任务调度和执行顺序有显著区别。以下是它们的核心区别及使用场景: ### 1. `fork...join` 该结构用于创建一组并行执行的子进程,父进程必须等待所有子进程执行完毕后才能继续执行。这意味着,所有在 `fork...join` 块中的语句会并发运行,但整个块的执行完成依赖于最慢的子进程。 例如: ```systemverilog fork // 子进程1 #10 $display("Process 1"); // 子进程2 #20 $display("Process 2"); join $display("All processes completed"); ``` 在这个例子中,`$display("All processes completed")` 只有在 `Process 1` 和 `Process 2` 都执行完成后才会执行[^1]。 ### 2. `fork...join_any` 与 `fork...join` 不同,`fork...join_any` 允许父进程在任意一个子进程完成之后继续执行。其余未完成的子进程会在后台继续运行,不会阻塞主线程。 例如: ```systemverilog fork // 子进程1 #10 $display("Process 1"); // 子进程2 #20 $display("Process 2"); join_any $display("At least one process completed"); ``` 在这个例子中,`$display("At least one process completed")` 会在 `Process 1` 完成后立即执行,而 `Process 2` 仍在后台运行[^2]。 ### 3. `fork...join_none` `fork...join_none` 是最不具阻塞性的结构。父进程不会等待任何子进程完成,而是立即继续执行后续代码。所有子进程都在后台运行,不阻塞主线程。 例如: ```systemverilog fork // 子进程1 #10 $display("Process 1"); // 子进程2 #20 $display("Process 2"); join_none $display("No wait for any process"); ``` 在这个例子中,`$display("No wait for any process")` 会立即执行,而 `Process 1` 和 `Process 2` 在后台运行。 ### 4. 总结对比 | 结构类型 | 行为描述 | |----------------|------------------------------------------------------------------| | `fork...join` | 父进程等待所有子进程完成后再继续执行 | | `fork...join_any` | 父进程在任意一个子进程完成后继续执行,其余子进程在后台继续运行 | | `fork...join_none` | 父进程不等待子进程,立即继续执行,所有子进程在后台运行 | ### 使用场景 - **`fork...join`**:适用于需要确保所有并行任务都完成后再进行下一步操作的场景,例如测试平台中的同步操作。 - **`fork...join_any`**:适用于需要尽快响应第一个完成任务的情况,例如优先处理最快完成的请求。 - **`fork...join_none`**:适用于完异步的场景,例如启动多个后台任务而不影响主线程的执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MoorePlus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值