exponenta event banner

Генерировать HDL-совместимые замены функций таблицы подстановки с помощью coder.aproximate

В этом примере показано создание кода MATLAB из конструкции MATLAB ® с плавающей запятой, которая не готова к созданию кода. Для создания функции MATLAB на основе таблицы подстановки используется функция coder.aproximat. Эта вновь созданная функция готова к созданию кода HDL (не показано в данной демонстрации).

Введение

Код MATLAB, используемый в примере, является сигмоидной функцией, которая используется для обнаружения пороговых значений и решения проблем. Например, нейронные сети используют сигмоидные функции с соответствующими порогами для «обучения» систем для моделей обучения.

Проектирование MATLAB

design_name = 'mlhdlc_approximate_sigmoid';
testbench_name = 'mlhdlc_approximate_sigmoid_tb';

Рассмотрим конструкцию Sqrt

dbtype(design_name)
1     function y = mlhdlc_approximate_sigmoid( x )
2     %
3     
4     %   Copyright 2014-2015 The MathWorks, Inc.
5     
6         y = 1./(1+exp(-x));
7     end

Моделирование конструкции

Всегда рекомендуется моделировать конструкцию с помощью средства тестирования до создания кода, чтобы убедиться в отсутствии ошибок во время выполнения.

mlhdlc_approximate_sigmoid_tb

  1. Проектирование MATLAB: mlhdlc_approximate_sigmoid

  2. MATLAB testbench: mlhdlc_approximate_sigmoid_tb

Мы можем использовать coder.aproximate для создания функции замены на основе таблицы подстановки для «mlhdlc _ approximate _ sigmoid»

Создание новой папки и копирование соответствующих файлов

Выполните следующие строки кода, чтобы скопировать необходимые файлы примеров во временную папку.

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_fixpt_approximate'];

% create a temporary folder and copy the MATLAB files
cd(tempdir);
[~, ~, ~] = rmdir(mlhdlc_temp_dir, 's');
mkdir(mlhdlc_temp_dir);
cd(mlhdlc_temp_dir);

copyfile(fullfile(mlhdlc_demo_dir, [design_name,'.m*']), mlhdlc_temp_dir);
copyfile(fullfile(mlhdlc_demo_dir, [design_name,'_design.m*']), mlhdlc_temp_dir);
copyfile(fullfile(mlhdlc_demo_dir, [testbench_name,'.m*']), mlhdlc_temp_dir);

Генерировать замены таблицы поиска с фиксированной точкой

repCfg = coder.approximation('Function','mlhdlc_approximate_sigmoid','CandidateFunction',@mlhdlc_approximate_sigmoid,...
                          'NumberOfPoints',50,'InputRange',[-10,10],'FunctionNamePrefix','repsig_');
coder.approximate(repCfg);

Сначала преобразование с фиксированной точкой завершается с соответствующей заменой функций и следующим консольным сообщением:

### Generating approximation for 'sigmoid' : repsiglookuptable.m
### Generating testbench for 'sigmoid' : repsiglookuptable_tb.m
### LookupTable replacement for function 'sigmoid' used 50 data points

Это должно привести к созданию файлов MATLAB «repsig _ lookuptable _ tb» и «repsig _ lookuptable», содержащих тестовую среду и конструкцию соответственно.

Протестируйте функции замены

Чтобы визуально увидеть степень соответствия между функцией замены на основе таблицы поиска и исходной функцией, используйте testbench,

repsig_lookuptable_tb();

Очистка созданных файлов

Для очистки временной папки проекта можно выполнить следующие команды.

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_fixpt_approximate'];
clear mex;
cd (mlhdlc_demo_dir);
rmdir(mlhdlc_temp_dir, 's');