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

大家好,又到了每日学习的时间了,今天我们来聊一聊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)函数调用语句不能单独作为一条语句出现,只能作为赋值语句的右端操作数。
今天就聊到这里,各位,加油。

动力电池模组激光焊接的过程实时监测研究
区块链将会如何赋能财富传承
分析一下PCBA电路板批量生产顺利实施的4个技巧
双锁相环邻频调制器制作,Phase-locked loop
解读无人驾驶将会在未来大放异彩的十三大理由
简谈FPGA verilog中的function用法与例子
USBKEY U盾 密码器 加密狗 50拼板Protel 99se 设计
中恒派威与富昌电子形成战略联盟 切入LED智能照明市场
浅谈区块链去中心化与规模扩展之间的矛盾
cpu风扇怎么拆_cpu风扇拆卸注意事项
线上:国内收入最高的VR游戏不过百万级,现在国内比较好的VR游戏有哪些?
瑞士国际航空迎来了首架空客A320neo飞机
苹果CEO库克宣布下一代技术战略目标:专注增强现实
芯片都有多少层电路呢
森林防火通信系统中无线宽带mesh自组网应急通信解决方案
GPGPU在关键军事情报中不断变化的作用
Zenimax Media刚刚被微软以75亿美元的价格收购
工业路由器在快递自提柜上的作用
70+高分子行业上市公司陆续发布了2020年半年度报告
瑞士开发新半导体材料-辉钼矿