System Verilog学习笔记(十八)——线程控制

线程控制

发生器把激励传给代理时,环境类需要知道发生器什么时候完成任务,以便及时终止测试平台中还在运行的线程,这个过程就需要借助线程间的通信来完成。常用的线程间通信有事件控制、wait语句、SV信箱和旗语等。
Verilog对语句有两种分组方式,begin…and或者fork…join。前者是顺序方式执行,而后者是以并发方式执行的。

并行控制

  • fork…join:需要所有并行的线程都结束以后才会继续执行
  • fork…join_any:会等到任何一个线程结束以后就继续执行,即在调度块内语句,当第一个语句完成后,父线程才继续执行,其他停顿的线程也得以继续
  • fork…join_none:不会等待其子线程而继续执行,即在调度块内其他语句时,父线程继续执行
    线程控制

时序控制

  • SV可以通过延迟控制或者事件来对过程块完成时序控制
  • 延迟控制即通过#来完成
#10 rega=regb;
  • 事件(event)控制即通过@来完成
@r rega=regb;
@(posedge clock) rega=regb;
  • wait语句也可以与事件或者表达式结合来完成
real AOR[];
initial wait (AOR.size()>0);

线程间的通信

  • 测试平台中的所有线程都需要同步并交换数据

事件

事件成为同步对象的句柄,可以传递给子程序。这个特点允许在对象间共享事件,而不用把事件定义成全局的。最常见的方式是把事件传递到一个对象的构造器中。

  • 可以用event来声明一个变量,并且使用->来触发它
  • 也可以使用wait来进行边沿触发避免竞争
  • wait_order可以使得进程保持等待,直到参数列表中的事件按照顺序从左到右依次完成
  • 如果参数列表中的事件被触发但是没有按照要求的顺序,那么会使得等待操作失败

旗语(semaphore)

可以使用旗语实现对同一资源的访问控制。类似于车钥匙,用车钥匙人才可以使用汽车

semaphore sem; //创建一个旗语
  • 使用new方法可以创建一个或单个或多个钥匙的旗语
sem=new(1); //分配一个钥匙
  • 使用get可以获取一个或多个钥匙(阻塞型)
sem.get(1);  //获取总线钥匙
  • 使用put可以返回一个或多个钥匙
sem.put(1); //处理完成时把钥匙返回
  • 如果试图获取一个旗语而不希望不被阻塞,可以使用try_get()函数(非阻塞型),它返回1表示有足够多的钥匙,而返回0表示钥匙不够
  • keyCount指定从旗语获取所需钥匙数,默认值为1
  • 旗语的等待队列是先进先出,即先排队等待旗语的将优先得到钥匙。如果指定数量的钥匙可用,则返回正数并继续执行,如果指定数量的钥匙不足,则该方法返回0

信箱(mailbox)

  • 信箱可以使得进程之间的信息得以交换,数据可以由一个进程写入信箱,再由另外一个进程获得
  • 信箱在创建时可以限制其容量或者不限制
  • 当信箱量写满时,后续再写入的动作会被挂起,直到信箱的数据从中读取,使得信箱有空间以后才可以继续写入
  • 不限制容量的信箱则不会挂起写入信箱的动作
  • 创建信箱:new()
  • 将信息写入信箱:put()
  • 试着写入信箱但不会阻塞:try_put()
  • 获取信息:get()同时会取出数据,peek()不会取出数据
  • 试着从信箱取出数据但不会阻塞:try_get()/try_peek()
  • 获取信箱信息的数目:num()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复试焦点 | 3000+篇档案学研究论文主题解析

数据来源 检索平台来源期刊年份有效数据中国知网档案学通讯档案学研究中国档案浙江档案北京档案档案管理档案与建设2022-20233329篇主题聚类大揭秘 借助CiteSpace的关键词聚类功能,我们根据上述数据集绘出如下图谱网络(图1),其中生成了12个有效聚类,为了让聚类结果更加能…

Numpy 数组转换为 Pandas DataFrame

参考:Convert Numpy Array to Pandas DataFrame Numpy 介绍 Numpy是Python中一个非常强大的科学计算库,它提供了许多高效的数组操作方法。Pandas是另一个重要的数据处理库,它基于Numpy,并提供了更高级别的数据分析和处理工具。在…

SMT贴片加工——品质检验要求

一、元器件贴装工艺品质要求 1.元器件贴装需整齐、正中,无偏移、歪斜 2.贴装的元器件型号规格应正确;元器件应无漏贴、错贴 3.贴片元器件不允许有反贴 4.有极性要求的贴片器件安装需按正确的极性标示安装 二、元器件焊锡工艺要求 1.FPC板面应无影响…

Mybatis-Plus——05,乐观锁(新注解)

乐观锁(新注解) 一、数据库添加一个字段二、实体类添加version注解三、注册乐观锁插件四、测试一下4.1成功的乐观锁4.2失败的乐观锁————————创作不易,笔记不易,如觉不错,请三连,谢谢~~ 乐观锁实现方…

蓝桥杯C++日期统计(暴力模拟)

问题描述: 小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4…

TREC 2023 Deep Learning Track Guidelines

先看看TREC是什么 TREC 是 Text REtrieval Conference(文本检索会议)的缩写。它是一个由美国国家标准技术研究所(NIST)主办的年度会议,旨在推动信息检索领域的研究和发展。TREC 于 1992 年开始举办,是一个…

[LeetCode][8]【学习日记】实现字符串转换整数 (atoi)函数

题目 8. 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一个字…

nginx代理minio客户端

错误方式 在点击桶名查看文件时, 会一直处于loading加载中 worker_processes 1; #设置 Nginx 启动的工作进程数为 1。events {worker_connections 1024; ##设置每个工作进程的最大并发连接数为 1024。 }http {include mime.types; #该文件定义了文件扩展名和 MIME 类型…

WPF中的DataContext

在WPF(Windows Presentation Foundation)中,DataContext是一个非常关键的概念,它是实现数据绑定的基础。DataContext是所有WPF控件都具有的一个依赖属性,它属于System.Windows.FrameworkElement类,这意味着…

PHP页面重定向

需要注意的是,在调用 header 函数进行重定向之前,确保没有输出任何内容,包括空格、换行符等。这行代码通常用于在处理表单提交或其他逻辑后,将用户引导到另一个页面。 一、指定几秒后进行重定向 例:表示1秒后页面重…

47. 全排列 II(力扣LeetCode)

文章目录 47. 全排列 II题目描述回溯算法 47. 全排列 II 题目描述 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]] 示例 2&#xff…

Linux文件描述符剖析

文章目录 文件描述符文件描述符分配规则重定向软硬链接软链接(Symbolic Link):硬链接(Hard Link): 文件描述符 文件描述符(File Descriptor)是一个非负整数,用于标识打开…

Java开发从入门到精通(一):Java的基础语法高阶

Java大数据开发和安全开发 (一)Java的流程控制1.1 分支语句1.1.1 IF分支语句第一种IF语句第二种IF-ELSE语句第三种IF-ELSE IF-ELSE语句if语句使用的几个常见问题 1.1.2 switch分支语句switch分支的执行流程switch分支的导学案例:电子备忘录if、switch的比较&#xf…

从一个问题开始聊聊clickhouse的物化视图

【问题】 今天有A问我一个问题,我明明创建了一个物化视图,源表是有数据的,为什么查询物化视图就没有数据? 创建物化视图的SQL示意如下: CREATE MATERIALIZED VIEW schema1.test_mvon cluster clusterNameTO schema1…

Spring Mybatis Mapper 模糊查询的几种方法

在Spring结合Mybatis进行开发时,实现模糊查询是一个常见需求。在Mybatis中,LIKE查询可以通过多种方式实现,这取决于你的查询参数如何传递给Mybatis的SQL映射器。以下是实现模糊查询的几种常见方法: 1. 在Mapper接口中直接使用#{}…

【物联网应用案例】从0到N,智慧农业的数据价值

智慧农业全方位渗透到农业的每一个环节,云端解决方案更推动了研究人员、农艺师及农民间的密切协作,为研发企业提供了既经济又具扩展性的完美方案。 据IDC预计,到2036年,农场收集的数据量将增加800%以上,这凸显了农业数…

七.AV Foundation 视频播放 - 图片进度条

引言 播放器的功能功能已经十分完善了,接下来我们给它添加一些提升用户体验的功能。当前市面上的主流播放器几乎都有一个非常友善的功能,用户在退拽进度条的时候可以看见进度条所处进度的视频画面,这对于用户来说是一种直观而且便捷的体验。…

LeetCode刷题---二叉树展开为链表

官方题解:LeetCode官方题解 解题思想: 当根节点不为空时,从二叉树根节点开始遍历 判断当前节点是否有左节点,如果不存在左节点,则当前节点向右移一位 如果存在左节点,创建辅助节点指向左节点,判…

【Python】新手入门(9):数值和序列

🐍【Python】新手入门(9):数值和序列 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

百度智能云千帆大模型平台发布会定档3月21日,新模型已悄然上线

百度智能云官微日前宣布,百度智能云千帆产品发布会(AI Cloud Day)将于2024年3月21日在北京举行,届时将揭晓千帆ModelBuilder 和 AppBuilder 的最新产品进展,并发布系列新模型及开发工具组件。 记者在百度智能云官网上发…