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

news/2024/4/13 11:24:28/文章来源:https://blog.csdn.net/ljy77882333/article/details/136538809

线程控制

发生器把激励传给代理时,环境类需要知道发生器什么时候完成任务,以便及时终止测试平台中还在运行的线程,这个过程就需要借助线程间的通信来完成。常用的线程间通信有事件控制、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.luyixian.cn/news_show_997432.aspx

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

相关文章

SpringCloud-数据认证加密总结

一、数据加密认证介绍 在当今分布式系统的日益复杂和信息传递的广泛网络化环境中,确保通信的安全性至关重要。数据的加密和认证作为保障信息传递安全的关键手段,在分布式系统中扮演着不可或缺的角色。Spring Cloud,作为一套构建微服务架构的…

几个市场主流伦敦银交易系统简介

很多人在伦敦银交易中都希望建立一个交易系统,依靠这个系统,我们在市场中能够建立稳定盈利的基础。下面我们就来简单地介绍几个市场主流的伦敦银交易系统。 均线交易系统。这是很多人使用的伦敦银交易系统,一般适用于趋势行情中。均线交易系统…

Java精品项目--第5期基于SpringBoot的高速收费系统的设计分析与实现

项目使用技术栈 SpringBootMavenShiroMySQLMybatis-PlusJavaJDK1.8HTML 系统介绍 项目截图

Docker部署ruoyi前后端分离项目

目录 一. 介绍前后端项目 二. 搭建局域网 2.1 创建网络 2.2 注意点 三. Redis 3.1 安装 3.2 配置redis.conf文件 3.3 测试 四. 安装MySQL 4.1 安装 4.2 配置my2.cnf文件 4.3 充许远程连接 五. 若依部署后端服务 5.1 数据导入 5.2 使用Dockerfile自定义镜像 5.3 运行…

010-内存泄露

内存泄露 概念引起内存泄漏原因解决排查方案 概念 系统进程不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)。当内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。 引起内存泄漏原因 全局…

突破编程_前端_JS编程实例(网站标题栏TAB组件)

1 开发目标 实现如下网站标题栏 TAB 组件: 在点击"页面2"选项卡后,TAB 组件会切换对应的面板: 2 详细需求 网站标题栏 TAB 组件该组件需根据客户端提供的参数创建,具备动态构建 TAB 区域、选项卡切换及自定义内容…

Redis(5.0)

1、什么是Redis Redis是一种开源的、基于内存、支持持久化的高性能Key-Value的NoSQL数据库,它同时也提供了多种数据结构来满足不同场景下的数据存储需求。 2、安装Redis(Linux) 2.1、去官网(http://www.redis.cn/)下…

腾讯云哪款服务器最便宜划算?2024腾讯云服务器优惠价格表

腾讯云优惠活动2024新春采购节活动上线,云服务器价格已经出来了,云服务器61元一年起,配置和价格基本上和上个月没什么变化,但是新增了8888元代金券和会员续费优惠,腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

图书馆管理系统(2)

接下来实现系统的子菜单,在写一个子模块的时候,其他子模块先屏蔽起来,因为没实现,代码运行就通不过 屏蔽起来写上todo,后面(Ctrl键F)搜索,找todo来实现 先来实现图书管理模块 第一步,先要把图…

缺陷检测:使用PatchCore训练自己的数据集

文章目录 前期准备两种方法 演示运行结果 代码详解见缺陷检测–PatchCore的代码解读 前期准备 必须包含有训练图片(无缺陷图片)、测试图片(缺陷图片)和ground_truth,并且ground_truth必须与对应图片的名称相同。 本文…

MCU中断里使用软延时函数delay_ms(u16 x)问题及实例探讨

原贴有误已删:https://blog.csdn.net/weixin_50007421/article/details/136138221 今天完善如下: 本意:只是想表达“复杂系统中断里当然尽量不用软延时函数,但简单系统只要心中有数逻辑清楚实测无妨就完全可行”。 但后来感觉还…

H264的打包,nal,es,pes,pts,dts,ps,ts

编码层次 视频编码层:预测、变换、量化、熵编码等操作slice层:将视频帧分割成若干个编码单元,包含一定数量的宏块,提高编解码的并行性和容错性。NAL层:提升对网络传输和数据存储的亲和性 视频编码层 基准-Baseline …

火柴排队(逆序对 + 离散化)

505. 火柴排队 原题链接 思路 如下是画图分析的一些过程 在这里贪心的思路是排序,然后两个数组都是从小到大那样对应的话最终的答案可达到最小 而我们只能交换相邻的火柴,故在这里先假设一个简化版本,即A有序,而只需要对B进行…

HTML+CSS+BootStrap游乐园官网

一、技术栈 支持pc、pad、手机访问,页面自适应!! html5cssbootstrapjs 二、项目截图 接受项目定制,站内联系博主!!!

获取别人店铺的所有商品API接口

使用淘宝淘口令接口的步骤通常包括: 注册成为淘宝开放平台的开发者:在淘宝开放平台网站上注册账号并完成认证。 创建应用以获取API密钥:在您的开发者控制台中创建一个应用,并获取用于API调用的密钥,如Client ID和Clie…

机试指南:Ch5:线性数据结构 Ch6:递归与分治

文章目录 第5章 线性数据结构1.向量 vector2.队列 queue(1)队列的特点、应用(2)基本操作(3)例题例题1:约瑟夫问题2 (难度:中等) (4)习题习题1:排队打饭 (难度:中等) 3.栈 stack(1)栈…

【微前端】为什么需要微前端

1 什么是微前端 微前端就是将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。 微前端的核心在于拆,拆完后再合 2. 为什么去使用他 ○ 不同团队间开发同一个应用技术栈不同 ○ 希望每个团队都可以独立开发,独立部署 ○ 项目中…

mitmproxy代理

文章目录 mitmproxy1. 网络代理2. 安装3. Https请求3.1 启动mitmproxy3.2 获取证书3.3 配置代理3.4 运行测试 4. 请求4.1 读取请求4.2 修改请求4.3 拦截请求 5. 响应5.1 读取响应5.2 修改响应 6. 案例:共享账号6.1 登录bilibili获取cookies6.2 在代理请求中设置cook…

【单调栈】Leetcode 739.每日温度

【单调栈】Leetcode 739.每日温度 解法:维护单调栈栈中存的是数组的索引 解法:维护单调栈栈中存的是数组的索引 栈中存的是数组的索引 当新的值比当前栈顶的大,那么就执行出栈-更新result数组-判断当新的值比当前栈顶的大?的循环…

如何学习I2C协议

文章目录 学习I2C协议0 懒人直达1 了解协议开发者2 从恩智浦半导体公司下载官方技术文档3 翻译成中文4 资源下载 学习I2C协议 0 懒人直达 点击直达 1 了解协议开发者 I2C(Inter-Integrated Circuit)协议是由荷兰皇家飞利浦电子公司(现恩智…