Systemverilog中processes的记录

这篇具有很好参考价值的文章主要介绍了Systemverilog中processes的记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Processes general:

  • Structured procedures
    • (initial procedures, always procedures, final procedures, task, function)
  • Block statements
    • (begin-end sequential blocks, fork-join parallel blocks)
  • Timing control
    • (delays, events, waits, intra-assignment)
  • Process threads and process control

1. always_combalways @*的区别

  • always_comb在time zero时会自动执行一次,但always@*只会在敏感列表变化时执行
  • always_comb对function内部的内容也是敏感的,但是always@*只对function的参数敏感
  • always_comb内部左手边的变量不能在其他processes中再进行赋值的,然而always@*允许多个processes对同一个变量赋值
  • always_comb内的statements不能包含blocking timing、event controls或fork_join语句

2. block names的用处

Sequential block(begin…end)和parallel block(fork…)都可以加上block name,命名块的用处有:

  • 允许local variables、parameter和命名event可以通过hierarchiy引用;
  • 允许block可以在statements语句里引用,例如使用disable statement。

3. procedural timing controls

仿真时间的推进可以用以下三种方法之一:

  • Delay control:#
  • Event control:@
  • Wait statement,它像是event control和while loop的结合。

4. event trigger

Procedural statement的执行可以和net/variable的值改变或declared event的出现俩同步,前者也称为detecting an implicit event。Implicit event可以指定方向:posedge/negedge/edge,edge=posedge+negedge

Systemverilog中processes的记录

Implicit event也可以用于探测expression的值改变,edge event是探测expression中LSB的变化,但表达式的任何操作数的值的变化而不改变表达式的结果将不会被检测为event。

5. intr-assigment timing control

Systemverilog中processes的记录

6. process execution threads

如下情况,sv会创建执行线程:

— Each initial procedure

— Each final procedure

— Each always, always_comb, always_latch, and always_ff procedure

— Each parallel statement in a fork-join (or join_any or join_none) statement group

— Each dynamic process

对于continuous assignment也可以考虑为自己的thread。

7. wait fork/disable/disable fork

wait fork会等待当前process创建的child subprocesses都结束后,才会继续执行,不包含这些子进程自己又创建的子进程。

disable会停止一个命名块或task中的所有activity,不管parent-child关系,子process可以停止parent process,其它process也可以停止unrelated process

disable fork会停止process的执行,但会考虑parent-child关系。它也是会停止所有的active subprocesses,包括衍生的子进程。

8. fine-grain process control

process是一个build-in的class,一旦启动后,它允许其它process去访问和控制。user可以定义process type变量,然后将process object赋值过去。Process class的原型如下:

Systemverilog中processes的记录

当衍生出process时,process type的object会在内部创建。user不能创建process type的object,如果尝试用new去创建一个新的new process,那么会导致error产生。并且process class不能被extended,尝试去extend会导致compilation error。

self()函数可以用于返回当前process的handle,也就是说用该handle可以调用该process。

status()函数可以用于返回process status,有以下state枚举类型:

Systemverilog中processes的记录

kill()函数会终止给定process和它衍生的子processes,这些subprocesses是在被killed process中使用fork语句创建的。

await() task允许一个process等待另一个process完成,process自身不能自己调用await。

suspend()函数允许一个process暂停自己的执行或其他process的执行。

resume()函数会重启之前suspended process。

kill(), await(), suspend()和resume()只能由initial procedure/always procedure/fork block from one of those procedures创建的process使用。

Systemverilog中processes的记录

 文章来源地址https://www.toymoban.com/news/detail-408116.html

到了这里,关于Systemverilog中processes的记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Systemverilog里data type的记录

    1. 区别 data type 和 data object 我的理解data type是类似于class type,然后data object是类似于class object,相当于一个entity。所以data type可以用于声明data object。每一个data object是一个命名的entity,它带有一个data value和data type。比如: int是一个data type; int a=1; //a就是一个data object; 2.

    2023年04月09日
    浏览(29)
  • 【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx +解决方式+自我尝试+记录】

    第一篇:使用linuxdeployqt软件生成 第二篇:桌面文件.desktop,文件编写与软件图标 第三篇:打包生成安装的包(.deb) 记得之前 学会了使用linuxdeployqt软件生成,打包,已经安装等各种细节,使用一个“test demo” 工程样例,来实现以及说明相关操作流程。但是后在使用的时候,

    2024年04月15日
    浏览(86)
  • Structured Concurrency:结构化并发

    https://ericniebler.com/2020/11/08/structured-concurrency/ 是什么:一种确保子操作在父操作之前完成的方式,类似函数在调用函数之前完成。 最典型的结构化并发:C++20的协程 意义:它通过使异步生存期与普通C++词法作用域相对应,为异步程序带来了现代C++风格,并且不需要引用计数(

    2024年02月05日
    浏览(58)
  • Spark Structured Streaming使用教程

    Structured Streaming是一个基于Spark SQL引擎的可扩展和容错流处理引擎,Spark SQL引擎将负责增量和连续地运行它,并在流数据继续到达时更新最终结果。 Structured Streaming把持续不断的流式数据当做一个不断追加的表,这使得新的流处理模型与批处理模型非常相似。您将把流计算表

    2024年02月03日
    浏览(56)
  • 结构化流(Structured Streaming)

    有界数据: 无界数据: 结构化流是构建在Spark SQL处理引擎之上的一个流式的处理引擎,主要是针对无界数据的处理操作。对于结构化流同样也支持多种语言操作的API:比如 Python Java Scala SQL … Spark的核心是RDD。RDD出现主要的目的就是提供更加高效的离线的迭代计算操作,RDD是针

    2024年01月17日
    浏览(57)
  • Structured_Streaming和Kafka整合

    默认情况下,Spark的结构化流支持多种输出方案: File Sink foreach sink 允许对输出的数据进行任意的处理操作,具体如何处理由用户自定义函数决定。对输出的数据一个个进行处理操作。 使用方式主要有二种 方式一: 方式二:这种方式的适用场景是需要和资源打交道的情况(

    2024年01月19日
    浏览(61)
  • 【Spark编程基础】第7章 Structured Streaming

    7.1.1 基本概念 Structured Streaming的关键思想是将实时数据流视为一张正在不断添加数据的表 可以把流计算等同于在一个静态表上的批处理查询,Spark会在不断添加数据的无界输入表上运行计算,并进行增量查询 在无界表上对输入的查询将生成结果表,系统每隔一定的周期会触发

    2024年02月08日
    浏览(57)
  • Spark编程实验五:Spark Structured Streaming编程

    目录 一、目的与要求 二、实验内容 三、实验步骤 1、Syslog介绍 2、通过Socket传送Syslog到Spark 3、Syslog日志拆分为DateFrame 4、对Syslog进行查询 四、结果分析与实验体会 1、通过实验掌握Structured Streaming的基本编程方法; 2、掌握日志分析的常规操作,包括拆分日志方法和分析场景

    2024年02月20日
    浏览(39)
  • LSM(Log-Structured Merge Tree)

    LSM Tree 全称 日志结构合并树 ( Log-Structured Merge Tree )。对于存储介质为 磁盘 或 固态盘 的数据库,长期以来主流使用 B+树 这种索引结构来实现快速数据查找。当数据量不太大时,B+树读写性能表现非常好。但是在海量数据情况下,B+树越来越高,由于B+树更新和删除数据时需

    2024年02月13日
    浏览(40)
  • pyspark之Structured Streaming file文件案例1

    # generate_file.py  # 生成数据 生成500个文件,每个文件1000条数据 # 生成数据格式:eventtime name province action ()时间 用户名 省份 动作) import os  import time import shutil import time FIRST_NAME = [\\\'Zhao\\\', \\\'Qian\\\', \\\'Sun\\\', \\\'Li\\\', \\\'Zhou\\\', \\\'Wu\\\', \\\'Zheng\\\', \\\'Wang\\\'] SECOND_NAME = [\\\'San\\\', \\\'Si\\\', \\\'Wu\\\', \\\'Chen\\\', \\\'Yang\\\', \\\'Min\\\', \\\'Jie\\\', \\\'Qi

    2024年01月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包