SV中的过程块和方法

一、硬件过程块

在SV中首先要搞清楚哪些语句应该放在“硬件世界”,哪些程序应该放在“软件世界”。

  • 硬件世界:module、interface
  • 软件世界:program、class

always

  • always是为了描述硬件的行为,可以描述时序电路、组合电路。所以只在module和interface中使用。
  • always中的@(event)敏感列表是为了模拟硬件信号的触发行为。

initial

  • initial非常符合软件的执行方式,即只执行一次。
  • initial和always一样,无法被延迟执行,即在仿真一开始的时候它们都会同时执行,在执行顺序上没有先后之分。
  • initial本身不可综合,就是为了测试而生。
  • Verilog中所有测试语句都放在了initial中。
  • initial过程块在SV中可以在module、interface、program中使用。

二、函数function

SV中function同C语言非常类似。可以在参数列表中指定input、output、inout、ref类型的参数,也可以返回数值或者是void没有返回值。

function int double(input a);
	return 2*a;
endfunction

function的属性

  • 默认数据类型为logic
  • 数组可以作为形参传递
  • function可返回或不返回结果
  • 只有数据变量可以在形参列表中声明为ref类型,线网类型不能被声明为ref类型
  • 在使用ref时可以采用const方式保护源数据不被修改
  • 可指定参数的默认值

三、task任务

  • task无法通过return返回结果,只能通过output、inout或ref参数返回
  • task内可以置入耗时语句(@event、wait、event、#delay等),而function不能
  • 内置耗时语句时使用task,可能会用于耗时的信号采样或者驱动的场景;而非耗时方法定义时使用function,运用于纯粹的数字或者逻辑运算
  • 如果调用function,function和task皆可对其调用,如果调用task,建议使用task调用,因为task有可能耗时

四、变量声明周期

  • 可以将数据的声明周期分为动态(automatic)和静态(static)
  • 局部变量生命周期同其所在域共存亡,属于动态生命周期
  • 全局变量伴随着程序开始到结束,例如module中变量默认哦日全局变量,属于静态生命周期
  • 如果数据变量被声明为automatic,那么在进入该进程/方法后,automatic变量会被创建,离开后会被销毁,而static变量在仿真开始时即被创建,而在进程/方法执行过程中,自身不被销毁,可以被多个进程/方法所共享
  • 在module、program、interface、task、function之外声明的变量拥有static声明周期,存在于整个仿真阶段
  • 在module、interface和program内部声明,且在task、process或function外部声明的变量也是static变量,且作用域在该块中
  • 在module、program、interface中定义的task、function默认都是static类型
  • 在过程块中(task、function、process)定义的变量均跟随它的作用域,即过程块的类型,如果过程块为static,则它们也默认为static
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值