SV中的structured procedure

    1)intial procedure,keyword只有initial;最开始被调用一次;

    2)always procedure,keyword包括always,always_comb,always_latch,always_ff;

        整个仿真时间一直被调用;

    3)final procedure,keyword 只有final;最后被调用一次;

    4)Task;

    5)function;

其他的procedure contexts,包括:coverage point expression,assertion sequence items,action blocks;

always_comb,在time 0一定会被执行,这是与always (*)比较大的一个区别;

always_latch,always_ff,需要用户做额外的检查,保证procedure中的是相应的logic;

final procedure,最好只定义一个,多个之间的顺序是随机的,而且必须是不消耗仿真时间的,只是做一些display信息最好;

SV中的block 声明:1)sequenetial block,begin,,,,end block;

         2)parallel block,fork,,,join/any/none  block;

block中的name声明,可以加在begin或fork之后,并且相应的在end或者join/join_none/join_any之后也添加,组成一组。

      name声明可以对内部的local var创建新的一层hier,也方便disable调用;

block中的label声明,加在begin或fork之前,end之后,组成一组;

      label并不创建新的hier,只是方便指定disable等。

block的start和finish time可以指定为某个延时,或event;

      fork

        @a  begin,,,,end;

        @b  begin,,,,end;

      join

procedure中的timing control

      1)delay control,加#表示,specify block中制定的delay,可以被sdf override掉;

                     组合逻辑,#在表达式之前,建模;

                   时序逻辑,#在等号右侧,建模;

                      tb中的输入激励,可以直接加#;

          2)event control,加@来进行表示;

              implicit event,等待某个signal的value change;clock signal的pose/nege最为常用;

                 explicit event,显式声明某个event,然后做wait和trigger;

          posedge,从0-x/z也算;negedge,从x/z-0也算;

          @之后也可以添加class中的内容或,handle。主要相应的handle或者var变化,就是一个event的触发;

            

          不同的event之间,也可以进行or运算,或者用","来表示;

            always @(a,b,c)   = always @(a or b or c);  

          implicit类型的event_expression list 用 always @(*)   always  @*来表示;

             conditional event表示,加入iff关键字;

            always @( a iff enable == 1)  在enable为1的情况下的a的edge跳变;

          sequence event表示某个sequence运行到end的时候,的结果时候改变

            sequence abc;

              @ (posedge clk) a ##1 b ##1 c;

            endsequence;

            intial begin

              @ abc  $display(“”);

            end

           level_sensitive event,使用wait关键字,

            wait expression;

            wait fork;等待所有的child-process都执行结束;

            wait_order  (identifier1,  identifier2,  identifier3) action_block(else等);  等event按顺序进行trigger; 

                必须是显式声明的event 类型;

           level_sensitive sequence event,使用内部function  triggered;

              

      3)intra_assignment timing control将delay不能写在assign中。可以是delay,也可以是event;

              

thread的创建:1)每个initial procedure;

        2)每个final procedure;

        3)每个always,always_comb,always_latch,always_ff procedure;

          4)每个fork---join的statement;

        5)dynamic process;

process ctrl:wait,wait_order,wait fork;    

  wait fork,会等待当前进程的所有子进程结束,包括之前block块,未结束的进程。

      disable  task/block identifier,disable fork;

          wait fork和disable fork,等待或者disable该进程下的所以子进程;

          disable后不能加function的identifier; 

  disable block_name的格式,类似与verilog格式的static形式的disable,显示kill指定的process。

      process的指定,只通过hier来确定。(automatic task或者function中的object,不能通过hier来引用,只能通过block内部的hier name来确定)

                      (使用disable block_name的时候,需要注意block_name在多线程中情况)

  disable fork,更加切合sv dynamic的形式,查找当前begin end或者task, function中的进程,进行disable。

  program test;

    task automatic t(input int b);

      fork:ONE

        begin

          #b $display('%0b', b);

        end

        begin

          #b $display('%0b', b);

        end

      join_any

      //str1   disable ONE;     //使用这种disable,sim output 5  (因为hier是一样的,所以两个ONE的进程都被杀了)

      //str2   disable fork;    //使用这种disable,sim output 5 ; 10 

    endtask

  endprogram

  initial begin

    fork

      t(10);

      t(5);

    join

  end

SV中定义了process的class,来对每个process做具体的控制;

      

      应用,await,kil,resume等function;

      

SV processses相关推荐

  1. 不契合市场,Bitcoin SV愿景未必是给矿工的一个好选择

    关于比特币现金(BCH)11月份的硬分叉升级,Bitcoin AB和nChain公司以及其支持者coingeek矿池分别提出了不同的升级路线,并在社区内部引发了争议与分歧. 当然,关于BCH是否会分叉 ...

  2. 关于CSW和Bitcoin SV,我们不妨看一下局外人的观点

    最近,BCH社区关于网络升级的争论持续升温,根本原因是nChain公司和coingeek矿池联合声明将在下一次BCH网络升级中,成立一个新的全节点Bitcoin SV(Satoshi Vision中本 ...

  3. 信息系统项目管理师-挣值管理(PV、 AC、 EV、 ETC、 CV、 SV、 CPI、 SP)

    挣值管理(PV. AC. EV. ETC. CV. SV. CPI. SP) 计划工作量的预算费用PV或BCWS=计划工作量 * 预算定额 已完成工作量的实际费用AC或ACWP 已完成工作量的预算成本 ...

  4. Verilog自编函数clog2替代SV中的系统函数$clog2

    先放函数,已验证和$clog2输出一致,注意需满足输入n ≥ 1. // 返回以2为底的n的对数 function integer clog2 (input integer n); beginn = ...

  5. sv编程语言_SV及UVM高级话题篇之一:SystemVerilog开源公共库(上)

    伴随着SV推广的热浪,SV已经不只是作为一种验证语言流行开来,实际上它同样在早期也作为了一种硬件描述语言和一种通用编程语言得到了应用.在软件编程的过程中,SV同Java一般也有了更为丰富的数据类型和类 ...

  6. (25)FPGA计数器设计(SV代码实现)

    (25)FPGA计数器设计(SV代码实现) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA计数器设计(SV代码实现) 5)结语 1.2 FPGA简介 FPGA( ...

  7. sv队列和动态数组的区别_systemverilog中几种数组类型的基础知识

    在开始今天的内容之前,先来一个小玩具,一条用来删除文件的bat语句.我发现questasim跟vim同时对文本进行修改的时候,同目录下会产生很多很多很多的中间文件,所以很久不用的bat又要搬出来了.语 ...

  8. SV学习(8)——随机约束和分布、约束块控制

    SV学习(8)--随机约束和分布.约束块控制 1. 随即约束和分布 1.1. 为什么需要随机? 1.2. 要随机做什么? 1.3. 声明随机变量的类 1.4. 什么是约束 1.5. 权重分布 1.6. ...

  9. 用友U9【SV】服务

    1:将UFIDA.U9.Cust.ZhaoDi.CreateItemTransferSV.ICreateItemTransferSV 文件拷贝至portal的services下面: 2:添加附件con ...

最新文章

  1. Visual Studio查找搜索类和方法的快捷方法
  2. malloc free
  3. hadoop hdfs访问权限更新延迟问题
  4. Discuz!X集群部署的系统方案和改造方式讨论
  5. python中注释的快捷键_【Python】注释
  6. Ubuntu中安装和卸载apache2
  7. jenkins的svn路径中文问题
  8. reentrantlock失效了?_ReentrantLock 源码简单分析
  9. eclipse配置tomcat运行时访问路径不要项目名称
  10. Windows 平台sqlalchemy 连接oracle数据库
  11. vscode-更换图标主题VSCode Icons.
  12. LeetCode 34 Search for a Range(搜索范围)
  13. 史密斯圆图串并联口诀_阻抗匹配与史密斯圆图基本原理『一』
  14. 袁亚湘院士上《开讲啦》变数学魔术啦!
  15. SeaweedFS安全配置(Security Configuration)
  16. 安卓百度地图,隐藏左下角Logo
  17. json数组排序,深拷贝,浅拷贝,删除,增加,筛选,
  18. [BD 41-1629] </zynq_ultra_ps_e_0/SAXIGP3/HP1_QSPI> is excluded from all addressable master spaces.
  19. 一个完整的Django入门指南 - 第1部分
  20. 两步实现安卓手机秒变网络摄像头

热门文章

  1. 交换二叉树中所有结点的左右子树的位置
  2. 第五天、LAMP架构
  3. pip软件包安装 + Anaconda软件库安装 教程
  4. windows 程序设计及API
  5. 引入CSS文件的@import与link的权重分析
  6. windows xp 创建 Oracle(11G)数据库实例时写入系统日志失败解决方案
  7. 基于visual Studio2013解决C语言竞赛题之1010计算
  8. MSSQL游标的原理及示例
  9. Mysql如何新建一个服务和移除所新建的服务
  10. Mysql连接失败报Received fatal alert: protocol_version问题解决