Сгенерируйте аппаратные образцы для локальных функций

В следующем примере показано, как использовать локальные функции в MATLAB®таким образом, каждое выполнение локальной функции соответствует отдельному аппаратному модулю в сгенерированном HDL-коде.

Локальные функции MATLAB

Этот пример демонстрирует лучшие практики для записи локальных функций в код MATLAB, который подходит для генерации HDL-кода.

  • Если ваш код MATLAB выполняет локальную функцию несколько раз, сгенерированный HDL-код не обязательно создает экземпляры нескольких аппаратных модулей. Вместо того, чтобы создавать экземпляры нескольких аппаратных модулей, несколько вызовов функции обычно обновляют переменную состояния.

  • Если вы хотите, чтобы сгенерированный HDL-код содержал несколько аппаратных модулей, соответствующих каждому выполнению локальной функции, задайте две различные локальные функции с одним и тем же кодом, но различными именами функции. Если вы хотите избежать дублирования кода, рассмотрите использование System objects для реализации поведения в функции и несколько раз создайте экземпляр object™ System.

  • Если необходимо задать отдельную HDL- файла для каждой локальной функции в коде MATLAB, в Рабочий процесс Advisor, на вкладке Advanced в разделе Генерации HDL-кода, выберите Generate instantiable code for functions .

Код MATLAB для 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;

См. также

|

Похожие темы