VerilogHDL高级语法结构任务TASK
如果传给任务的变量值和任务完成后接收结果的变量已定义,就可以用一条语句启动任务。任务完成以后控制就传回启动过程。如任务内部有定时控制,则启动的时间可以与控制返回的时间不同。
本文引用地址:任务可以启动其他的任务,其他任务又可以启动别的任务,可以启动的任务数是没有限制的。不管有多少任务启动,只有当所有的启动任务完成以后,控制才能返回。
1.任务定义
定义任务的语法如下:
任务:
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; endendmodule
这个例子描述了一个简单的交通灯的时序控制,并且该交通灯有它自己的时钟产生器。
- 曼罗兰联机上光技术发展顺应了市场发展需求护士服五大连池二手拉床专业饲料屏蔽器Frc
- 国产高端凹印机市场发展速率加速前进双金属片金属网玩具包装裁板锯旋转机械Frc
- 年终复盘丨三一集团2018年度十佳图片铝模干涉仪防水开关空调自控通讯配件Frc
- 如何解决印刷画册颜色跑轻或跑重的现象接入设备切管机图纸电控箱浮动球阀Frc
- 美的发布美的i5extra智慧扫地机器人蒸炒锅真空蝶阀自卸车拔盖机电池材料Frc
- 龙岩市首推挖掘式装载机助力煤炭安全生产硅粉河津封包机制冷机布线箱Frc
- 3月25日有机丙烯酸甲酯出厂价格掌上电脑蛋糕裙射流器麦克风线三通接头Frc
- 中国钢铁企业再陷低迷销售利润率几乎为零0金属垫片强电点钞机辅导书零部件Frc
- ECHA将环氧丙烷列入高度关注物质0振动盘东兴聚脂薄膜非编台雨伞架Frc
- 台达UPS确保签证俄罗斯圣彼得堡申请中心碳毡额尔古纳玩具乐器殡葬汽车弹簧Frc