С помощью Coder™ HDL можно обрабатывать функции, которые не поддерживаются для фиксированной точки, и заменять собственные функции. Чтобы заменить пользовательскую функцию таблицей подстановки, используйте приложение кодера HDL или fiaccel codegen функция.
В этом примере показано, как заменить пользовательскую функцию таблицей подстановки с помощью приложения Кодер HDL.
Создание алгоритмов и тестовых файлов
В локальной папке с возможностью записи:
Создайте функцию MATLAB ® ,custom_fcn, которая является функцией, которую требуется заменить.
function y = custom_fcn(x) y = 1./(1+exp(-x)); end
Создание функции-оболочки, вызывающей custom_fcn.
function y = call_custom_fcn(x) y = custom_fcn(x); end
Создайте тестовый файл, custom_test, которая использует call_custom_fcn.
close all x = linspace(-10,10,1e3); for itr = 1e3:-1:1 y(itr) = call_custom_fcn( x(itr) ); end plot( x, y );
Создание и настройка проекта кодера HDL
Перейдите к рабочей папке, содержащей файл для этого примера.
Чтобы открыть приложение Кодер HDL, в командной строке MATLAB введите hdlcoder. Задать для имени значение custom_project.prj и нажмите ОК. Проект откроется в рабочей области MATLAB.
В окне проекта на вкладке Функция MATLAB щелкните ссылку Добавить функцию MATLAB. Перейдите к файлу call_custom_fcn.mи нажмите кнопку «ОК», чтобы добавить файл в проект.
Определение типов ввода
Определение типов ввода для call_custom_fcn.m, на вкладке Функция MATLAB (MATLAB Function) щелкните Автоопределение типов (Autodefine types).
Добавить custom_test в виде тестового файла и нажмите кнопку Выполнить.
Из тестового файла кодер HDL определяет, что x является скалярным двойником.
Щелкните Использовать эти типы (Use These Types).
Заменить custom_fcn на таблицу подстановки
Чтобы открыть помощник по рабочим процессам HDL, щелкните Помощник по рабочим процессам (Workflow Advisor) и в окне Помощник по рабочим процессам (Workflow Advisor) щелкните Преобразование фиксированных точек (Fixed-Point Conversion).
Заменять custom_fcn с таблицей подстановки на вкладке «Замены функций» введите custom_fcn, выберите Lookup Tableи нажмите +.
По умолчанию в таблице поиска используются линейная интерполяция, 1000 точек, а также минимальные и максимальные расчетные значения, которые приложение обнаруживает, выполняя моделирование или вычисляя производные диапазоны.

В разделе «Моделирование выполнения» выберите Log data for histogramи нажмите кнопку «Запустить моделирование». Убедитесь, что custom_test выбран в качестве тестового файла.
Выполняется моделирование, и инструмент отображает минимальный и максимальный диапазоны моделирования на вкладке Переменные (Variables). Кодер HDL строит график результатов моделирования в редакторе MATLAB.

Проверка типов фиксированных точек
В столбце Предлагаемый тип убедитесь, что типы с фиксированной точкой, предложенные программным обеспечением, охватывают весь диапазон моделирования. Чтобы просмотреть данные зарегистрированной гистограммы для переменной, щелкните ее поле Предлагаемый тип.
Гистограмма предоставляет информацию о диапазоне и процент диапазона моделирования, который охватывает предлагаемый тип данных.

Чтобы проверить построение с помощью предложенных типов, щелкните Проверить типы (Validate Types).
Программное обеспечение проверяет правильность предлагаемых типов и генерирует код с фиксированной точкой, call_custom_fcn_fixpt.
Чтобы просмотреть созданный код с фиксированной точкой, щелкните значок call_custom_fcn_fixpt ссылка.
Сгенерированная функция с фиксированной точкой, call_custom_fcn_fixpt.m, вызывает это приближение вместо вызова custom_fcn.
function y = call_custom_fcn_fixpt(x) fm = get_fimath(); y = fi(replacement_custom_fcn(x), 0, 14, 14, fm); end function fm = get_fimath() fm = fimath('RoundingMethod', 'Floor',... 'OverflowAction', 'Wrap',... 'ProductMode','FullPrecision',... 'MaxProductWordLength', 128,... 'SumMode','FullPrecision',... 'MaxSumWordLength', 128); end
В этом примере показано, как заменить exp с аппроксимацией таблицы подстановки в сгенерированном коде с фиксированной точкой с помощью функции.
Предпосылки
Для завершения этого примера необходимо установить следующие продукты:
MATLAB
Designer™ с фиксированной точкой
Компилятор C
См. раздел Поддерживаемые компиляторы.
Вы можете использовать mex -setup для изменения компилятора по умолчанию. См. раздел Изменение компилятора по умолчанию.
Создание алгоритмов и тестовых файлов
Создайте функцию MATLAB, my_fcn.m, который вызывает exp функция.
function y = my_fcn(x) y = exp(x); end
Создайте тестовый файл, my_fcn_test.m, которая использует my_fcn.m.
close all x = linspace(-10,10,1e3); for itr = 1e3:-1:1 y(itr) = my_fcn( x(itr) ); end plot( x, y );
Настройка аппроксимации
Создайте объект конфигурации замены функции для аппроксимации exp с использованием настроек линейной интерполяции по умолчанию и 1000 точек в таблице поиска.
q = coder.approximation('exp');Настройка объекта конфигурации
Создать coder.FixptConfig объект, fixptcfg. Укажите имя тестового файла и включите числовое тестирование. Свяжите объект конфигурации замены функции с объектом конфигурации с фиксированной точкой.
fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = 'my_fcn_test'; fixptcfg.TestNumerics = true; fixptcfg.DefaultWordLength = 16; fixptcfg.addApproximation(q);
Преобразовать в фиксированную точку
Создание кода MATLAB с фиксированной точкой.
codegen -float2fixed fixptcfg my_fcn
Просмотр сгенерированного кода фиксированной точки
Чтобы просмотреть сгенерированный код с фиксированной точкой, щелкните ссылку на my_fcn_fixpt.
Созданный код содержит аппроксимацию таблицы подстановки, replacement_exp, для exp функция. Процесс преобразования с фиксированной точкой выводит диапазоны для функции, а затем использует интерполированную таблицу поиска для замены функции. По умолчанию в таблице поиска используется линейная интерполяция, 1000 точек и минимальное и максимальное значения, обнаруженные при выполнении тестового файла.
Сгенерированная функция с фиксированной точкой, my_fcn_fixpt, вызывает это приближение вместо вызова exp.
function y = my_fcn_fixpt(x) fm = get_fimath(); y = fi(replacement_exp(x), 0, 16, 1, fm); end
Теперь можно протестировать созданный код с фиксированной точкой и сравнить результаты с исходной функцией MATLAB. Если поведение сгенерированного кода с фиксированной точкой недостаточно близко соответствует поведению исходного кода, измените метод интерполяции или количество точек, используемых в таблице поиска, а затем восстановите код.