我的 System Verilog 学习记录(6)

引言
本文简单介绍 SystemVerilog 语言的 线程。
前文链接:
我的 System Verilog 学习记录(1)
我的 System Verilog 学习记录(2)
我的 System Verilog 学习记录(3)
我的 System Verilog 学习记录(4)
我的 System Verilog 学习记录(5)
介绍
SV的线程和进程是啥 ?
线程或进程是作为单独实体执行的任何代码片段。在verilog中,每个 initial 和 always 块都被派生为从零开始并行运行的单独线程。fork join块还创建并行运行的不同线程。
fork-join 不同形式的区别是啥 ?
SV中有不同形式的 fork join :


这在 testbench 中用在哪 ?
验证环境中的组件可能需要同时运行多个任务的能力。例如,一个进程可能等待某件事发生,而另一个进程继续执行其他任务。它们都是通过fork...join作为单独的线程派生的。例如,检查器可以并行派生不同的任务,以捕获和验证来自测试台不同部分的数据。
Verilog 的 fork join 的局限性何在 ?
fork..join 之后的代码只有在fork-Join内派生的所有线程都完成时才会执行。因此,检查器必须等到fork-Join中派生的所有线程都完成后才能继续。
fork join 示例
SystemVerilog 的 fork join 在所有派生进程完成之前会一直等待。

fork join_any 示例
SystemVerilog的 fork join_any 等待一直到任何一个派生进程完成。

fork join_none 示例
SystemVerilog的fork join_none不等待并立即退出块,允许派生进程在后台运行。主线程继续执行在fork join_none块之后的语句。

fork join
SystemVerilog通过 fork join 构造提供对并行或并发线程的支持。可以使用fork和join同时派生多个过程块。fork join有一些变体,允许主线程根据子线程完成的时间继续执行其余语句。
语法

fork join 示例
在下面的示例中,三个线程使用 fork join 进行派生。主线程保持挂起状态,直到由fork派生的所有线程都完成。begin 和 end中的任何代码块都被视为一个单独的线程,在本例中为Thread2。

主线程在开始时派生所有三个线程。线程2是一个过程代码块,只有当它执行Begin和End中的所有语句时才结束。线程2完成需要15 ns,因为它在0ns开始,所以它在15 ns结束,是第一个结束的线程。线程1花费最多的仿真时间完成,需要30 ns,而Thread3提前完成,耗费20 ns。
仿真 log :

嵌套 fork join
fork join 可以嵌套在另一个 fork join 内。
示例1

示例2

fork join_any
如果子线程中的任何一个线程完成,则 fork 和 join_any 将允许主线程继续执行 fork 之后的其他语句。如果启动了五个线程,则只有当五个线程中的任何一个完成执行时,主线程才会恢复执行。一旦主线程恢复操作,其余四个启动的线程将继续在后台运行。
语法

示例

嵌套

fork join_none
fork 和 join_none 将允许主线程继续执行位于 fork 之后的其他语句,而不管分叉线程是否完成。如果启动了五个线程,则主线程将立即恢复执行,而所有五个线程仍在后台运行。
语法

示例

嵌套

为啥需要 automatic 任务 ?
如果没有自动关键字,具有不同字符串标签的同一显示任务将产生相同的显示消息。这是因为多个线程调用同一任务并共享工具仿真内存中的相同变量。为了使不同的线程启动同一任务的不同副本,必须使用 automatic 关键字。

fork join
在上一篇文章中,我们讨论了启动并行线程的不同方法。现在我们将看看如何禁用派生的线程。
所有从 fork join 踢出的活动线程都可以通过调用disable fork来杀死。
为何要禁用fork
先看如下的例子:

对于给定的示例,在仿真开始时会发生以下事情:
1.主线程执行初始块,并找到一个fork join_any块
2.它将并行启动三个线程,并等待其中任何一个线完成
3.线程1首先完成,因为延迟最小
4.此时,就恢复了主线程的执行
即使主线程已经退出fork join_any块,线程2和线程3仍在运行。
fork 禁止时会发生啥 ?
在上例中加入 disable fork:

等待派生(fork)
等待派生允许主进程等待,直到所有派生进程结束。这在主进程必须派生多个线程并在等待所有线程完成之前执行某些功能的情况下很有用。
示例
我们将使用上一篇文章中看到的相同示例,其中3个线程被并行启动,主进程等待其中一个线程完成。在主线程恢复之后,让我们等待所有分支进程完成。

wait fork 会等待所有进程(process)结束吗 ?

仿真log:

答案是肯定的,wait fork 会等待所有的进程结束。
相关文章:
我的 System Verilog 学习记录(6)
引言 本文简单介绍 SystemVerilog 语言的 线程。 前文链接: 我的 System Verilog 学习记录(1) 我的 System Verilog 学习记录(2) 我的 System Verilog 学习记录(3) 我的 System Verilog 学…...
SAP 常见问题大全及问题解决大全
1.A:在公司代码分配折旧表时报错? 在公司代码分配折旧表时报错,提示是“3000 的公司代码分录不完全-参见长文本” 希望各位大侠帮我看看。 3000 的公司代码分录不完全-参见长文本 R: a.你把零进项税的代码分配给这个公司代码就可以了 …...
10.Quartz实现定时打分 热帖排行
1.Spring Quartz(1)简介核心组件scheduler 接口:核心调度工具,所有任务由这一接口调用job:定义任务,重写execute方法JobDetail接口:配置描述Trigger接口:什么时候运行,以什么样的频率运行(2)Spr…...
pandas 读取Excel 批量转换时间戳
一、安装 pip install pandas 如果出报错,不能运行,可以安装 pip install xlrd 二、 代码如下 import pandas as pd import time,datetimefile_path rC:\Users\Administrator\Desktop\携号转网测试\admin_log.xls df pd.read_excel(file_path, sheet_n…...
绕过检测之Executor内存马浅析(内存马系列篇五)
写在前面 前面已经从代码层面讲解了Tomcat的架构,这是内存马系列文章的第五篇,带来的是Tomcat Executor类型的内存马实现。有了前面第四篇中的了解,才能更好的看懂内存马的构造。 前置 什么是Executor Executor是一种可以在Tomcat组件之间…...
《C++模板进阶》
致前行的人: 要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 目录 前言: 1.非类型模板参数 1.1.概念: 1.2.使用注意事项 2.模板特化 2.1函数模板特化 2.2类模板特化 3.模板的分离编译 3.1什么…...
【项目管理】项目进度管理中的逻辑关系
项目的进度管理是项目核心管理之一,通过合理的进度安排,制定出科学可行的分项工期表,并条理清晰的显示出项目进度之间的逻辑关系。 1、目标是计划的灵魂 进度计划必须按照确定的项目总进度要求进行编制,了解项目总目标和整体安…...
ARM的汇编指令集
一、汇编指令 1.1 指令与伪指令 汇编的指令 指令是CPU机器指令的助记符,编译后会得到一串二进制机器码,由CPU执行 汇编的伪指令 伪指令本质上不是指令,它是编译器环境提供用来指导编译过程,编译后伪指令不会生成机器码 伪指令…...
@font-face用法超详细讲解
文章目录font-face是什么font-face基本语法urlTTFOTFEOTWOFFSVGformatfont-face用法示例font字体下载ttf-to-eot 字体转换器https://blog.csdn.net/qq_37417446/article/details/106728725 https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-face font-face是什么 font-…...
[oeasy]python0095_乔布斯求职_雅达利_atari_breakout_打砖块_布什内尔_游戏机_Jobs
编码进化 回忆上次内容 上次 我们回顾了 电子游戏的历史 从 电子游戏鼻祖 双人网球到 视频游戏 PingPong再到 街机游戏 Pong 雅达利 公司 来了 嬉皮士 捣乱?🤔 布什内尔 会如何 应对 呢?🤔 布什内尔 布什内尔 本身就有点 …...
全景极简印度史
转自:印度简史 - 知乎 (zhihu.com)印度是世界上最早出现文明的地区之一,印度河是其文明的发源地。古印度文明的疆域曾包括今印度共和国、巴基斯坦、孟加拉国、阿富汗斯坦南部部分地区和尼泊尔。史前时代200万年前,巴基斯坦北部的希瓦利克遗址…...
《设计模式》模板方法
《设计模式》模板方法 模板方法是一种行为型设计模式,用于定义一个算法的框架,而将一些步骤的实现留给子类来完成。模板方法在基类中定义了一个模板方法,该方法确定了算法的基本结构,然后将一些步骤的实现交给子类去完成。这个模…...
Linux环境内存管理——链表
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows程序员如何学习Linux环境内存管理。由于很多程序在Windows环境下开发好后,还要部署到Linux服务器上去,所以作为Windows程序员有必要学习Linux环境的内存…...
String、StringBuffer、StringBuilder类
String类 由多个字符组成的一串数据,值一旦创建不可改变 private final char value[]; 一旦值改变,就会创建新的对象 String s "abc"; //char[] c {a,b,c}s"def"; // 并不是String的值改变,而是创建了一个新的对象s"gh";s"aaa"…...
在VScode中添加Linux中的Docker容器中的Python解释器
VScode编辑器在安装好Python插件之后会自动选择环境变量中排序最高的那一个解释器作为默认解释器,而想要额外添加新的Python解释器就需要自己设置。 VScode编辑器安装在本地电脑 支持Python的docker安装在远程服务器 第一步,在/usr/local/下新建pytho…...
无法将“django-admin”项识别为cmdlet,函数,脚本文件或可运行程序的名称问题
无法将“django admin”项识别为cmdlet,函数,脚本文件或可运行程序的名称问题 小提示:首先检查一下有没有拼写错误!!!没有的话请继续 我们要知道django装到哪里去了 pip show django 注意:3.0…...
乐友商城学习笔记(十五)
无状态登陆原理 在服务器端保存session 无状态不需要session,把登陆状态保存在cookie中 jwtrsa token:登陆时, jwt oath2 jwt:头信息(jwt) 载荷(用户信息,签发人,签发时…...
目标检测论文阅读:CBNet算法笔记
标题:CBNet: A Composite Backbone Network Architecture for Object Detection 期刊:TIP2022 论文地址:https://ieeexplore.ieee.org/document/9932281/ 官方代码:https://github.com/VDIGPKU/CBNetV2 作者单位:北京大…...
vue前端与Java后端进行跨域交互
1.后端的几种解决方法 1.在Controller上面加上CrossOrigin 2.写一个配置文件并且在Controller层加上注解CORSConfig package com.wolwo.langyage.base.util;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configurat…...
【设计模式】2.抽象工厂模式
抽象工厂模式 前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、传智播客只培养计算机软件专业的学生等。 这些工厂只生产同种类产品,同种类产品称为同等级产品,也就是说:工厂方法模式…...
AnyLogic新手避坑指南:搞懂‘空间逻辑’和‘层’,你的第一个行人仿真模型就成功了一半
AnyLogic行人仿真空间逻辑完全解析:从概念混淆到精准建模 第一次打开AnyLogic的行人仿真模块时,那个充满蓝色网格的3D空间和密密麻麻的参数面板,很容易让人产生一种错觉——这不过是个"高级版流程图工具"。直到亲眼目睹自己精心设计…...
SKNet核心机制解析与PyTorch实战:从Split-Fuse-Select到完整网络构建
1. SKNet核心机制解析:从Split-Fuse-Select到多尺度特征融合 SKNet(Selective Kernel Networks)是CVPR 2019提出的创新性网络结构,它在传统卷积神经网络的基础上引入了动态选择机制。这个机制的核心在于让网络能够自适应地选择不同…...
Hermes 的核心架构 Harness:上下文、工具、权限与执行控制
上一篇写 Hermes-Agent,我们选了一条比较笨但好用的路:跟一条消息走一遍。 从终端里敲下一句话,到 Agent 把最后一个字回到屏幕上,中间其实绕了很长一圈: 消息先被入口收进去,变成内部统一的消息…...
CircuitPython微控制器图形保存实战:从屏幕截图到BMP文件生成
1. 项目概述:为什么我们需要在微控制器上保存图形? 在嵌入式开发领域,尤其是当我们使用像Adafruit PyPortal、PyGamer这类带有彩色显示屏的开发板时,图形界面的调试和内容存档一直是个不大不小的痛点。想象一下,你花了…...
Windows 11 下 flash-attention 高效部署:避坑指南与预编译版本实战
1. 为什么Windows 11需要flash-attention? 在深度学习领域,Transformer模型已经成为自然语言处理、计算机视觉等任务的主流架构。而flash-attention作为优化后的自注意力实现,能够显著提升模型训练和推理效率。对于Windows 11用户而言&#…...
企业内训场景如何利用Taotoken搭建统一的AI应用开发实验环境
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内训场景如何利用Taotoken搭建统一的AI应用开发实验环境 应用场景类,大型企业开展内部AI技术培训时,需…...
如何用UABEA解锁Unity游戏资源:跨平台编辑器的完整指南
如何用UABEA解锁Unity游戏资源:跨平台编辑器的完整指南 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 想要修改游戏角色皮肤、替换背景音乐或探索游戏内部资源吗?UABEA&#x…...
【最新 v2.7.5 版本安装包】OpenClaw 零基础部署秘籍,无需命令零代码一键安装轻松搞定
🚀 OpenClaw 一键安装包|一键部署甩掉复杂环境配置 📌 适配信息 适配系统:Windows10/11 64 位 当前版本:v2.7.5(虾壳云版) ✨ 核心优势 全程可视化操作,不用命令行、不用手动配置…...
Linux只读挂载保护排查方法
Linux只读挂载保护排查方法本文面向具备一定 Linux 基础的技术人员,围绕只读挂载保护展开,重点讨论写入隔离、配置保护和异常诊断。在中级运维和系统管理工作中,这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在一起…...
4.4 Spark SQL数据源 - JSON
Spark SQL JSON数据源实战涵盖:自动Schema推断读取JSON文件、spark.read.json()方法应用、文件格式规范(每行独立JSON)、HDFS文件操作及Spark Shell交互式查询。核心实践包括:从HDFS读取用户与成绩JSON文件创建DataFrame并关联分析…...
