74,Verilog-2005标准篇:任务调用

任务应通过声明调用,该声明定义了传递给任务的参数值和接收结果的变量。任务完成后,控制权应传回调用进程。因此,如果任务内部有定时控制,则调用任务的时间与控制返回的时间可以不同。一个任务可以调用其他任务,而其他任务又可以调用其他任务--调用的任务数量不受限制。无论调用了多少个任务,在所有调用的任务完成之前,控制权都不会返回。任务的语法定义如下表所示:

从上表可以看出,标准提供了两种可供选择的任务声明语法。第一种语法以关键字 task 开始,随后是可选的关键字 automatic,接着是任务名称和分号,最后以关键字 endtask 结束。任务项声明(task_item_declaration)可指定以下内容:

- input参数

- output参数

- inout参数

- 过程块中可声明的所有数据类型

第二种语法应以关键字 task 开始,然后是任务名称和括号内的 task_port_list。task_port_list 应由零个或多个逗号分隔的 task_port_items 组成,括号后应加上分号,最后以关键字 endtask结束。

例 1-下面的示例说明了包含五个参数的任务定义的基本结构:

或者使用任务声明的第二种语法形式,任务可定义如下:

用下面的语句即可调用该任务:

my_task (v, w, x, y, z);

任务调用参数(v , w , x , y 和 z,相当于c语言的实参)与任务定义的参数(a , b , c , d 和 e,相当于c语言中的形参)相对应。

示例 2-下面的示例通过描述交通灯顺序来说明任务的使用:

module  traffic_lights;
reg  clock, red, amber, green;
parameter   on = 1, off = 0, red_tics = 350, amber_tics = 30, green_tics = 200;
// initialize colors.
initial  red = off;
initial  amber = off;
initial  green = off;
always   begin   // sequence to control the lights.
 red = on;   // turn red light on
 light(red, red_tics);  // and wait.
 green = on;  // turn green light on
 light(green, green_tics);  // and wait.
 amber = on;  // turn amber light on
 light(amber, amber_tics);  // and wait.
end
// task to wait for 'tics' positive edge clocks before turning 'color' light off.
always   begin   // waveform for the clock.
 100 clock = 0;
 #100 clock = 1;
end 
task  light;
 output  color;
 input  [31:0] tics;
 begin 
  repeat  (tics)  @  ( posedge  clock);
  color = off;  // turn light off.
 end 
endtask
endmodule  // traffic_lights.

点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值