SV always、initial、task、function、void function参数生命周期

目录

always和initial知识点

always过程块

initial过程块

always& initial

软件方法(task、function和void function)

task

function

void function

数据的生命周期

静态static

动态automatic


always和initial知识点

        硬件世界:module/endmodule,interface/endintface

  •         软件世界:program/endprogram,class/endclass

always过程块

        always中的@(event)敏感列表是为了模拟硬件信号的触发行为,一直监视event是否被触发,是用来描述硬件时序电路和组合电路的正确打开方式,只能在module和interface中使用。

initial过程块

        为测试而生,不可综合,在module和interface、program中使用;其书写方式initial begin…end

always& initial

        同:无法被延迟执行,仿真一开始同时执行,顺序上没有先后。

        异:initial只在仿真一开始执行一次。


软件方法(task、function和void function)

task

        无返回值,只能通过output、inout和ref的参数返回;可以置入耗时语句,例如@event、wait event、#delay等。

task A(output logic [2:0] x);

       …

       endtask

       task T3(a,b,output bit[15:0] u,v);参数a和b是1bit宽度的logic输入。

注意:区别于output、inout参数复制,ref将参数的传递方式指定为引用,ref参数只能被用于带自动储存的子程序中。

function

        可以在参数列表中指定输入参数input、输出参数output以及输入输出参数inout和引用参数ref的参数,返回结果利用return。

function int double(input a)//默认输入logic类型,int为定义函数返回类型值

        可以给定默认值,调用时如果省略该参数的传递则使用默认值。

function int double(input [7:0] addr=0);

注意:不带参数的子程序在定义或调用时并不需要带空括号();不耗时的方法定义为function,耗时的方法定义为task,有利于阅读理解。

void function

        在不消耗时间且无返回值的情况下定义为void function,这样它就可以被任何任务和函数所调用了。从灵活性的角度来看,所有由于调试的子程序都应该定义为void函数,以便于被其他函数和任务调用。

数据的生命周期

静态static

        程序执行开始到结束一直存在,初始化只会伴随它的生命周期发生一次,自身不销毁,可被对进程/方法共享。

动态automatic

        局部变量同其所在域共存亡,被声明automatic,在进入该线程/方法(task、function)后automatic变量被创建,离开后被销毁。

        作用范围定义:为了使得过程块中生命的变量有统一默认周期,可以在定义module、initerface、package或者program时,通过限定词automatic或者static来区分。上述程序块默认为static。

注意:   

function int def(input a);

              static int cnt = 0;  //不加指明,默认静态函数,此处有没有static都一样。

              cnt+=a;

              return cnt

如果连续调用两次def(1),其结果返回2。因为第二次调用def()函数,不会再初始化cnt=0

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值