您的位置 首页 传感器

硬件描绘言语Verilog HDL规划进阶之: Verilog HDL高档语法结构—使命

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

4.2 Verilog HDL高档语法结构——使命(TASK)

假如传给使命的变量值和使命完结后接纳成果的变量已界说,就能够用一条句子发动使命。使命完结今后操控就传回发动进程。如使命内部有守时操控,则发动的时刻能够与操控回来的时刻不同。
使命能够发动其他的使命,其他使命又能够发动其他使命,能够发动的使命数是没有约束的。不论有多少使命发动,只有当一切的发动使命完结今后,操控才干回来。

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

这个比如描绘了一个简略的交通灯的时序操控,而且该交通灯有它自己的时钟发生器。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/194343.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部