System Verilog视频学习笔记(5)- Concurrency

Concurrency(并发操作)

内容来自启芯-System Verilog视频

============================================================== 

目录结构:

1、仿真器中的Concurrency(并发操作)

2、并发线程产生fork-join

3、Join选项

4、等待子线程结束

5、调试

6、总结

 ==============================================================

本章目标:

掌握并发操作概念和相关语句

 

1、仿真器中的并发操作

图1、并发操作

2、并发线程产生fork-join

并发线程产生关键字fork-join

例子:

int a, b, c;

fork

         statement0;

begin

         statement 1;

         statement 2;

end

join | join_any | join_non

statement 3;

线程statement0和线程statement1/2和线程statement3并发执行

线程和子线程

 

3Join选项

图2、Join选项

fork-join:在statement3执行前所有的子线程必须完成

fork-join_any:fork-join_any内任意一个子线程执行完成,statement3就可执行

fork-join_none:statement3先执行,子线程排队不执行,直到父线程等到wait语句或者完成才执行。

线程执行

执行模式:

(1)Ready:当前将被执行

(2)wait:当执行的线程进入等待状态,将执行下个Ready的线程

图3、线程执行模型

图4、上述程序是否执行?

答案:不能执行

怎样才能执行?需要在for循环中进行时间更新,否则造成程序死锁。

修改如下:

图5、修改后可以执行的程序

图6、上图仿真在0时刻执行退出,why?

send是子线程,父线程initial…begin,在父线程没有执行完毕,父线程没有进行时间更新,子线程#1进入等待状态,等父线程到执行到end后,仿真执行结束,等待的进程没有被执行,怎么进行时间更新?用好automatic参数

 

4、等待子线程结束

wait fork等所有子线程结束

disable fork结束所有子线程

 

5、调试

%m:打印出文件结构

$display():显示调试信息

 

6、总结

本章主要讲并发操作和一些错误,课后掌握好fork-join的用法,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值