从Verilog中的另一个模块调用函数

时间:2015-07-11 13:20:14

标签: function

我正在尝试实例化并使用已在另一个模块中定义的函数。

module simple_function();
function  myfunction;
input a, b, c, d;
begin
   myfunction = ((a+b) + (c-d));
end
endfunction
endmodule

 module  function_calling(a, b, c, d, e, f);                   
 input a, b, c, d, e ;
 output f;
 wire f;
 `include "myfunction.v" 
 assign f =  (myfunction (a,b,c,d)) ? e :0;
 endmodule

我从http://www.asic-world.com/verilog/task_func1.html获得了此代码 但是,当我在ModelSim Altera入门版10.0d中执行相同操作时,我收到此错误:

  Cannot open `include file "myfunction.v".

我哪里错了?

2 个答案:

答案 0 :(得分:1)

include指令与在同一位置复制和粘贴代码具有相同的效果。从您的代码看,您似乎正在尝试在另一个模块(function_calling)中定义模块(simple_function),这是不允许的。

您的功能不需要包含在模块中。您应该将myfunction.v更改为仅包含myfunction定义并完全删除simple_function模块。这样当包含myfunction.v时,它与在function_calling中声明的函数具有相同的效果。

答案 1 :(得分:-1)

将一个模块的功能调用到另一个模块的另一种方法是通过接口。您可以将接口端口传递到第一个模块中,因为该接口会将所有功能和任务都带入其中,然后可以将接口传递到第二个模块中,这样第二个模块就可以获取第一个模块的任务和功能。