afei6969 发表于 2021-3-21 18:55:18

Verilog HDL 的 function说明语句

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

y 定义函数的语法:
function <返回值的类型或范围> (函数名);
<端口说明语句>
<变量类型说明语句>
begin
<语句>
........
end
endfunction
请注意<返回值的类型或范围>这一项是可选项,如缺省则返回值为一位寄存器类型数据。下面用例子
说明:
function getbyte;
input address;
begin
<说明语句> //从地址字中提取低字节的程序
getbyte = result_expression; //把结果赋予函数的返回字节
end
endfunction
y 从函数返回的值
函数的定义蕴含声明了与函数同名的、函数内部的寄存器。如在函数的声明语句中<返回值
的类型或范围>为缺省,则这个寄存器是一位的,否则是与函数定义中<返回值的类型或范围>一致的寄
存器。函数的定义把函数返回值所赋值寄存器的名称初始化为与函数同名的内部变量。下面的例子说
明了这个概念:getbyte被赋予的值就是函数的返回值。
y 函数的调用
函数的调用是通过将函数作为表达式中的操作数来实现的。
其调用格式如下:
<函数名> (<表达式><,<表达式>>*)
其中函数名作为确认符。下面的例子中通过对两次调用函数getbyte的结果值进行位拼接运算来生成
一个字。
word = control? {getbyte(msbyte),getbyte(lsbyte)} : 0;
y 函数的使用规则
与任务相比较函数的使用有较多的约束,下面给出的是函数的使用规则:
1) 函数的定义不能包含有任何的时间控制语句,即任何用#、@、或wait来标识的语句。
2) 函数不能启动任务。
3) 定义函数时至少要有一个输入参量。
4) 在函数的定义中必须有一条赋值语句给函数中的一个内部变量赋以函数的结果值,该内
部变量具有和函数名相同的名字。
y 举例说明
下面的例子中定义了一个可进行阶乘运算的名为factorial的函数,该函数返回一个32位的寄存器类
型的值,该函数可后向调用自身,并且打印出部分结果值。
module tryfact;
//函数的定义-------------------------------
functionfactorial;
inputoperand;
regindex;
begin
factorial = operand? 1 : 0;
for(index=2;index<=operand;index=index+1)
factorial = index * factorial;
end
endfunction
//函数的测试-------------------------------------
regresult;
regn;
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设计数字系统的方法和技术。

雷磊 发表于 2021-3-22 17:04:21

Verilog HDL 的 function说明语句

zhangyukun 发表于 2021-3-22 19:21:53

Verilog HDL 的 function说明语句

嘿哈嘿哈哈 发表于 2023-4-17 09:12:44

Verilog HDL 的 function说明语句
页: [1]
查看完整版本: Verilog HDL 的 function说明语句