Я пытаюсь создать и использовать функцию, определенную в другом модуле.

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 Starter Edition 10.0d, я получаю эту ошибку:

  Cannot open `include file "myfunction.v".

Где я ошибаюсь?

2
Swayam Prabha 11 Июл 2015 в 16:20

2 ответа

Директива include имеет тот же эффект, что и копирование и вставка этого кода в одно и то же место. Судя по вашему коду, вы пытаетесь определить модуль (simple_function) внутри другого модуля (function_calling), что не разрешено.

Ваша функция не должна содержаться внутри модуля. Вы должны изменить myfunction.v так, чтобы он содержал только определение myfunction, и полностью удалить модуль simple_function. Таким образом, когда myfunction.v включен, он имеет тот же эффект, что и функция, объявленная в function_calling.

2
Kaleb Droskiewicz 12 Авг 2015 в 20:40

Другой способ вызова функции одного модуля в другой модуль — через интерфейс. Вы можете передать интерфейсные порты в первый модуль, благодаря чему интерфейс получит все функции и задачи в него, а затем интерфейс может быть передан во второй модуль, таким образом, второй модуль может получить задачи и функции первого модуля.

-1
Samuel Liew 2 Ноя 2018 в 06:35