过程块和方法 —Systemverilog

目录

1. 硬件过程快

always

initial

2.函数 function

function的属性

3.任务 task


1. 硬件过程快

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

  • 硬件世界:module、interface

  • 软件世界:program、class

always

  • always是为了描述硬件的行为,可以描述时序电路、组合电路。所以只在module和interface中使用

  • always中的@(event)敏感列表是为了模拟硬件信号的触发行为。

initial

  • initial只执行一次。

  • initial和always一样,无法被延迟执行,即在仿真一开始的时候它们都会同时执行,在执行顺序上没有先后之分。

  • initial本身不可综合,就是为了测试而生。

  • Verilog中所有测试语句都放在了initial中。

  • initial过程块在SV中可以在module、interface、program中使用。

2.函数 function

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

function int double(input a);     //返回类型为int类型的double,使用return进行返回
    return 2*a;
endfunction

function的属性

  • 默认数据类型为logic

  • 数组可以作为形参传递

  • function可返回不返回(void)结果,返回时用return,不返回时用void。

  • 只有数据变量可以在形参列表中声明为ref类型,线网类型不能被声明为ref类型

  • 可指定参数的默认值,默认信号是input

3.任务 task

  • 任务可以没有输入变量(函数必须有一个输入变量)

  • task无法通过return返回结果,只能通过output、inout或ref参数返回

  • task内可以置入耗时语句(@event、wait、event、#delay等),而function不能

  • 如果调用function,function和task皆可对其调用,如果调用task,建议使用task调用,因为task有可能耗时

二者区别:

  • 函数支持返回值,任务不支持

  • 任务有延迟和控制时间,函数没有

  • 函数不能调用任务,任务可以调用函数

注:初学者建议使用task定义,因为它可能内置耗时语句;对于有经验会使用两种类型进行区别,非耗时使用function,耗时使用task,function运用于纯粹的数字或者逻辑运算,而task可能会用于耗时的信号采样或者驱动的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白icer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值