任务(task)和函数(function)提供了在verilog源文件中的多个不同位置执行相同逻辑功能的能力。它们还提供了一种将大型逻辑进程分解为较小逻辑进程的方法,使源代码描述更易于阅读和调试。从本篇开始,咱们将讨论任务和函数之间的区别,还介绍如何定义和调用任务和函数,并分别举例说明。
本篇咱们先介绍任务和函数的区别:
- 函数应在一个仿真时间单位内执行完毕,但任务可包含时间控制语句。
- 函数不能调用任务,但任务可以调用其他任务和函数。
- 函数必须至少有一个input类型参数,不得有output或inout类型参数,但任务可以有零个或多个任何类型的参数。
- 函数有一个返回值,但任务没有返回值。
函数的目的是通过返回单个值来响应输入值。一个任务可以支持多个目标,也可以计算多个结果值。不过,只有output或inout类型参数才会从任务调用中传回结果值。函数在表达式中用作操作数,操作数的值就是函数的返回值。
例如我们可以定义任务或函数来切换 16 位字中的高低字节。任务将在输出参数中返回切换后的字,因此,任务名为 switch_bytes 的源代码可以如下所示:
switch_bytes (old_word, new_word);
switch_bytes 任务将接收 old_word 中的字节,颠倒它们的顺序,并将颠倒后的字节放入 new_word 中。
而高低字切换函数会将切换后的字作为函数的返回值。因此,函数 switch_bytes 的函数调用可以如下例所示:
new_word = switch_bytes (old_word);
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!