Verilog 中的函数
Verilog HDL与大多数可编程语言一样,将使用率很高的代码,按照软件工程的思想,写成函数,这样,该函数可以被多次调用。
Verilog中函数常用语三种情况:
- 1. 数学算术操作 Mathematical Manipulation
- 2. 组合逻辑 Combinational Logic Sequences
- 3. 数据的转换 Conversions of Data
Verilog中的函数与C语言中的函数的主要不同之处是:在Verilog中,调用函数时,需要将一个或则多个自变量传给函数;经过0时间的仿真,将函数的结果返回给调用点。
遵循的规则
函数至少要有一个输入量和一个输出量。
函数只能在always或initial块中调用。
函数不能同时包含always和initial块,不能含有任何延迟以及时间或事件控制的描述。
函数可以使用本地变量作为输入。
函数不能使用wire数据类型。
函数只能用行为级来描述。
函数中的数据的实际操作限定在begin和end之间。
原文:http://www.see.ed.ac.uk/~gerard/Teach/Verilog/me5cds/me95cab0.html
任务与函数的不同
任务和函数可以按照相同的方式来调用,但是它们之间有很大的不同。
函数 | 任务 |
函数不能调用任务,但是可以调用其他函数。 | 任务既可以调用函数,也可以调用其他任务。 |
执行函数使用的仿真时间为0。(函数的编译时间不会增加?) | 执行任务的仿真时间为0,但是按照需要,仿真时间可能不为0。 |
函数中,不能含有含有延迟,以及事件和时序控制声明语句。 | 任务中可以包含任何声明。 |
调用函数时,必须至少传递一个变量。 | 任务可以使用多个或者不使用变量,其变量的数据端口可以是output 、input或 inout。 |
函数只能返回一个值,而且不能使用output和inout描述。 | 任务不能返回任何数值,但是可以通过output、inout传递多个值。 |
原文:http://www.see.ed.ac.uk/~gerard/Teach/Verilog/me5cds/me95cab2.html