简谈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技术与生态的创新中心落户重庆西永微电园 英特尔将为我国提供相关技术

近日,英特尔FPGA中国创新中心正式在西永微电子产业园揭幕。

的头像 半导体动态 发表于 12-19 14:53 58次 阅读
全球最大的聚焦FPGA技术与生态的创新中心落户重庆西永微电园 英特尔将为我国提供相关技术

简评FPGA——Arduino MKR Vidor 4000

Arduino MKR Vidor 4000的出现确实让我挺意外的,为何?因为它是一款FPGA开发板....

的头像 人间烟火123 发表于 12-19 14:31 38次 阅读
简评FPGA——Arduino MKR Vidor 4000

AD9444设计中出现严重发热

我在使用ADI9444型号产品时出现发热严重问题,后面附上我做的电路图,我的想法是用AD9444进行数据转换后然后传到FPGA中...

发表于 12-19 14:01 9次 阅读
AD9444设计中出现严重发热

ICX692AQA搭配AD9945的图像处理边缘出现颗粒噪声

现在在做一个CCD的工业相机,采用的sensor是sony的ICX692AQA,A/D是AD9945。控制信号的发生和图像数据的处理是由F...

发表于 12-19 14:01 6次 阅读
ICX692AQA搭配AD9945的图像处理边缘出现颗粒噪声

使用verilogHDL实现乘法器

本文在设计实现乘法器时,采用了4-2和5-2混合压缩器对部分积进行压缩,减少了乘法器的延时和资源占 ....

发表于 12-19 13:30 19次 阅读
使用verilogHDL实现乘法器

【PYNQ-Z2申请】燃气安全监测以及视频火灾报警

项目名称:燃气安全监测以及视频火灾报警 试用计划:本人有FPGA逻辑开发5年的工作经验,开发过以太网、高速AD采集、以及...

发表于 12-19 11:37 17次 阅读
【PYNQ-Z2申请】燃气安全监测以及视频火灾报警

【PYNQ-Z2申请】基于PYNQ的卷积神经网络加速

项目名称:基于PYNQ的卷积神经网络加速 试用计划:申请理由:本人研究生在读,想要利用PYNQ深入探索卷积神经网络的硬...

发表于 12-19 11:37 11次 阅读
【PYNQ-Z2申请】基于PYNQ的卷积神经网络加速

如何购买设备锁定许可证?

我有一个使用xc6slx150的SPARTAN-6 FPGA板。 不幸的是,我没有与董事会相关的许可文件。 我想将Xilinx ISE 14....

发表于 12-19 11:09 7次 阅读
如何购买设备锁定许可证?

如何使用fpga实现数字基带中环路延时估计

基于FPGA芯片Stratix II EP2S60F672C4设计实现了数字基带预失真系统中的环路延....

发表于 12-19 11:04 14次 阅读
如何使用fpga实现数字基带中环路延时估计

Xilinx FPGA的命名法

大家好, 在virtex-7 VC709主板上,'VC709'代表什么? 以上来自于谷歌翻译 以下为原文 Hi all, in virtex-7 ...

发表于 12-19 11:03 12次 阅读
Xilinx FPGA的命名法

利用FPGA解决TMS320C54K/SDRAM的接口问题

[table] [tr][td]在DSP应用系统中,需要大量外扩存储器的情况经常遇到。例如,在数码相机和摄像机中,为了将现场拍摄的诸多图...

发表于 12-19 10:46 18次 阅读
利用FPGA解决TMS320C54K/SDRAM的接口问题

FPGA驱动VGA显示不正常

        小生最近在尝试着做VGA的驱动,遇到了一个小问题请教下大家。我在工程中用assign把V...

发表于 12-19 10:34 19次 阅读
FPGA驱动VGA显示不正常

chipscope没有信号,warning说数据显示不完整,不知道原因

截图如图,该状态是采集卡ad没有信号的时候,按理说应该是幅值很小的底噪,结果是图中这样有点离散的波形。这种情况有时候发生,...

发表于 12-19 10:27 32次 阅读
chipscope没有信号,warning说数据显示不完整,不知道原因

基于fpga和单片机的程控滤波器

以单片机和可编程逻辑器件(FPGA)为控制核心,设计了一个程控滤波器,实现了小信号程控放大、程控调整....

发表于 12-19 10:26 23次 阅读
基于fpga和单片机的程控滤波器

FPGA报错,添加了时钟时序,还有这个报错怎么解决?

Critical Warning (332168): The following clock transfers have no clock uncertainty assignment. For more accurate res...

发表于 12-19 10:08 31次 阅读
FPGA报错,添加了时钟时序,还有这个报错怎么解决?

基于fpga的过采样技术设计

过采样技术是数字信号处理者用来提高模数转换器(ADC)性能经常使用的方法之一,它通过减小量化噪声,提....

发表于 12-19 09:55 13次 阅读
基于fpga的过采样技术设计

如何使用fpga做数字磁通传感器系统

针对传统磁通门信号处理电路中模拟元件的缺点,设计一种基于现场可编程门阵列(FPGA)的数字磁通门系统....

发表于 12-19 09:21 18次 阅读
如何使用fpga做数字磁通传感器系统

如何使用DSP和FPGA进行实时视频信号处理系统设计

实时视频信号处理的实时性和跟踪算法的复杂性是一对矛盾,为此采用DSP+FPGA 的架构设计,同时满足....

发表于 12-18 19:27 23次 阅读
如何使用DSP和FPGA进行实时视频信号处理系统设计

如何使用FPGA进行多通道同步数据采集系统的设计

结合数据采集在往复式压缩机在线监测系统中的应用, 设计了以FPGA(现场可编程门阵列)为核心的逻辑控....

发表于 12-18 19:09 17次 阅读
如何使用FPGA进行多通道同步数据采集系统的设计

谈谈FPGA设计的经验技巧

FPGA 设计者的这5项基本功不是孤立的,必须结合使用,才能完成一个完整的FPGA设计流程。反过来说....

的头像 电子发烧友网工程师 发表于 12-18 10:13 263次 阅读
谈谈FPGA设计的经验技巧

Xilinx FPGA的三种片上存储资源

Xilinx FPGA有三种可以用来做片上存储(RAM,ROM等等)的资源,第一个就是Flip Fl....

发表于 12-16 11:31 88次 阅读
Xilinx FPGA的三种片上存储资源

利用FPGA工具设置优化FPGA HLS设计

高层次的设计可以让设计以更简洁的方法捕捉,从而让错误更少,调试更轻松。然而,这种方法最受诟病的是对性....

发表于 12-16 11:19 83次 阅读
利用FPGA工具设置优化FPGA HLS设计

数字电源模块在FPGA供电设计的应用

被广泛应用于各种产品,具有开发时间短、成本效益高以及灵活的现场重配置与升级等诸多优点。很多新型FPG....

发表于 12-16 11:15 361次 阅读
数字电源模块在FPGA供电设计的应用

探析FPGA和ASIC的原理和区别

FPGA是可编程ASIC。 ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造....

的头像 贸泽电子设计圈 发表于 12-15 09:58 344次 阅读
探析FPGA和ASIC的原理和区别

如何进行FPGA设计开发FPGA设计的经验技巧说明

大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、....

的头像 传感器技术 发表于 12-15 09:54 359次 阅读
如何进行FPGA设计开发FPGA设计的经验技巧说明

Altera发布其基于ARM的SoC FPGA系列产品

公司发布其基于ARM的SoC 系列产品,在单芯片中集成了28-nm Cyclone V和Arria ....

发表于 12-15 09:50 214次 阅读
Altera发布其基于ARM的SoC FPGA系列产品

如何在FPGA动态局部可重构中进行TBUF总线宏设计

FPGA 动态局部可重构技术通常将系统划分为固定模块和可重构模块,可重构模块与其他模块之间的通信都是....

发表于 12-14 14:27 28次 阅读
如何在FPGA动态局部可重构中进行TBUF总线宏设计

阐释数字电源模块如何满足FPGA的供电需求

瑞萨电子提供的PowerNavigator GUI软件可帮助用户加速电源设计、测试、定型和调试。用户....

的头像 瑞萨电子 发表于 12-14 10:40 358次 阅读
阐释数字电源模块如何满足FPGA的供电需求

如何使用FPGA设计一种通用微处理器的资料概述

本文详细介绍了一种借助VHDL 硬件描述性语言实现基于FPGA 硬件平台的通用微处理器设计的完整方案....

发表于 12-13 18:00 48次 阅读
如何使用FPGA设计一种通用微处理器的资料概述

如何使用FPGA实现一种图像预处理结构及典型算法

图像滤波和边缘检测等预处理算法是视觉导航系统中道路检测和车辆检测等复杂视觉处理的前提,其性能和处理时....

发表于 12-13 17:56 40次 阅读
如何使用FPGA实现一种图像预处理结构及典型算法

如何使用FPGA设计与实现一种全数字BPSK解调器

介绍一种全数字BPSK 解调器的设计及FPGA 实现。该解调器采用前向开环的结构实现载波同步,与传统....

发表于 12-13 17:56 36次 阅读
如何使用FPGA设计与实现一种全数字BPSK解调器

如何使用FPGA设计和实现OFDM系统和OFDM中的FFT模块设计及其FPGA实现

建立了一个基于FPGA的可实现流水化运行的OFDM系统的硬件平台,包括模拟前端、基于FPGA的OFD....

发表于 12-13 16:45 46次 阅读
如何使用FPGA设计和实现OFDM系统和OFDM中的FFT模块设计及其FPGA实现

我们要学好FPGA必须掌握以下知识

四个字母Field(现场) Programmable(可编程) Gate(逻辑门) Array(阵列....

发表于 12-13 15:59 166次 阅读
我们要学好FPGA必须掌握以下知识

Efinix® 推出Trion™ T20 FPGA样品 支持主要客户和市场的需求

香港– 2018年12月13日 – 可编程产品平台和技术创新企业Efinix®今天宣布提供Trion....

发表于 12-13 15:50 95次 阅读
Efinix® 推出Trion™ T20 FPGA样品 支持主要客户和市场的需求

如何使用Verilog-HDL做CPLD设计的时序逻辑电路的实现

本文档的主要内容详细介绍的是如何使用Verilog-HDL做CPLD设计的时序逻辑电路的实现。

发表于 12-12 16:25 20次 阅读
如何使用Verilog-HDL做CPLD设计的时序逻辑电路的实现

FPGA企业与大学生交流,产教结合助推人才培养

导读:人才是集成电路发展的根本,除了学校教育以外,企业的参与可以帮助学生快速理解市场需求,近日在南京....

的头像 李弯弯 发表于 12-11 18:04 1718次 阅读
FPGA企业与大学生交流,产教结合助推人才培养

多功能智能小车系统设计的毕业设计论文免费下载

本设计的多功能智能小车系统是以Altera公司Cyclone系列的EP1C3T144为主控芯片的小车....

发表于 12-11 16:44 121次 阅读
多功能智能小车系统设计的毕业设计论文免费下载

Achronix推出其第四代嵌入式FPGA产品

Achronix半导体公司推出其第四代嵌入式FPGA产品Speedcore Gen4 eFPGA I....

发表于 12-10 17:28 93次 阅读
Achronix推出其第四代嵌入式FPGA产品

如何使用FPGA设计高速实时数据采集存储系统的资料概述

设计了以FPGA器件XCSVIXS0为核心处理芯片的高速数据采集存储系统。在XCSVLXS0内部实现....

发表于 12-10 16:47 59次 阅读
如何使用FPGA设计高速实时数据采集存储系统的资料概述

怎么监控FPGA内部的温度和电压变化情况

打开例程工程后,我们可以查看工程源代码和仿真TestBench来学习,对工程进行更详细的研究和IP核....

的头像 FPGA2嵌入式 发表于 12-10 11:33 393次 阅读
怎么监控FPGA内部的温度和电压变化情况

基于AXI总线的未知信号频率测量

这一节我们实现一个稍微复杂一点的功能——测量未知信号的频率,PS和PL通过AXI总线交互数据,实现我....

发表于 12-08 11:00 97次 阅读
基于AXI总线的未知信号频率测量

EDA实验之在FPGA上设计一个DDS模块

在FPGA上设计一个DDS模块,在DE0 开发板上运行,在FPGA芯片内部合成出数字波形即可。

发表于 12-08 09:18 124次 阅读
EDA实验之在FPGA上设计一个DDS模块

采用LED光通信技术实现温度实时显示系统的设计

LED光通信,就是用LED光来实现无线通信,主要是靠发光二极管(LED)发出的高速亮灭闪烁信号来传输....

发表于 12-08 08:21 139次 阅读
采用LED光通信技术实现温度实时显示系统的设计

从一个FPGA厂商转变为一个提供系统设计的厂商 赛灵思转型成功

如今随着芯片工艺的演进,一方面我们看到芯片尺寸越来越小,性能越来越提升,另一方面集成度也在不断提高。....

发表于 12-07 17:02 252次 阅读
从一个FPGA厂商转变为一个提供系统设计的厂商 赛灵思转型成功

如何使用USB2.0和DDR2进行数据采集系统设计与FPGA实现资料概述

采用DDR2 SDRAM作为被采集数据的缓存技术, 给出了USB2.0与DDR2相结合的实时、高速数....

发表于 12-07 16:12 53次 阅读
如何使用USB2.0和DDR2进行数据采集系统设计与FPGA实现资料概述

如果能在SoC中嵌入一个FPGA核心 那么芯片将具备出色的机器学习能力

人工智能是当下最火爆的话题。据说,与人工智能相关的市场规模十分巨大,是继PC市场、移动互联网市场之后....

发表于 12-07 13:36 157次 阅读
如果能在SoC中嵌入一个FPGA核心 那么芯片将具备出色的机器学习能力

Quartus-II使用教程之Quartus Ⅱ的Verilog HDL建模与仿真资料说明

本文档的主要内容详细介绍的是Quartus-II使用教程之Quartus Ⅱ的Verilog HDL....

发表于 12-07 08:00 23次 阅读
Quartus-II使用教程之Quartus Ⅱ的Verilog HDL建模与仿真资料说明

Microsemi Corporation推出了新型SoC FPGA架构扩展其Mi-V生态系统

2018年12月5日—— 在5G、机器学习和物联网(IoT)联合推动的新计算时代,嵌入式开发人员需要....

发表于 12-06 16:27 171次 阅读
Microsemi Corporation推出了新型SoC FPGA架构扩展其Mi-V生态系统

Xilinx推出可扩展处理平台架构 设计人员可同时拥有串行并行处理能力

无论是汽车驾驶辅助、智能视频监控、工业自动化、航天与国防或是无线通信等终端应用,功能的日益复杂使得嵌....

发表于 12-06 16:24 139次 阅读
Xilinx推出可扩展处理平台架构 设计人员可同时拥有串行并行处理能力

AI芯片如果有罗马大道 必定归功可重构计算

在芯片架构设计领域中,可重构计算技术并非一项新的存在。20世纪60年代末,加利福尼亚大学的Gerai....

的头像 电子发烧友网工程师 发表于 12-06 08:44 977次 阅读
AI芯片如果有罗马大道 必定归功可重构计算

FPGA如何实现30倍的高性能计算

FPGA(Field Programmable Gate Array)现场可编程门阵列,作为AS....

的头像 电子发烧友网工程师 发表于 12-06 08:36 354次 阅读
FPGA如何实现30倍的高性能计算

如何使用MicroBlaze软核进行FPGA片上系统设计

Xilinx公司的MicroBlaze 32位软处理器核是支持CoreConnect总线的标准外设集....

发表于 12-05 17:18 38次 阅读
如何使用MicroBlaze软核进行FPGA片上系统设计

站在FPGA的肩膀上 AI可重构芯片诞生

在芯片架构设计领域中,可重构计算技术并非一项新的存在。20世纪60年代末,加利福尼亚大学的Gerai....

发表于 12-03 10:09 575次 阅读
站在FPGA的肩膀上 AI可重构芯片诞生

基于闪存FPGA的门阵列为设计带来更多灵活性

另一方面,在基于闪存的FPGA中,配置模式保存在芯片上的非易失性存储器单元,甚至电源被移除时,闪存单....

发表于 12-02 10:24 615次 阅读
基于闪存FPGA的门阵列为设计带来更多灵活性

赛灵思推出全新系列的产品类型ACAP 媲美CPU、GPU的新一代FPGA架构

当博通收购高通案遭到美国总统特朗普的阻止后,下一个被华尔街分析师看准的“目标”便锁定在圣何塞芯片厂商....

发表于 12-01 10:47 702次 阅读
赛灵思推出全新系列的产品类型ACAP 媲美CPU、GPU的新一代FPGA架构

xilinx FPGA bit 文件加密

当你的项目终于做完了,到了发布的关键节点,为了防止自己的心血被别人利用,最好对产品进行bit加密。 ....

的头像 电子发烧友网工程师 发表于 12-01 09:33 316次 阅读
xilinx FPGA bit 文件加密

赛灵思官方博客本周主打:云端时序收敛,高效可靠

Plunify Cloud 云平台为 FPGA 工程师极大地简化了使用云服务器的技术与安全要求。

的头像 电子发烧友网工程师 发表于 12-01 08:52 331次 阅读
赛灵思官方博客本周主打:云端时序收敛,高效可靠

FPGA的几点重要总结

FPGA编程语言为何叫硬件描述语言? 硬件即FPGA硬件,硬件描述语言,也就自然地告诉....

的头像 电子发烧友网工程师 发表于 12-01 08:30 400次 阅读
FPGA的几点重要总结

Achronix半导体全面对接Speedcore eFPGA技术

该组项目将使研究机构和公司能够使用Achronix高性能Speedcore eFPGA技术快速构建低....

的头像 电子发烧友网工程师 发表于 12-01 08:25 402次 阅读
Achronix半导体全面对接Speedcore eFPGA技术

如何使用FPGA和DSP进行精度数字频率计的设计

本设计根据等精度的多周期同步测频原理,采用Altera 公司的FLEX10K10 系列FPGA 和T....

发表于 11-30 15:41 74次 阅读
如何使用FPGA和DSP进行精度数字频率计的设计

TMP411 ±1°C Programmable Remote/Local Digital Out Temperature Sensor

TMP411设备是一个带有内置本地温度传感器的远程温度传感器监视器。远程温度传感器,二极管连接的晶体管通常是低成本,NPN或PNP型晶体管或二极管,是微控制器,微处理器或FPGA的组成部分。 远程精度为±1 °C适用于多个设备制造商,无需校准。双线串行接口接受SMBus写字节,读字节,发送字节和接收字节命令,以设置报警阈值和读取温度数据。 TMP411器件中包含的功能包括:串联电阻取消,可编程非理想因子,可编程分辨率,可编程阈值限制,用户定义的偏移寄存器,用于最大精度,最小和最大温度监视器,宽远程温度测量范围(高达150°C),二极管故障检测和温度警报功能。 TMP411器件采用VSSOP-8和SOIC-8封装。 特性 ±1°C远程二极管传感器 ±1°C本地温度传感器 可编程非理想因素 串联电阻取消 警报功能 系统校准的偏移寄存器 与ADT7461和ADM1032兼容的引脚和寄存器 可编程分辨率:9至12位 可编程阈值限...

发表于 09-19 16:35 8次 阅读
TMP411 ±1°C Programmable Remote/Local Digital Out Temperature Sensor

TMP468 具有引脚可编程的总线地址的高精度远程和本地温度传感器

TMP468器件是一款使用双线制SMBus或I 2 C兼容接口的多区域高精度低功耗温度传感器。除了本地温度外,还可以同时监控多达八个连接远程二极管的温度区域。聚合系统中的温度测量可通过缩小保护频带提升性能,并且可以降低电路板复杂程度。典型用例为监测服务器和电信设备等复杂系统中不同处理器(如MCU,GPU和FPGA)的温度。该器件将诸如串联电阻抵消,可编程非理想性因子,可编程偏移和可编程温度限值等高级特性完美结合,提供了一套精度和抗扰度更高且稳健耐用的温度监控解决方案。 八个远程通道(以及本地通道)均可独立编程,设定两个在测量位置的相应温度超出对应值时触发的阈值。此外,还可通过可编程迟滞设置避免阈值持续切换。 TMP468器件可提供高测量精度(0.75°C)和测量分辨率(0.0 625°C)。该器件还支持低电压轨(1.7V至3.6V)和通用双线制接口,采用高空间利用率的小型封装(3mm×3mm或1.6mm×1.6mm),可在计算系统中轻松集成。远程结支持-55°C至+ 150°C的温度范围。 特性 8通道远程二极管温度传感器精度:±0.75&...

发表于 09-18 16:05 8次 阅读
TMP468 具有引脚可编程的总线地址的高精度远程和本地温度传感器