SV中class的properties和methods默认都是public的,但是可以声明为local和protected。

一个properties声明为local类型的,则只在该class中的methods可以调用该变量。即使subclass也不可以调用。

local interger i;

一个properties或者methods声明为protected,与local类似,但是在subclass中可见。

extern protected virtual automatic task_name();

SV中的Task和Function不需要,必须加一个begin..end来指明body,但是需要加入标识符。

task    muliple_line;

......body...

endtask :multiple_line

子功能模块(funciton)在执行到子程序的最后一行就返回,将返回值赋给与功能同名的变量,也可以显式的调用return来返回。

在function中不能再声明一个同名的var,会造成冲突。

task内部是不会返回值的,但是也可以调用return,但是不带返回值。program直接显示调用return。

数组变量到function的传递,通过ref模块或者直接数组变量(数据量会比较大)

SV中module和program,package的子程序默认是静态存储的,当需要动态存储时,仍然需要显式的用automatic显式指出。(class中默认是automatic的)

SV对task和function的参数声明做了优化,声明需要方向声明和类型声明;参数传递可以按port名称对应,也可以按顺序对应。

子程序中的参数缺省值是input logic或者与同一task/function前一个参数的类型相同。大小可以指定默认值或者参数传递时赋值。

verilog对子程序参数的处理是,在进入子程序时,将input和inout的值赋值给子程序本地变量,在子程序返回时将output和

inout的值赋值给模块中的变量。SV中增加了一种方式ref,指定为引用而不是复制。这种方式只能用在automatic的子程序中,这种参数的好处是在子程序中

修改变量对调用它的模块随时可见。

task  bus_read(input  logic [31:0] addr,  ref logic [31:0]data);                initial     fork

bus.request = 1'b1;                                                                               bus_read(addr,data);

@(posedge bus.grant)  bus.addr =addr;                                                  thread2:  begin          //使用ref类型传递data,这样不需

@(posedge bus.enable)  data = bus.data;                                                                 @data;    //要等到bus_read进程结束,

.......                                                                                                                      $display; //thread2便可以看见data的变化

endtask:bus_read                                                                                                             end

join

SV新增的系统函数

elaborate时的函数:

1)$typeof(data_type), 判断某个data或者expression的类型

bit [12:0] A_bus, B_bus;

parameter type bus_t = $typeof(A_bus);

generate

    case ($typeof(bus_t))

      $typeof(bit[12:0]): addfixed_int #(bus_t) (A_bus, B_bus);

      $typeof(real): add_float #($typeof(A_bus)) (A_bus, B_bus);

     endcase

endgenerate

关于array的:

1)$size(), 表示array的元素个数

2)$left()/$low(), 表示array的最小元素索引

3)$right()/$high(), 表示array的最大元素索引

4)$dimensions, 表示array的维数

SV中的task和function的更多相关文章

  1. SV中的线程

    SV中线程之间的通信可以让验证组件之间更好的传递transaction. SV对verilog建模方式的扩展:1) fork.....join 必须等到块内的所有线程都执行结束后,才能继续执行块后的语 ...

  2. SV中的OOP

    OOP:Object-Oriented Programming,有两点个人认为适合验证环境的搭建:1)Property(变量)和Method(function/task)的封装,其实是BFM模型更方便 ...

  3. 事件轮询中的task与microtask

    event loop 网上看到的一篇文章,关于介绍task和Tasks, microtasks, queues and schedules,尝试简单翻译一下写进来吧! 原文地址:https://jak ...

  4. vivado对task和function的可综合支持

    手册UG901,对vivado可综合的语句支持进行了描述,HDL包括:verilog-2001,system-verilog,VHDL: verilog-2001扩展了对task和function的支 ...

  5. SV中的随机化

    SV搭建testbench的关键概念:CRT(constraint random test),测试集的随机化. 由于对象class由数据和操作组成,所以对数据的随机化一般放在一个class内.(对环境 ...

  6. (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)

    1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...

  7. swoole中使用task进程异步的处理耗时任务

    我们知道,swoole中有两大进程,分别是 master 主进程和 manager 管理进程. 其中 master 主进程中会有一个主 reactor 线程和多个 reactor 线程,主要的作用就是 ...

  8. (转).NET 4.5中使用Task.Run和Parallel.For()实现的C# Winform多线程任务及跨线程更新UI控件综合实例

    http://2sharings.com/2014/net-4-5-task-run-parallel-for-winform-cross-multiple-threads-update-ui-dem ...

  9. Ext.Net中的Task控件的使用

    在用到Ext.Net中的Task控件的时候,写了一下基本的使用方法: 控件是在TaskManager里面的Tasks下面的Task 此控件的常用属性有,TaskID.Interval(设置间隔时间). ...

随机推荐

  1. jenkins与SonarQube集成

    一.SonarQube 我的理解是,SonarQube就是一个对代码进行分析的平台,其功能可以通过插件扩展.支持多种语言,也支持静态代码检查.发现潜在bug等. 以下是参考信息: 维基百科:https ...

  2. C# IO流的操作(一)

    C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...

  3. 【AngularJs-模块篇-Form篇】

    1.模块 <!doctype html> <html lang="en-US" ng-app="myApp"> <head> ...

  4. 7.20 python线程3

    2018-7-20 18:46:49 去俺弟家玩去 后天回来 1.复习 # !/usr/bin/env python # !--*--coding:utf-8 --*-- # !@Time :2018 ...

  5. Ubuntu16.04 安装lamp环境

    拿到新装的ubuntu16.04新系统 首先 apt-get update 更新一下 我这里是root用户,如果您不是超级管理员,命令前加sudo即可 如果您加了sudo也不好使,那就联系管理员,给你 ...

  6. HDU 4352 - XHXJ's LIS - [数位DP][LIS问题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  7. Ubuntu:编译Linux内核源代码和内核模块

    1. 目的 内核模块需要运行在Linux 3.8.13内核中,因此需要为此内核重新编译内核模块源代码. 2. 步骤 1.在Ubuntu 14.04 64位(内核3.13.0-24-generic)上, ...

  8. Kettle 4.2源码分析第四讲--KettleJob机制与Database插件简介(含讲解PPT)

    1.  Job机制 一个job项代表ETL控制流中的一项逻辑任务.Job项将会顺序执行,每个job项会产生一个结果,能作为别的分支上job项的条件. 图 1 job项示例 1.1. Job类图简介 图 ...

  9. HDU - 5961 传递 想法,bfs

    题意:给你一个有向图,满足去掉方向是完全图,将其拆成PQ两个图(没有公共边),问你两图是否分别满足对于任意3个点a,b,c 若有一条边从a到b且有一条边从b到c ,则同样有一条边从a到c. 题解:观察 ...

  10. pstools psexec mimikatz

    Psexec原理 - oneVs1的专栏 - 博客频道 - CSDN.NET 在远程终端(3389.mstsc.exe).虚拟桌面中抓取密码的方法: 通常你在远程终端中运行该程序会提示:存储空间不足, ...