0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简谈FPGA verilog中的function用法与例子

FPGA学习交流 2018-08-10 13:42 次阅读

大家好,又到了每日学习的时间了,今天我们来聊一聊FPGA verilog中的function用法与例子。

函数的功能和任务的功能类似,但二者还存在很大的不同。在 Verilog HDL 语法中也存在函数的定义和调用。

1.函数的定义
函数通过关键词 function 和 endfunction 定义,不允许输出端口声明(包括输出和双向端口) ,但可以有多个输入端口。函数定义的语法如下:

function [range] function_id;
input_declaration
other_declarations
procedural_statement
endfunction

其中,function 语句标志着函数定义结构的开始;[range]参数指定函数返回值的类型或位宽,是一个可选项,若没有指定,默认缺省值为 1 比特的寄存器数据;function_id 为所定义函数的名称,对函数的调用也是通过函数名完成的,并在函数结构体内部代表一个内部变量,函数调用的返回值就是通过函数名变量传递给调用语句;input_declaration 用于对函数各个输入端口的位宽和类型进行说明,在函数定义中至少要有一个输入端口;endfunction为函数结构体结束标志。下面给出一个函数定义实例。

定义函数实例:
function AND; //定义输入变量
input A, B; //定义函数体
begin
AND = A && B;
end
endfunction

函数定义在函数内部会隐式定义一个寄存器变量, 该寄存器变量和函数同名并且位宽也一致。函数通过在函数定义中对该寄存器的显式赋值来返回函数计算结果。此外,还有下列
几点需要注意:
(1)函数定义只能在模块中完成,不能出现在过程块中;
(2)函数至少要有一个输入端口;不能包含输出端口和双向端口;
(3) 在函数结构中, 不能使用任何形式的时间控制语句 (#、 wait 等) , 也不能使用 disable中止语句;
(4)函数定义结构体中不能出现过程块语句(always 语句) ;
(5)函数内部可以调用函数,但不能调用任务。

2.函数调用
和任务一样,函数也是在被调用时才被执行的,调用函数的语句形式如下: func_id(expr1, expr2, ........., exprN) ,其中,func_id 是要调用的函数名,expr1, expr2, ......exprN是传递给函数的输入参数列表,该输入参数列表的顺序必须与函数定义时声明其输入的顺序相同。下面给出一个函数调用实例。

函数调用实例:
module comb15 (A, B, CIN, S, COUT);

input [3:0] A, B;
input CIN;
output [3:0] S;
output COUT;

wire [1:0] S0, S1, S2, S3;

function signed [1:0] ADD;

input A, B, CIN;

reg S, COUT;

begin
S = A ^ B ^ CIN;
COUT = (A&B) | (A&CIN) | (B&CIN);
ADD = {COUT, S};
end
endfunction

assign S0 = ADD (A[0], B[0], CIN),
S1 = ADD (A[1], B[1], S0[1]),
S2 = ADD (A[2], B[2], S1[1]),
S3 = ADD (A[3], B[3], S2[1]),
S = {S3[0], S2[0], S1[0], S0[0]},
COUT = S3[1];
endmodule

在函数调用中,有下列几点需要注意:
(1)函数调用可以在过程块中完成,也可以在 assign 这样的连续赋值语句中出现。
(2)函数调用语句不能单独作为一条语句出现,只能作为赋值语句的右端操作数。

今天就聊到这里,各位,加油。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21736

    浏览量

    603306
  • Verilog
    +关注

    关注

    28

    文章

    1351

    浏览量

    110093
收藏 人收藏

    评论

    相关推荐

    FPGA的上电复位

    大家好,博主最近有事忙了几天,没有更新,今天正式回来了。那么又到了每日学习的时间了,今天咱们来聊一聊 FPGA的上电复位,欢迎大家一起交流学习。 在基于verilog
    的头像 发表于 06-18 19:24 2w次阅读
    <b class='flag-5'>简</b><b class='flag-5'>谈</b><b class='flag-5'>FPGA</b>的上电复位

    FPGA的片内资源

    FPGA的片内资源
    发表于 01-08 22:12

    Verilog实现闰年的判断(ISE8.21调试通过)

    Xilinx FPGA工程例子源码:Verilog实现闰年的判断(ISE8.21调试通过)
    发表于 06-07 14:54 31次下载

    FPGA_CPLD实现AD或DA的文章(英文Verilog)

    Xilinx FPGA工程例子源码:在FPGACPLD实现AD或DA的文章(英文Verilog)
    发表于 06-07 15:07 18次下载

    FPGA verilog的task用法

            大家好,又到了每日学习的时间了,今天我们来聊一聊FPGA verilog的task用法。        任务就是一段封装在“task-endtask”之间的程序。任务
    的头像 发表于 08-09 18:59 4.1w次阅读

    FPGA/Veriloginout端口使用方法

            大家好,又到了每日学习的时间了,今天我们来聊一聊FPGA/Veriloginout端口使用方法。        输入端口可以由wire/reg驱动,但输入端口只能是wire;输出
    的头像 发表于 08-13 13:45 1.7w次阅读

    FPGA verilog的repeat用法例子

           大家好,又到了每日学习的时间了,今天我们来聊一聊FPGA verilog的repeat用法例子。       repeat
    的头像 发表于 08-15 14:07 1.9w次阅读
    <b class='flag-5'>简</b><b class='flag-5'>谈</b><b class='flag-5'>FPGA</b> <b class='flag-5'>verilog</b><b class='flag-5'>中</b>的repeat<b class='flag-5'>用法</b>与<b class='flag-5'>例子</b>

    verilog的initial语句说明

    解释verilog HDL的initial语句的用法
    发表于 05-31 09:11 0次下载

    FPGA设计DAC控制的Verilog实现

    FPGA设计DAC控制的Verilog实现(单片机电源维修)-该文档为FPGA设计DAC控制的Ver
    发表于 07-26 12:18 18次下载
    <b class='flag-5'>FPGA</b>设计<b class='flag-5'>中</b>DAC控制的<b class='flag-5'>Verilog</b>实现

    FPGA CPLDVerilog设计小技巧

    FPGA CPLDVerilog设计小技巧(肇庆理士电源技术有限)-FPGA CPLDVeril
    发表于 09-18 16:49 37次下载
    <b class='flag-5'>FPGA</b> CPLD<b class='flag-5'>中</b>的<b class='flag-5'>Verilog</b>设计小技巧

    FPGA如何使用Verilog处理图像

    FPGA项目旨在详细展示如何使用Verilog处理图像,从Verilog读取输入位图图像(.bmp),处理并将处理结果写入Verilog
    的头像 发表于 09-23 15:50 6071次阅读

    FPGA和USB3.0通信-FX3硬件设计

    FPGA和USB3.0通信-FX3硬件设计本次演示用的是USB3.0芯片-CYPRESS CYUSB3014(下称 FX3),该芯片是标准的USB3.0 PHY,可以大大简化使用USB...
    发表于 12-01 20:06 24次下载
    <b class='flag-5'>FPGA</b>和USB3.0通信-FX3硬件设计<b class='flag-5'>简</b><b class='flag-5'>谈</b>

    verilogfunction和task的区别

    VerilogFunction和Task是用于模块化设计和重用代码的两种重要元素。它们允许开发人员将复杂的操作分解为更小的功能单元,并在需要时调用它们。虽然Function和Ta
    的头像 发表于 02-22 15:40 1902次阅读

    verilog function函数的用法

    Verilog 是一种硬件描述语言 (HDL),主要用于描述数字电子电路的行为和结构。在 Verilog ,函数 (Function) 是一种用于执行特定任务并返回一个值的可重用代码
    的头像 发表于 02-22 15:49 5693次阅读

    verilog task和function区别

    verilog的task和function都是用于实现模块的可重复的功能,并且可以接收参数和返回结果。但是它们在编写和使用上有一些区别。下面将详细介绍task和
    的头像 发表于 02-22 15:53 1091次阅读