Verilog——任务task的调用
参考自以下链接处:
http://t.csdn.cn/4ws4t
下面直接看代码,代码中会有注意事项。
`timescale 1ns/10ps
module traffic_lights ;
reg clk ;
reg red ;
reg amber ;
reg green ;
//产生时钟脉冲的always块
always #10 clk = ~clk;
parameter on = 1 ;
parameter off = 0 ;
//定义交通灯开启时间的任务
task light;//task<任务名>
input [31:0] tics;
output reg color;//<端口及数据类型声明语句>,建议先输入后输出
begin
repeat(tics) @(posedge clk);//等待tics个时钟的上升沿
color=off;//关灯
end
endtask
//交通灯初始化
initial red=off;
initial amber=off;
initial green=off;
//交通灯控制时序
always begin
red=on; //开红灯
light("d350,red); //调用等待任务,
//(1)括号中信号顺序与task声明的信号顺序一致;
//(2)不能是参数类型的数据,比如你放的是parameter定义的数据就不行;
//(3)既然是调用,就是调用其中的逻辑功能,使用的信号都需要是module下定义的,而不是用task中定义的的color。
green=on; //开绿灯
light("d300,green); //等待
amber=on; //开黄灯
light("d200,amber); //等待
end
endmodule


