Verilog HDL高级语法结构―函数(function)

来源:本站
导读:目前正在解读《Verilog HDL高级语法结构―函数(function)》的相关信息,《Verilog HDL高级语法结构―函数(function)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Verilog HDL高级语法结构―函数(function)》的详细说明。
简介:本文介绍了Verilog HDL高级语法结构―函数(function)

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

1.函数定义语法

function返回值的类型或范围> (函数名);

端口说明语句>

变量类型说明语句> begin

语句>

...

end

endfunction

请注意返回值的类型或范围>这一项是可选项,如缺省则返回值为一位寄存器类型数据。下面用例子说明:

function[7:0] getbyte;

input [15:0] address;

begin

说明语句> //从地址字中提取低字节的程序

getbyte = result_expression; //把结果赋予函数的返回字节

end

endfunction

2.函数返回值

函数的定义蕴含声明了与函数同名的、函数内部的寄存器。如在函数的声明语句中返回值的类型或范围>为缺省,则这个寄存器是一位的;否则是与函数定义中返回值的类型或范围>一致的寄存器。

函数的定义把函数返回值所赋值寄存器的名称初始化为与函数同名的内部变量。上面的例子说明了这个概念:getbyte被赋予的值就是函数的返回值。

3.函数调用

函数的调用是通过将函数作为表达式中的操作数来实现的,其调用格式如下:

函数名> (表达式>,表达式>>*)

其中函数名作为确认符。下面的例子中通过对两次调用函数getbyte的结果值进行位拼接运算来生成一个字。

word = control? {getbyte(msbyte),getbyte(lsbyte)} : 0;

4.函数使用规则

与任务相比函数的使用有较多的约束,下面给出的是函数的使用规则。

• 函数的定义不能包含有任何的时间控制语句,即任何用#、@、或wait来标识的语句。

• 函数不能启动任务。

• 定义函数时至少要有一个输入参量。

• 在函数的定义中必须有一条赋值语句给函数中的一个内部变量赋以函数的结果值,该内部变量具有和函数名相同的名字。

5.实例详解

下面的例子中定义了一个可进行阶乘运算的名为factorial的函数,该函数返回一个32位的寄存器类型的值,该函数可后向调用自身,并且打印出部分结果值。

module tryfact; //模块开始

//函数的定义-------------------------------

function[31:0]factorial; //函数开始

input[3:0]operand; //函数的入口

reg[3:0]index; //函数的寄存器

begin

factorial = operand? 1 : 0; //若operand全为0,则为0

for(index=2;index=operand;index=index+1) //循环语句

factorial = index * factorial; //乘法器

end

endfunction //函数结束

//函数的测试-------------------------------------

reg[31:0]result;

reg[3:0]n;

initial begin

result=1;

for(n=2;n=9;n=n+1) begin //循环语句(调用函数)

$display(Partial result n= %d result= %d, n, result); //每次函数的执行结果

result = n * factorial(n)/((n*2)+1); //调用函数

end

$display(Finalresult=%d,result); //打印结果

end

endmodule //模块结束

提醒:《Verilog HDL高级语法结构―函数(function)》最后刷新时间 2024-03-14 01:15:38,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Verilog HDL高级语法结构―函数(function)》该内容的真实性请自行鉴别。