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