参考自以下链接处:
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

浅记录一下,因为发现原文中代码编译会出错,自己动手修改一下也能加深对task的调用方法记忆。

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/BMer-ICer/p/16751576.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!