码迷,mamicode.com
首页 > 其他好文 > 详细

SV中的task和function

时间:2015-04-13 12:47:20      阅读:3591      评论:0      收藏:0      [点我收藏+]

标签:

SV中的Task和Function不需要,必须加一个begin..end来指明body。

                 task    muliple_line;

                           ......body...

                 endtask :multiple_line

 

子程序在执行到子程序的最后一行就返回,将返回值赋给与函数同名的变量,也可以显式的调用return来返回。

 

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

 

子程序中的参数缺省值是logic  input。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中的task和function

标签:

原文地址:http://www.cnblogs.com/-9-8/p/4421548.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!