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

SystemVerilog scheduler

文章目录

  • 简介
  • 调度器
    • simulation region
      • Preponed region
      • Active region
      • Inactive region
      • NBA(Non-blocking Assignment Events region)
      • Observed region
      • Reactive region
      • Re-Inactive Events region
      • Re-NBA Region
      • Postponed Region
    • PLI region:
      • Pre-active region
      • Pre-NBA region
      • Post-NBA region
      • Post-observed region
  • 参考

简介

verilog 作为一种 HDL (Hardware Description Language) 用来描述电子硬件的结构,SystemVerilog 是在 verilog 基础上扩展而来的,它不仅可以用来描述电子硬件,新增的扩展主要用于 verification,称为 HVL(Hardware Verification Language)。 我们知道硬件和普通程序的最大的区别:硬件是完全并行的,而程序本质上是串行的,所以 Verilog 和 SystemVerilog 仿真本质上是用串行的程序来描述硬件的并行行为。

调度器

为了解决串行模拟并行的问题,SystemVerilog 引入了 event 调度以及根据时间片划分成多个 region 的方式调度,下面主要就是看这两个概念怎么解决并行问题的。

SV 的事件是离散的模型。在设计中所有语言都有左值和右值两个元素,每次右值的变化都会引起左值的变化,每次左值和右值的变化都被视为更新事件,所有对这些事件敏感的表达式都会被考虑进行评估,称为评估事件。

表达式的通常包括:initial, always, always_comb, always_latch, and always_ff procedural blocks, continuous assignments(assign), procedural assignment statements.
verilog 中主要就是有两种赋值方法,Continuous assignment(连续赋值)适用于 net 类型,Procedural assignment(过程赋值)使用于variable 类型;其中过程赋值中有两种,阻塞赋值和非阻塞赋值。另外主要的就是 task 和 function,里面也是用这两种赋值。

systemverilog 中新增了 program, assertion,clocking 会影响调度器,其他的 package,class,interface,constraint 等并不会影响调度器,暂且不提。

// procedural blockinitial, always, always_comb, always_latch, always_ff, final, task, function// block 里面可以使用 block 和 non-blocking 赋值[ delay ] register_name = [ delay ] expression;     // blocking[ delay ] register_name <= [ delay ] expression;    // non-blocking//还可以使用if、case跳转, forever、 repeat、for等循环
// continuous assignmentswire out;   wire in1, in2;assign out = in1 & in2;

对于事件的定义在原来延时和始终变化上新增了event

  1. 延时 ,例如 #1 a = b
  2. 等待时钟变化,例如 @(posedge clk)
  3. event,例如 @(b); wait(b.triggered) #10 -> a;

Note:

  1. 术语“仿真时间”用于指仿真器维护的时间值,用于对被仿真的系统描述所需的实际时间进行建模。
  2. 时间片包括每个仿真时间在事件区域中处理的所有仿真活动 SystemVerilog 事件区域 开发新的 SystemVerilog 事件区域是为了支持新的 SystemVerilog 构造,并防止在 RTL 设计和新验证构造之间创建竞争条件 。

systemverilog scheduler region
SystemVerilog 时间片划分为 17 个有序区域:

a) Preponed
b) Pre-Active 
c) Active
d) Inactive
e) Pre-NBA
f) NBA
g) Post-NBA
h) Pre-Observed 
i) Observed
j) Post-Observed 
k) Reactive
l) Re-Inactive 
m) Pre-Re-NBA 
n) Re-NBA
o) Post-Re-NBA
p) Pre-Postponed 
q) Postponed

兼容 SystemVerilog 的模拟器应维护某种形式的数据结构,允许事件随着模拟器时间的推移动态地调度、执行和删除。 数据结构通常作为一组按时间排序的链表来实现,这些链表以明确定义的方式进行划分和细分。第一个划分是按时间划分。 每个事件都有且仅有一个模拟执行时间,在任意时刻执行时间可以是当前时间或未来的某个时间。 所有需要被调度的事件都会创建一个time slot,开始执行这17个region的event。 通过执行和删除当前模拟中的所有事件,当所有时间都被调度完之后移动到下一个 time slot 中。 程序通过类似的方式保证了模拟器永远不会出现模拟时间倒退的现象。

这些 region 可以从不同的角度进行划分:

  1. 根据 active 它把 region 分成了两组 region :active group, reactive group。其中 active region 包括 Active, Inactive, Pre-NBA, NBA, and Post-NBA 。reactive region 包括 Reactive, Re-Inactive, Pre- Re-NBA, Re-NBA, and Post-Re-NBA。

  2. 根据是否在 simulation 中执行划分成 simulation region: Preponed, Active, Inactive, NBA, Observed, Reactive, ReInactive, Re-NBA and Postponed和 PLI region:Preponed, Pre-Active, Pre-NBA, Post-NBA, Pre-Observed, Post-Observed, Pre-Re-NBA, Post-Re-NBA, Pre-Postponed.

下面我们先只看 simulation region 的各个 region 需要完成的工作。

simulation region

Preponed region

主要用于验证环境下,在 assertion 中如果 clocking skew 中指定了输入 #1step 在该 region中进行采样。采样的结果和在上一个 time slot 中 postponed region 中采样的结果应该是相同的。 该 region 的 event 在每个 time slot 中仅执行一次,采样之后正式遍历 time slot 的各个region 调度 event。

Active region

包含了当前 active group 中所有需要评估的事件,事件被处理的顺序不提供任何保证,可以按任何顺序进行调度。

事件包括:

1. 所有的阻塞赋值
2. 非阻塞赋值表达式中右值的评估,它会在NBA中更新左值.
3. 所有的连续赋值.
4. 评估 verilog 的自定义源语UDP的输入和输出(一般用的很少).
5. Execute the $display and $finish commands.

Inactive region

保存所有active region 事件处理完毕后要评估的事件。

如果在 active region 中 执行 #0 a = 1 ,其中显示的使用 #0 延时的 blocking 赋值操作,在 active region 处理时会将该表达式的处理暂时挂起,然后在 inactive 中调度,之后再次从 inactive 到 active 跳转时再次调度处理该表达式。

这种方式在 RTL 中不推荐使用。

NBA(Non-blocking Assignment Events region)

NBA 中处理所有非阻塞赋值的更新事件,其中 Active region 中处理右值的更新,NBA 更新左值。

Observed region

concurrent assertion 的语句事件评估在该 region 中处理,另外 clocking 中 input skew #0 的输入也在这个 region 中进行采样。

Reactive region

它保存了在 reactive group 所有需要被评估的事件,和 active region 中一样并不对事件被处理的顺序做任何保证,可以按任何顺序进行调度。

1. concurrent assertion 的 action 块
2. 在 program block 中的 blocking 赋值
3. 评估所有 program 中 non-blocking赋值的右值,之后会在 Re-NBA region 更新左值
4. program block 中所有的连续赋值
5. 执行了 $exit 或者隐式的 $exit 命令

Re-Inactive Events region

这个 region 类似于 inactive region, 如果在 reactive region 中有使用 #0 赋值,这个表达式在 reactive region 中会被挂起并且在当前time slot 的 re-inactive region 中调度处理,所以这个表达式会在下一次进入 reactive region 中被处理。

Re-NBA Region

和 NBA region 类似,处理 program block 中 non-blocking 赋值的更新。另外 clock 中 output skew #0 的也会在该 region 中更新。

Postponed Region

该区域的主要功能是执行 $strobe 和 $monitor 命令,这些命令将显示当前 time slot 的最终更新值。 该区域还用于收集使用选通采样的项目的功能覆盖范围。

PLI region:

Pre-active region

预活动区域专门用于 PLI 回调控制点,允许用户代码在评估活动区域中的事件之前读取和写入值并创建事件

Pre-NBA region

Pre-NBA 区域专门用于 PLI 回调控制点,允许用户代码在评估 NBA 区域中的事件之前读取和写入值并创建事件

Post-NBA region

Post-NBA 区域专门用于 PLI 回调控制点,允许用户代码在评估 NBA 区域中的事件后读取和写入值并创建事件

Post-observed region

Post-observed 区域专门用于 PLI 回调控制点,允许用户代码在评估属性后读取值(在 Observed 或更早的区域中)。

参考

SystemVerilog 2012 specification Manual, Chapter 4 Schduling semantics

相关文章:

SystemVerilog scheduler

文章目录 简介调度器simulation regionPreponed regionActive regionInactive regionNBA(Non-blocking Assignment Events region)Observed regionReactive regionRe-Inactive Events regionRe-NBA RegionPostponed Region PLI region:Pre-active regionPre-NBA regionPost-NBA…...

Qt 5. QSerialPort串口收发

1. 代码 //ex2.cpp #include "ex2.h" #include "ui_ex2.h" #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo>int static cnt 0;Ex2::Ex2(QWidget *parent): QDialog(parent), ui(new Ui::Ex2) {ui->setupUi…...

什么是Java中的JVMTI(JVM Tool Interface)?

Java中的JNI&#xff08;Java Native Interface&#xff09;和JVMTI&#xff08;JVM Tool Interface&#xff09;都是与Java运行时环境&#xff08;JVM&#xff09;交互的工具&#xff0c;但它们有不同的目的和使用场景。下面我从新手的角度来幽默地解释一下它们的区别和用途。…...

WAF独木难支 RASP与ADR将成应用安全防护2.0时代新宠

曾几何时&#xff0c;黑客攻击大多通过网络层进行&#xff0c;但随着基于网络层的基础安全防护措施趋于严密&#xff0c;防火墙、入侵防御、防病毒等安全软硬件构建起了相对完善的防护体系&#xff0c;想再从网络层钻空子的难度增大。如今&#xff0c;黑客攻击从网络层转入Web为…...

四、Unity中颜色空间

Unity中的设置 通过点击菜单Edit->Project Settings->Player页签->Other Settings下的Rendering部分进行修改&#xff0c;参数Color Space可以选择Gamma或Linear。 当选择Gamma Space时&#xff0c;Unity不会做任何处理。当选择Linear Space时&#xff0c;引擎的渲染…...

Java程序员面试题

Java程序员面试题目 1.Java基础1.1 Java有list&#xff0c;list有很多种&#xff0c;你平时开发喜欢用哪个list&#xff1f;&#xff08;容易&#xff09;1.2 Java的map&#xff0c;你知道有哪几种map&#xff0c;你平时喜欢用哪个&#xff1f;&#xff08;容易&#xff09; 2.…...

【自动化剧本】Role角色

目录 一、Roles模块1.1roles的目录结构1.2roles 内各目录含义解释1.3在一个 playbook 中使用 roles 的步骤 二、使用Role编写LNMP剧本2.1 搭建Nginx角色2.2搭建Mysql角色2.3搭建php角色2.4lnmp剧本 一、Roles模块 roles用于层次性、结构化地组织playbook。roles能够根据层次型结…...

安全文件传输:如何避免数据泄露和黑客攻击

网络安全问题日益严重&#xff0c;导致许多数据被泄露和黑客袭击的事件频发。为了保证文件传输的安全&#xff0c;需要实施一系列安全文件传输策略来防止数据被泄露和黑客袭击。 第一、选择适合的加密方法是非常关键的 加密是一种将明文转换成密文的过程&#xff0c;这样只有授…...

web基础与http

一&#xff0c;dns与域名 网络基于tcp/ip协议进行通信和连接的&#xff0c;其中主机以ip地址做固定的地址标识&#xff0c;用以区分用户和计算机。ip地址是由32位二进制数组成&#xff0c;不方便记忆。为了方便记忆&#xff0c;采用了域名。但是网络通信的唯一标识是ip地址&…...

寒假作业(蓝桥杯2016年省赛C++A组第6题 )

题目&#xff1a; 注&#xff1a;蓝桥杯2016年省赛CA组第6题 请填写表示方案数目的整数。 题解&#xff1a; 由题可知这是一道全排列问题&#xff0c;因此我们可以使用c的next_permutation函数对于1-13的数字进行全排列即可&#xff0c;并每次排列判断是否满足题意。 注意…...

NUMA架构在kubernetes中的应用

numactl使用 numactl 通过将 CPU 划分多个 node 减少 CPU 对总线资源的竞争,一般使用在高配置服务器部署多个 CPU 消耗性服务使用。 numactl使用,numa常用命令,numa命令行使用 #numactl -H available: 2 nodes (0-1) node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 node 0…...

Gogs Git windos服务搭建指南

Gogs Git服务器搭建指南 背景&#xff1a; 近期在Linux 麒麟 v10 系统上开发&#xff1b;为了团队协同编程&#xff1b;选用了Git服务器&#xff1b;之前在windos开始时候使用的visualSVN server; visualSVN server从4.x.x.x开始收费&#xff1b;限制15个开发者用户&#xff…...

leetcode 983. 最低票价

在一个火车旅行很受欢迎的国度&#xff0c;你提前一年计划了一些火车旅行。在接下来的一年里&#xff0c;你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 &#xff1a; 一张 为期一天 的通行证售价为 costs[0] …...

七种遍历Map的方法

七种遍历Map的方法 import java.util.HashMap; import java.util.Iterator; import java.util.Map;public class Wan {public static void main(String[] args) {Map<String,String> dataMap new HashMap<>();dataMap.put("A","Abb");dataMap…...

Android性能优化—内存优化

一、App内存组成以及管理 Android 给每个 App 分配一个 VM &#xff0c;让App运行在 dalvik 上&#xff0c;这样即使 App 崩溃也不会影响到系统。系统给 VM 分配了一定的内存大小&#xff0c; App 可以申请使用的内存大小不能超过此硬性逻辑限制&#xff0c;就算物理内存富余&…...

Python自动计算Excel数据指定范围内的区间最大值

本文介绍基于Python语言&#xff0c;基于Excel表格文件内某一列的数据&#xff0c;计算这一列数据在每一个指定数量的行的范围内&#xff08;例如每一个4行的范围内&#xff09;的区间最大值的方法。 已知我们现有一个.csv格式的Excel表格文件&#xff0c;其中有一列数据&#…...

FTP文件传输协议

FTP文件传输协议 介绍 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中&#xff0c;是一项基本的网络应用&#xff0c;即文件传送文件传输协议(File Transfer Protocol)是因特网上使用得最广泛的文件传输协议 FTP提供交互式访问&#xff0c;允许客户指明文件…...

运维高级--tomcat和jpress

1. 简述静态网页和动态网页的区别。 静态网页&#xff1a;事先创建好的网页&#xff0c;通常通过HTML、CSS和JavaScript等静态文件组成&#xff0c;不需要和服务器进行交互&#xff0c;加载速度快 动态网页&#xff1a;根据用户需求动态生成网页&#xff0c;动态网页通常使用…...

【LeetCode】141. 环形链表 进阶题142. 环形链表 II

141. 环形链表 这道题还是用经典的快慢指针法来做。每次让快的指针走两步&#xff0c;慢的走一步。如果有环&#xff0c;则绝对会在环内的某一节点相遇。思想跟物理知识有点关系&#xff0c;如果有环&#xff0c;则在相对运动过程中&#xff0c;可以相当于慢指针静止&#xff0…...

MySQL索引1——基本概念与索引结构(B树、R树、Hash等)

目录 索引(INDEX)基本概念 索引结构分类 BTree树索引结构 Hash索引结构 Full-Text索引 R-Tree索引 索引(INDEX)基本概念 什么是索引 索引是帮助MySQL高效获取数据的有序数据结构 为数据库表中的某些列创建索引&#xff0c;就是对数据库表中某些列的值通过不同的数据结…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...