System Verilog视频学习笔记(5)- Concurrency
来源:互联网 发布:mac os x10.10.5迅雷 编辑:程序博客网 时间:2024/06/15 02:17
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并发执行
线程和子线程
3、Join选项
图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的用法,
- System Verilog视频学习笔记(5)- Concurrency
- System Verilog视频学习笔记(1)- Device Under Test
- System Verilog视频学习笔记(2)- Testbench
- System Verilog视频学习笔记(3)- Language Basic
- System Verilog视频学习笔记(6)- OOP-Encapsulation
- System Verilog视频学习笔记(7)- OOP-Virtual Interface
- System Verilog视频学习笔记(8)- Randomization
- System Verilog视频学习笔记(9)- Inheritance
- System Verilog视频学习笔记(10)- Inter-Thread Communication
- System Verilog视频学习笔记(11)- Functional converage
- System Verilog视频学习笔记(12)- VMM预览
- System Verilog视频学习笔记(4)- Stimulus driven and received
- system verilog MATLAB学习笔记
- system verilog学习笔记--time slot division
- system verilog学习笔记assertion & debug
- system verilog学习笔记---coding style
- system verilog学习笔记---intersting Q&A
- verilog学习笔记(一)
- 计算几何基础NYOJ——67三角形面积
- jsp本地打开
- 简易计算器---JAVA
- yiishizhan
- 5、Set数据类型
- System Verilog视频学习笔记(5)- Concurrency
- atom安装markdown-preview-enhanced和markdown-pdf插件
- 继续聊WPF——如何获取ListView中选中的项
- VS自带程序打包部署发布
- ButterKnife 8.0.1 @BindView 失败,nullpointerexception
- Windows使用Xshell访问虚拟机的Ubuntu
- 数据传输的常用格式JSON
- python抽象
- 继续聊WPF——设置网格控件列标题的样式