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(设置间隔时间). ...
随机推荐
- 12个常用的JavaScript技巧
在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是 ...
- 改变presentModalView大小
rc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; rc.modalPresentationStyle = UIModalP ...
- 【咸鱼教程】Egret实现摇一摇功能
教程目录一 实现原理二 代码三 Demo下载 一 实现原理监听设备旋转角度的变化,来判断用户是否摇动手机. 参考:智能手机里陀螺仪和重力感应有何区别?HTML5实现摇一摇的功能Egret官方陀螺仪教程 ...
- 23种设计模式之策略模式(Strategy)
策略模式是一种对象的行为型模式,定义一系列算法,并将每一个算法封装起来,并让它们可以相互替换.策略模式比算法独立于使用它的客户而变化,其目的是将行为和环境分隔,当出现新的行为时,只需要实现新的策略类. ...
- jQuery里面ajax请求的封装
为了避免ajax漫天飞,我们需要对jQuery的代码进行封装,封装代码: function api_request(name, params, cb, scope, async, el) { if ( ...
- scala - fold,aggregate,iterator
import org.json4s._ import org.json4s.jackson._ import org.json4s.jackson.JsonMethods._ import org.j ...
- 二步实现 远程连接 阿里云SqlServer 2012 数据库服务器
前言:在使用 阿里云 上的一些产品时,遇到不少坑. 安装IIS 时,遇到 因买的配置过低,虚拟内存不足,而导致 IIS 总是安装失败: 现在 在上面安装了个 Sql Sever 2012,远程老是 不 ...
- Mapreduce实验一:WordCountTest
1.确定Hadoop处于启动状态 [root@neusoft-master ~]# jps 23763 Jps3220 SecondaryNameNode3374 ResourceManager293 ...
- Oracle管理监控之设置linux启动时自动启动oracle服务器
1. 修改dbstart脚本(第78行):$ vi $ORACLE_HOME/bin/dbstartORACLE_HOME_LISTNER=$ORACLE_HOME 2. 修改/etc/oratab为 ...
- 反面教材 构造构造 json 数据
构造构造 json 数据 说说你们在项目中遇到过的最糟糕的代码 - V2EX https://www.v2ex.com/t/214099