SV中,ref和automatic关键字


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

自动(可重入)任务

任务在本质上是静态的,任务中的所有声明项的地址空间是静态分配的,同事并发执行的多个任务共享这些存储区。

因此,如果这个任务在模块中的两个地方被同时调用,则这两个任务调用将对同一块地址空间进行操作。操作的结果很有可能是错误的。

为了避免这一问题,Verilog通过在task关键字前面添加automatic关键字,是任务成为可重入的,这样声明的任务也称为自动任务。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM