В следующем примере показано, как использовать локальные функции в MATLAB®таким образом, каждое выполнение локальной функции соответствует отдельному аппаратному модулю в сгенерированном HDL-коде.
Этот пример демонстрирует лучшие практики для записи локальных функций в код MATLAB, который подходит для генерации HDL-кода.
Если ваш код MATLAB выполняет локальную функцию несколько раз, сгенерированный HDL-код не обязательно создает экземпляры нескольких аппаратных модулей. Вместо того, чтобы создавать экземпляры нескольких аппаратных модулей, несколько вызовов функции обычно обновляют переменную состояния.
Если вы хотите, чтобы сгенерированный HDL-код содержал несколько аппаратных модулей, соответствующих каждому выполнению локальной функции, задайте две различные локальные функции с одним и тем же кодом, но различными именами функции. Если вы хотите избежать дублирования кода, рассмотрите использование System objects для реализации поведения в функции и несколько раз создайте экземпляр object™ System.
Если необходимо задать отдельную HDL- файла для каждой локальной функции в коде MATLAB, в Рабочий процесс Advisor, на вкладке Advanced в разделе Генерации HDL-кода, выберите Generate instantiable code for functions .
mlhdlc_two_counters.m
Эта функция создает два счетчика и добавляет выходы этих счетчиков. Чтобы создать два счетчика, существуют две локальные функции с идентичным кодом, counter
и counter2
. Основной метод вызывает каждую из этих локальных функций один раз. Если функция должна была вызвать counter
дважды, отдельные аппаратные модули для счетчиков не будут сгенерированы в HDL-коде.
%#codegen function total_count = mlhdlc_two_counters(a,b) %This function contains two different local functions with identical %counters and calls each counter once. total_count1=counter(a); total_count2=counter2(b); total_count=total_count1+total_count2; function count = counter(enable_ctr) %four bit synchronous up counter %persistent variable for the state persistent count_val; if isempty(count_val) count_val = 0; end %counting up if enable_ctr count_val=count_val+1; end %limit from four bits if count_val>15 count_val=0; end count=count_val; function count = counter2(enable_ctr) %four bit synchronous up counter %persistent variable for the state persistent count_val; if isempty(count_val) count_val = 0; end %counting up if enable_ctr count_val=count_val+1; end %limit from four bits if count_val>15 count_val=0; end count=count_val;