新闻中心

EEPW首页 > EDA/PCB > 设计应用 > Verilog HDL高级语法结构―任务(TASK)

Verilog HDL高级语法结构―任务(TASK)

作者:时间:2013-08-27来源:网络收藏

如果传给任务的变量值和任务完成后接收结果的变量已定义,就可以用一条语句启动任务。任务完成以后控制就传回启动过程。如任务内部有定时控制,则启动的时间可以与控制返回的时间不同。

本文引用地址:http://www.eepw.com.cn/article/189518.htm

任务可以启动其他的任务,其他任务又可以启动别的任务,可以启动的任务数是没有限制的。不管有多少任务启动,只有当所有的启动任务完成以后,控制才能返回。

1.任务定义

定义任务的语法如下:

任务:

1.任务定义

定义任务的语法如下:

任务:

task 任务名>;
端口及数据类型声明语句>
语句1>
语句2>
...
语句n>
endtask

这些声明语句的语法与模块定义中的对应声明语句的语法是一致的。


2.任务调用及变量传递
调用任务并传递输入/输出变量的声明语句的语法如下:

任务名>(端口1,端口2,...,端口n);

下面的例子说明怎样定义任务和调用任务。
任务定义如下所示:

task my_task;
input a, b;
inout c;
output d, e;

语句> //执行任务工作相应的语句

c = foo1; //赋初始值
d = foo2; //对任务的输出变量赋值
e = foo3;
endtask

任务调用如下所示:

my_task(v,w,x,y,z);

任务调用变量(v、w、x、y、z)和任务定义的I/O变量(a、b、c、d、e)之间是一一对应的。当任务启动时,由v、w和x传入的变量赋给了a、b和c。当任务完成后的输出又通过c、d和e赋给了x、y和z。下面用一个具体的例子用来说明怎样在模块的设计中使用任务,使程序容易读懂。

module traffic_lights;
reg clock, red, amber, green;
parameter on=1, off=0, red_tics=350,
amber_tics=30,green_tics=200;
initial red=off; //交通灯初始化
initial amber=off;
initial green=off;

always begin //交通灯控制时序
red=on; //开红灯
light(red,red_tics); //调用等待任务
green=on; //开绿灯
light(green,green_tics); //等待
amber=on; //开黄灯
light(amber,amber_tics); //等待
end

task light(color,tics); //定义交通灯开启时间的任务
output color;
input[31:0] tics;
begin
repeat(tics) @(posedge clock); //等待tics个时钟的上升沿
color=off; //关灯
end
endtask

always begin //产生时钟脉冲的always块
#100 clock=0;
#100 clock=1;
end
endmodule

这个例子描述了一个简单的交通灯的时序控制,并且该交通灯有它自己的时钟产生器。



关键词: Verilog TASK HDL

评论


相关推荐

技术专区

关闭