Я пытаюсь создать и использовать функцию, определенную в другом модуле.
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 ответа
Директива include имеет тот же эффект, что и копирование и вставка этого кода в одно и то же место. Судя по вашему коду, вы пытаетесь определить модуль (simple_function) внутри другого модуля (function_calling), что не разрешено.
Ваша функция не должна содержаться внутри модуля. Вы должны изменить myfunction.v так, чтобы он содержал только определение myfunction, и полностью удалить модуль simple_function. Таким образом, когда myfunction.v включен, он имеет тот же эффект, что и функция, объявленная в function_calling.
Другой способ вызова функции одного модуля в другой модуль — через интерфейс. Вы можете передать интерфейсные порты в первый модуль, благодаря чему интерфейс получит все функции и задачи в него, а затем интерфейс может быть передан во второй модуль, таким образом, второй модуль может получить задачи и функции первого модуля.
Похожие вопросы
Новые вопросы
function
Функция (также называемая процедурой, методом, подпрограммой, подпрограммой или макросом) — это часть кода, предназначенная для выполнения одной конкретной задачи. Используйте этот тег для вопросов, которые конкретно связаны с созданием или вызовом функций. Чтобы получить помощь в реализации функции для выполнения задачи, используйте вместо нее [алгоритм] или тег для конкретной задачи. Создавая функцию, логику можно изолировать и вызывать многократно.