前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >task函数与function函数的FPGA使用

task函数与function函数的FPGA使用

作者头像
根究FPGA
发布2020-06-29 15:39:37
8240
发布2020-06-29 15:39:37
举报
文章被收录于专栏:根究FPGA根究FPGA

本节介绍verilog中task任务函数和function函数的使用。

一、task任务函数的调用

任务就是封装在“task-endtask”之间的程序,任务通过调用来执行,任务可以彼此调用,而且任务内还可以调用函数。

形式声明:
代码语言:javascript
复制
task task_id;
[declaration]
procedural_statement
endtask

task标志着一个任务定义的开始,task_id是任务名,可选项declaration是端口声明语句和变量声明语句,任务接收输入值和输出值通过此处声明的端口进行。

调用:

代码语言:javascript
复制
task_id(端口1,端口2,…,端口N);

任务调用语句中,参数列表的顺序必须与任务定义中的端口声明顺序相同。任务调用语句是过程性语句,所以任务接收返回数据的变量必须是寄存器类型(翻译一下就是说:task中的语句赋值是<=类型,变量类型要用reg修饰)。

此外,在task任务内部可以对外部的变量进行修改。

定义example
代码语言:javascript
复制
     task write_byte;
           input [5:0]Ctrl_Cmd;
           input [7:0]Wr_Byte_Data;
           begin
                    Cmd <= Ctrl_Cmd;
                    Tx_DATA <= Wr_Byte_Data;
                    Go <= 1'b1;
           end
endtask
调用example
代码语言:javascript
复制
write_byte(WR,reg_addr[15:8]);

二、function函数分析

1、定义

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

2、格式
代码语言:javascript
复制
function <返回值的类型或范围>函数名;
<端口声明语句>
<变量类型说明语句>
begin
<语句>
… …
end
endfunction

Attention:

(1)、<返回值的类型或范围>可不定义,如果默认则代表一位寄存器类型数据。

(2)、函数返回的值:函数定义蕴含声明了一个与函数同名的、函数内部的寄存器,其位数与定义的相同。

(3)、函数的定义不能包含任何的时间控制语句,以及任何用# @ wait来标识的语句。

(4)、函数的定义中必须包含一个赋值语句给函数中的一个内部变量赋以函数的值,该内部变量具有和函数名一样的名字。

3、example
代码语言:javascript
复制
function integer clogb2 (input integer size);
    begin
      size = size - 1;
      for (clogb2=1;size>1; clogb2=clogb2+1)
        size = size >>1;
    end
  endfunction // clogb2

以上的函数声明中定义了一个返回值类型为整型变量的函数,函数名为clogb2,该函数名中蕴含了一个同名为clogb2的变量。

欲知后事如何,请听下回分解~~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 根究FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 形式声明:
  • 定义example
  • 调用example
  • 1、定义
  • 2、格式
  • 3、example
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档