【 Verilog HDL 】函数(function)与任务(task)简单介绍

背景

关于函数和任务,是我这几天一直想写的内容,原因在于我上篇博文:Verilog HDL 使用规范(一),最后提到的问题,关于代码书写的规范中,要求:用一个函数(function)来代替表达式的多次重复,经常使用的一组描述可以写到一个任务中。

当时我还不是太明白,今天就会为此而准备的,为了写出清晰规范的代码,决定细化自己对Verilog HDL语言的学习。

本文内容参考:《从算法设计到硬件逻辑的实现》


任务

1)任务的定义

这些声明语句的语法与模块定义中的对应声明语句的语法是一致的。

2) 任务的调用及变量的传递

下面的例子说明怎样定义任务和调用任务:

任务调用变量(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;
//initialization
   initial red=off;
   initial amber=off;
   initial green=off;
//clk control
always
begin
   red=on;                             //red light on
   light(red,red_tics);             //transfer hold mission
   green=on;                         //green light on
   light(green,green_tics);     //wait for 200 time unit
    amber=on;                        //yellow light on
   light(amber,amber_tics);   //wait for 30 time unit
end

//define traffic light on mission
task light(color,tics);
output color;
input[31:0] tics;
begin
    repeat(tics)@(posedge clock); //use repeat sentence to wait for posedge clock
    color=off;                            //turn off the light
end
endtask

//generate clock
always
begin
    #100 clock=0;
    #100 clock=1;
end

endmodule

函数(function)

函数的目的是返回一个用于表达式的值。

1)函数的定义

2)函数的返回值

函数的定义蕴含声明了与函数同名的、函数内部的寄存器。如在函数的声明语句中<返回值的类型或范围>为缺省,则这个寄存器是一位的,否则是与函数定义中<返回值的类型或范围>一致的寄存器。函数的定义把函数返回值所赋值寄存器的名称初始化为与函数同名的内部变量。下面的例子说明了这个概念:getbyte被赋予的值就是函数的返回值。

3)函数的调用

函数的调用是通过将函数作为表达式中的操作数来实现的。

下面的例子中通过对两次调用函数getbyte的结果值进行位拼接运算来生成一个字。

4)函数的使用规则


仅供参考吧,这玩意我是用的真的少的不能行。

实践后补充。

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值