Verilog HDL任务、函数

在VerilogHDL中,用户可以定义任务和函数,还内置了一些系统任务和系统函数用于实现某些特定的操作。
任务和函数的关键字分别是:task和function。利用任务和函数可以把一个大的程序模块分解成许多小的任务和函数。

任务

通过调用来执行,而且只有在调用时才执行。在定义任务时,可以添加输入和输出端口,用于在任务调用时传递参数。任务可以彼此调用,而且任务内还可以调用函数。任务可以包含带时序控制的语句。

任务的定义

语法格式:
task <任务名>
端口及数据类型声明语句;
其他语句
endtask

任务调用

语法格式:
<任务名>(端口1,端口2,……,端口n);
注:(1)任务的定义与调用须在一个module模块内
(2)定义任务时,没有端口名列表,但需要紧接着进行输入、输出端口和数据类型的说明。
(3)当任务被调用时,任务被激活。调用时,须列出端口名列表,端口名的排序和类型必须与任务定义中的相一致。
(4)一个任务可以调用别的任务和函数,个数不限。

函数

函数和任务一样,也可以用来定义一个可重复调用的模块
不同的是,函数可以返回一个值,因此可以出现在等号右边,而任务的返回值只能通过人物的输出端口来获得

函数的定义

函数的目的是返回一个值,用于表达式计算
function <返回值位宽或类型声明> 函数名
输入端口与类型说明;
局部变量说明;
块语句
endfunction
<返回值位宽或类型声明>是一个可选项,缺省则返回值为一位寄存器类型的数据

函数的调用

语法格式
<函数名>(<表达式1><表达式2>……<表达式N>);
输入参数列表的顺序必须与函数定义时的声明顺序相同

函数的特点
(1)函数定义不能包含任何时序控制语句
(2)函数必须含有输入,但不能有输出或双向信号
(3)函数中不使用非阻塞赋值语句
(4)一个函数只能返回一个值,该值的变量名与函数同名,数据类型默认为reg类型
(5)传递给函数参数的顺序与函数定义时输入参数声明的顺序相同
(6)函数定义必须包含在模块定义内
(7)函数不能调用任务,任务可以调用函数
(8)虽然函数只能返回一个值,但是返回值可以直接赋给一个信号拼接,从而使它们等效多个输出
(9)自动函数有独立的本地变量,可以同时在多出调用或递归调用。
function automatic 函数名

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

⁡⁢⁡布莱克先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值