语法:

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)函数调用语句不能单独作为一条语句出现,只能作为赋值语句的右端操作数。

verilog的function使用的更多相关文章

  1. verilog中function的使用

    函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不允 ...

  2. $clog2(转)

    (转http://www.xilinx.com/support/answers/44586.html) 13.2 Verilog $clog2 function implemented imprope ...

  3. 通过百度echarts实现数据图表展示功能

    现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解 ...

  4. verilog中的function用法与例子

    函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不允 ...

  5. (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)

    1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...

  6. Verilog function的使用

    function的用法 function的标准写法如下: function  <返回值的类型或是范围>  (函数名): <端口说明语句> //input xxx <变量类 ...

  7. verilog function功能函数写法

    :] sm2tc; :] din; :] dp; :] dn; :] dout; begin dp = {'b0, din[14:0]}; dn = ~dp + 'b1; dout = (din[] ...

  8. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  9. system verilog的一些总结(从其他博客复制来的)

    转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...

随机推荐

  1. GitHub的学习和使用

    大二寒假阶段: 今天初学了GitHub,并下载了git base,在如下大佬给的链接下并完成了新用户的注册以及项目的上传学习. 网站的新用户注册界面:                https://g ...

  2. 1811 06 pygame 的继续开发

    早上看了  高数和python   好像系统没有保存  桑心啊 关于游戏背景的制作 游戏背景就是    背景在移动  而主人物还在原位置的    常常用于跑酷游戏类  背景开始绘制两张图像  一张完全 ...

  3. iOS 蓝牙开发详解

    目前iOS智能硬件的开发交互方式主要分为两种,一种是基于低功耗的蓝牙4.0技术(由于耗电低,也称作为BLE(Bluetooth Low Energy))对应iOS的框架为CoreBluetooth,另 ...

  4. 28. docker swarm 容器编排简介

    1.采用集群架构 集群架构包含节点和角色 docker 节点中 包含 worker 和 manager 两个角色 manager 相当于 swarm 集群的 大脑  是用来管理配置节点的 (避免单点故 ...

  5. h5-圆角的使用-案例安卓机器人

    1.圆角的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. CMake命令之export

    CMake中与export()相关的命令 (注:红色字体是标题,粉色是需要特别需要注意的地方) 总的来说,export()命令想要做的事情可以用一句话概括:Export targets from th ...

  7. keil5最新破解教程(可以使用到2032年哦!):

    keil5最新破解教程(可以使用到2032年哦!): 首先附上破解软件下载链接:https://github.com/lzfyh2017/keil5- 相信不少小伙伴使用的keil5都快要到期了,那么 ...

  8. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  9. PAT Advanced 1041 Be Unique (20) [Hash散列]

    题目 Being unique is so important to people on Mars that even their lottery is designed in a unique wa ...

  10. ZJNU 1213 - 取水——高级

    某个村庄i可以打一口井取水花费费用Wi,也可以与有水的村庄连接取水 又因为不可能没有一个村庄不打井(即至少有一个村庄打井,其余村庄连向它) 实际上就可以理解为,将水井看作第N+1个村庄,需要有村庄与这 ...