exponenta event banner

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

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

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

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

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

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

  • Если требуется указать отдельный файл HDL для каждой локальной функции в коде MATLAB, на вкладке Дополнительно (Advisor) в разделе Создание кода HDL (HDL Code Generation) выберите Генерировать код экземпляра для функций (Generate instantable 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;

См. также

|

Связанные темы