一、前言
任务和函数具备将程序中的反复被用的语句结构聚合起来的能力,因此其功能类似于C 语言的子程序。通过任务和函数语句结构来替代重复性大的语句可以有效地简化程序结构。从另一方面看,利用任务和函数可以把一个大的程序模块分解成许多小的任务和函数,以利调试。任务和函数语句的关键字分别是 task
和 function
。
任务(task)定义与调用的一般格式分别如下表述:
- 任务(task)定义语句格式
task ;
端口及数据类型声明语句
begin 过程语句; end
endtask
- 任务调用格式
<任务名>(端口1,端口2,...,端口N);
任务定义中,关键词 task
和 endtask
间的内容即被定义的任务,其任务名是标志当前定义任务的名称标识符。端口及数据类型声明语句 包括此任务的端口定义语句和变量类型定义语句。任务接受的输入值和返回的输出值都通过此端口,而且端口命名的排序也很重要,一旦确定就不要随意改动了。
过程语句 是一段用来完成任务操作的过程语句,因此也标志着任务的调用必须在主程序的过程结构中。任务中的过程语句是顺序语句,若有多条,需用块语句括起来。还应注意,任务语句中不能出现由 always
或initial
引导的过程语句结构。
显然,在任务中无法描述时序电路,可综合的任务语句结构只能描述组合电路。
任务调用语句表述较简单,即任务名旁标注端口表即可。但应注意,任务调用时和定义时的端口变量的位置应该一一对应。
下面是一个task语句的实例
module TASKDEMO(S,D,C1,D1,C2,D2);//主程序模块及端口定义
input S;
input[3:0] C1,D1,C2,D2;
//端口定义数目不受限制
output[3:0] D;
reg[3:0] out1,out2;
//任务定义,任务名CMP,此行不能出现端口定义语句
task CMP;
//注意任务端口名的排序
input[3:0] A,B;
output[3:0] DOUT;
begin
//任务过程语句描述一个比较电路
if (A>B) DOUT=A;
else DOUT=B;
//在任务结构中可以调用其他任务或函数,甚至自身
end
//任务定义结束
endtask
//主程序过程开始
always@(*) begin
//调用一次任务。任务调用语句只能出现在过程结构中
CMP(C1,D1,out1);
//第二次调用任务
CMP(C2,D2,out2);
end
assign D=S?out1:out2;
endmodule
三、函数(function)语句
函数通过关键词 function
和 endfunction
完成定义,其定义和调用格式如下:
- 函数定义语句格式
function
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?