为什么在有模块时使用verilog中的函数

时间:2017-12-23 18:51:45

标签: verilog hdl hardware-programming

第1部分

我总是被告知要使用Verilog中的函数来避免代码重复。但我不能用模块做到这一点吗?如果我的理解是正确的,那么所有函数都可以在Verilog中重写为模块,除了模块不能从always块的内部实例化。除此之外,在这种情况下,我总是坚持使用模块。我对么?

第2部分

如果我是正确的,为什么Verilog编译器不能以模块获得函数处理的方式编写?我的意思是,为什么编译器不能允许程序员在n块中实例化一个模块并停止支持函数?

1 个答案:

答案 0 :(得分:2)

  1. 模块!=功能。它们在verilog中的用法完全不同。

    函数实际上是扩展表达式,它在表达式中使用。它可以用在'assign'语句的rhs表达式中,也可以用在任何过程块内的表达式中。

    • 功能无法消耗时间。

    • 函数必须返回一个值。


    模块用于表示硬件层次结构并包含并发过程块(可能包含函数)。

    • 模块可能会耗费时间。

    • 模块无法返回值。 (输出端口不是返回值)


    您可以创建一个替换单个始终块的内部的函数,并使用返回函数的always块写入等效模块。但就是这样。

  2. 你不正确:)。 Verilog编译器不能以这种方式编写,因为每个verilog编译器都必须遵循verilog标准。否则它不会是verilog。