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

news2024/10/23 17:38:49

线程控制

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

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

相关文章

LVGL如何创建页面并实现页面的切换

如何绘制一个页面 先搞清楚一个问题,那就是绘制一个页面,是直接创建一个新的屏幕,还是基于默认的屏幕创建一个一个的父类呢? 参考这篇文章 LVGL_多界面切换_lvgl 多页面建立-CSDN博客 可知通常是创建一个新的屏幕,每个…

洛谷P2233 公交车路线

本题题号特殊,相对简单。 题目描述 在长沙城新建的环城公路上一共有 88 个公交站,分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站…

Eclipse调试技巧 条件断点 监视

实验代码 import java.util.Scanner;public class Test {// 判断n是否为质数public static boolean isPrime(int n){if (n < 2)return false;for (int i 2; i < n; i){if (n % i 0)return false;}return true;}public static void main(String[] args){Scanner scanne…

数据中台:企业数字化转型的关键基础设施

文章目录 为何要建设数据中台数据中台建设痛点数据中台学习资料聚焦前沿&#xff0c;方法论体系更新与时俱进&#xff0c;紧跟时代热点深入6大行业&#xff0c;提炼实践精华大咖推荐&#xff0c;数字化转型必备案头书 在数字中国这一国家战略的牵引下&#xff0c;数据要素和数字…

vue el-avatar 使用require提示无法找到图片

报错信息 错误代码 问题分析 vue初始化DOM树时没有挂载数据,导致无法找到模块 解决方案

OA系统看飞书,能把繁杂场景设计的这么流畅,绝对是高手。

OA系统看飞书&#xff0c;能把繁杂场景设计的这么流畅&#xff0c;绝对是高手。 2023-08-18 23:33贝格前端工场 飞书是一款功能强大、操作流畅的企业协作工具&#xff0c;它提供了丰富的功能和灵活的场景设计&#xff0c;使得用户在使用过程中能够更加高效地协作和沟通。 以…

设计模式在芯片验证中的应用——备忘录

1. 前言 软件设计模式定义了一组类和它们之间的关系&#xff0c;它们相互作用用以解决软件开发过程中面临的常见问题。由于验证工程师所做工作的重要部分包括使用面向对象语言(如SystemVerilog)进行编码&#xff0c;因此许多遇到的挑战都适合应用特定的设计模式来解决。将它们…

揭秘CPU可视化:探索计算机心脏的神秘之旅

在数字化飞速发展的今天&#xff0c;中央处理器&#xff08;CPU&#xff09;作为计算机的心脏&#xff0c;其复杂度和重要性不言而喻。 中央处理器&#xff0c;这个小小的芯片&#xff0c;却承载着计算机运行的所有指令和数据处理任务。它的内部构造复杂而精密&#xff0c;每一…

根据标准化开发流程---解析LIN总线脉冲唤醒的测试方法和用例设计思路

前言&#xff1a;本文从标准化开发流程的角度&#xff0c;以LIN总线脉冲唤醒为切入点。从测试工程师的角度来讲测试工作应当如何展开&#xff08;结合我干测试总结出来的测试经验&#xff09;。希望大家都能从中有收获&#xff01;&#xff01;谢谢&#xff01;&#xff01; 1…

吴恩达deeplearning.ai:机器学习项目的完整周期伦理

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 语音识别部署公平、偏见、伦理 这节博客中&#xff0c;我们主要看看构建一个机器学习的完整周期是什么&#xff0c;也就是说&#xff0c;当你想构建一个有价值的机器学习系统时&am…

【conda】实现conda环境迁移的4种方式

文章目录 方案1: 使用conda pack制作压缩包并在目标环境解压使用方案2: 使用package列表文件重新创建conda环境方案3: scp将环境文件夹拷贝到目标主机上方案4: 通过--clone先克隆一个环境再conda pack打包迁移 方案1: 使用conda pack制作压缩包并在目标环境解压使用 适合离线环…

python爬虫(2)

继上节 查看数组维数 可以使用数组的ndim属性 代码示例如下&#xff1a; import numpy as np c np.random.randint(1,9,5) print(c.ndim) 结果如下&#xff1a; 当然这些也可以结合前面的各种用法来使用 1、选取数组元素 &#xff08;1&#xff09;一维数组的元素…

NDK,Jni

使用 NDK&#xff08;Native Development Kit&#xff09;意味着在 Android 应用程序中集成 C/C 代码。通常情况下&#xff0c;Android 应用程序主要使用 Java 或 Kotlin 编写&#xff0c;但有时候需要使用 C/C 来实现一些特定的功能或性能优化。 NDK 提供了一组工具和库&…

onnx模型优化利器onnxoptimizer、onnxsim

ONNX性能优化和调试技巧 - 知乎ONNX模型是一种跨平台、跨框架的模型表示格式,允许用户在不同的深度学习框架之间共享模型和数据,从而加速模型开发和部署。然而,在实际应用中,我们通常需要对ONNX模型进行性能优化和调试,以确保其在不同硬件和…https://zhuanlan.zhihu.com/…

C#,哈夫曼编码(Huffman Code)压缩(Compress )与解压缩(Decompress)算法与源代码

David A. Huffman 1 哈夫曼编码简史&#xff08;Huffman code&#xff09; 1951年&#xff0c;哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试。导师Robert M. Fano给他们的学期报告的题目是&#xff0c;寻找最有效的二进制编码。由于无法证明哪个已有编码是…

和为K的子数组

题目&#xff1a; 使用前缀和的方法可以解决这个问题&#xff0c;因为我们需要找到和为k的连续子数组的个数。通过计算前缀和&#xff0c;我们可以将问题转化为求解两个前缀和之差等于k的情况。 假设数组的前缀和数组为prefixSum&#xff0c;其中prefixSum[i]表示从数组起始位…

JavaWeb-Maven基础

Maven是专门用于管理和构建Java项目的工具&#xff0c;是 Apache 下的一个纯 Java 开发的开源项目&#xff0c;基于项目对象模型&#xff08;POM&#xff09;概念。先来学习一下Maven基础&#xff0c;等后面学完开发框架后再学Maven高级&#xff0c;这次的内容如下 一、概述 …

主题乐园如何让新客变熟客,让游客变“留客”?

群硕跨越时间结识了一位爱讲故事的父亲&#xff0c;他汇集了一群幻想工程师&#xff0c;打算以故事为基础&#xff0c;建造一个梦幻的主题乐园。 这个乐园后来成为全球游客最多、收入最高的乐园之一&#xff0c;不仅在2023财年创下了近90亿&#xff08;美元&#xff09;的营收…

9款世界级垂直领域软件架构师Visio平替作图工具!

1 LucidChart 一个基于HTML5的在线流程图绘制和协作应用平台&#xff0c;用户可以通过它方便快速的实现流程图表的绘制&#xff0c;同时还可以实现与他人进行实时的流程图绘制和修改功能&#xff0c;对需要群组协作功能的团队来说&#xff0c;这点非常方便。 由于LucidChart是…

机器学习-面经(part8、贝叶斯和其他知识点)

机器学习面经其他系列 机器学习面经系列的其他部分如下所示&#xff1a; 机器学习-面经(part1)-初步说明 机器学习-面经(part2)-交叉验证、超参数优化、评价指标等内容 机器学习-面经(part3)-正则化、特征工程面试问题与解答合集机器学习-面经(part4)-决策树共5000字的面试问…