Verilog——任务task的调用

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
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Verilog——任务task的调用