当前位置: 首页 > news >正文

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的维数

 

相关文章:

  • 深度学习优化入门:Momentum、RMSProp 和 Adam
  • 在CentOS 7系统上搭建LAMP
  • 最近的3个困惑:信守承诺、技术产品先行还是市场销售先行、客户从哪来
  • 最少转机——图的遍历
  • linux下的 python开发环境
  • Restful架构风格详解
  • 《大话处理器》Cache一致性协议之MESI
  • MAT(MemoryAnalyzerTool)
  • html初学
  • 闭包
  • edx 汉化 lms 主讲教师-分析
  • shell编程之正则表达式
  • WebService如何抛出干净的异常
  • fiddler抓包之关于connect连接
  • java常见异常类图(分类了Error/RuntimeExecption、check Exception)
  • ES6指北【2】—— 箭头函数
  • JS 中的深拷贝与浅拷贝
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【面试系列】之二:关于js原型
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • ES10 特性的完整指南
  • JavaScript设计模式与开发实践系列之策略模式
  • Unix命令
  • vue-cli3搭建项目
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 我从编程教室毕业
  • ​TypeScript都不会用,也敢说会前端?
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • (003)SlickEdit Unity的补全
  • (5)STL算法之复制
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (poj1.3.2)1791(构造法模拟)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (全注解开发)学习Spring-MVC的第三天
  • (十一)手动添加用户和文件的特殊权限
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)winform之ListView
  • (转)大型网站的系统架构
  • (转)项目管理杂谈-我所期望的新人
  • .NET 8.0 中有哪些新的变化?
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 设计一套高性能的弱事件机制
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET大文件上传知识整理
  • .NET开发人员必知的八个网站
  • .net知识和学习方法系列(二十一)CLR-枚举
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [BUUCTF]-Reverse:reverse3解析