当前位置: 首页 > news >正文

我的 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.抽象工厂模式

抽象工厂模式 前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、传智播客只培养计算机软件专业的学生等。 这些工厂只生产同种类产品,同种类产品称为同等级产品,也就是说:工厂方法模式…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...