В этом примере показана генерация кода MATLAB из проекта MATLAB ® с плавающей точкой, который не готов к генерации кода. Мы используем функцию 'coder.approximate', чтобы сгенерировать функцию MATLAB на основе интерполяционной таблицы. Эта вновь сгенерированная функция готова к генерации HDL-кода (не показана в этой демонстрации).
Код MATLAB, используемый в примере, является сигмоидной функцией, которая используется для обнаружения порога и решения проблем. Для примера нейронных сетей используйте сигмоидные функции с соответствующими порогами для 'обучения' систем для шаблонов обучения.
design_name = 'mlhdlc_approximate_sigmoid'; testbench_name = 'mlhdlc_approximate_sigmoid_tb';
Давайте посмотрим на Проект
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
MATLAB Проекта: mlhdlc_approximate_sigmoid
Тестовый набор MATLAB: mlhdlc_approximate_sigmoid_tb
Мы можем использовать coder.approximate, чтобы сгенерировать функцию замены на основе интерполяционной таблицы для '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');