SV中的task和function
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的更多相关文章
- SV中的线程
SV中线程之间的通信可以让验证组件之间更好的传递transaction. SV对verilog建模方式的扩展:1) fork.....join 必须等到块内的所有线程都执行结束后,才能继续执行块后的语 ...
- SV中的OOP
OOP:Object-Oriented Programming,有两点个人认为适合验证环境的搭建:1)Property(变量)和Method(function/task)的封装,其实是BFM模型更方便 ...
- 事件轮询中的task与microtask
event loop 网上看到的一篇文章,关于介绍task和Tasks, microtasks, queues and schedules,尝试简单翻译一下写进来吧! 原文地址:https://jak ...
- vivado对task和function的可综合支持
手册UG901,对vivado可综合的语句支持进行了描述,HDL包括:verilog-2001,system-verilog,VHDL: verilog-2001扩展了对task和function的支 ...
- SV中的随机化
SV搭建testbench的关键概念:CRT(constraint random test),测试集的随机化. 由于对象class由数据和操作组成,所以对数据的随机化一般放在一个class内.(对环境 ...
- (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)
1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...
- swoole中使用task进程异步的处理耗时任务
我们知道,swoole中有两大进程,分别是 master 主进程和 manager 管理进程. 其中 master 主进程中会有一个主 reactor 线程和多个 reactor 线程,主要的作用就是 ...
- (转).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 ...
- Ext.Net中的Task控件的使用
在用到Ext.Net中的Task控件的时候,写了一下基本的使用方法: 控件是在TaskManager里面的Tasks下面的Task 此控件的常用属性有,TaskID.Interval(设置间隔时间). ...
随机推荐
- Android按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- Android数据库开发——SQLite
上篇博客提到过SQLite,它是嵌入式数据库,由于其轻巧但功能强大,被广泛的用于嵌入式设备当中.后来在智能手机.平板流行之后,它作为文件型数据库,几乎成为了智能设备单机数据库的必选,可以随着安卓app ...
- 【BZOJ5094】硬盘检测 概率
[BZOJ5094]硬盘检测 Description 很久很久以前,小Q买了一个大小为n单元的硬盘,并往里随机写入了n个32位无符号整数.因为时间过去太久,硬盘上的容量字眼早已模糊不清,小Q也早已忘记 ...
- [工具] Sublime Text 使用指南
http://bbs.it-home.org/thread-46291-1-1.html 摘要(Abstract) 更新记录 更正打开控制台的快捷键为Ctrl + ` 更正全局替换的快捷键为Ctrl ...
- iOS学习笔记06—Category和Extension
iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...
- git如何回滚当前修改的内容?
git如何回滚当前修改的内容? 1.打开git gui,在工具栏上点击 commit ,选择 Revert Changes, 这里可以回滚单个文件: 2.一键回滚所有修改: 打开git gui,在工 ...
- Spark2 探索性数据统计分析
data数据源,请参考我的博客http://www.cnblogs.com/wwxbi/p/6063613.html import org.apache.Spark.sql.DataFrameStat ...
- 170822、解决PLSQL记录被另一个用户锁住的问题
1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b. ...
- POJ-1926 Pollution
Pollution Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4049 Accepted: 1076 Description ...
- 专访|HPE软件部中国区总经理李时:HPE引领IT战略新形态
2016年7月22日,「HPE&msup软件技术开放日」将在上海举办,msup携手HPE揭秘全球测试中心背后的12条技术实践. 李时:HPE软件部中国区总经理,将在本次开放日带来<HP ...