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. Android按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  2. Android数据库开发——SQLite

    上篇博客提到过SQLite,它是嵌入式数据库,由于其轻巧但功能强大,被广泛的用于嵌入式设备当中.后来在智能手机.平板流行之后,它作为文件型数据库,几乎成为了智能设备单机数据库的必选,可以随着安卓app ...

  3. 【BZOJ5094】硬盘检测 概率

    [BZOJ5094]硬盘检测 Description 很久很久以前,小Q买了一个大小为n单元的硬盘,并往里随机写入了n个32位无符号整数.因为时间过去太久,硬盘上的容量字眼早已模糊不清,小Q也早已忘记 ...

  4. [工具] Sublime Text 使用指南

    http://bbs.it-home.org/thread-46291-1-1.html 摘要(Abstract) 更新记录 更正打开控制台的快捷键为Ctrl + ` 更正全局替换的快捷键为Ctrl ...

  5. iOS学习笔记06—Category和Extension

    iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...

  6. git如何回滚当前修改的内容?

    git如何回滚当前修改的内容? 1.打开git gui,在工具栏上点击 commit ,选择 Revert Changes,  这里可以回滚单个文件: 2.一键回滚所有修改: 打开git gui,在工 ...

  7. Spark2 探索性数据统计分析

    data数据源,请参考我的博客http://www.cnblogs.com/wwxbi/p/6063613.html import org.apache.Spark.sql.DataFrameStat ...

  8. 170822、解决PLSQL记录被另一个用户锁住的问题

    1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b. ...

  9. POJ-1926 Pollution

    Pollution Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4049 Accepted: 1076 Description ...

  10. 专访|HPE软件部中国区总经理李时:HPE引领IT战略新形态

    ​2016年7月22日,「HPE&msup软件技术开放日」将在上海举办,msup携手HPE揭秘全球测试中心背后的12条技术实践. 李时:HPE软件部中国区总经理,将在本次开放日带来<HP ...