Преобразование фиксированной точки и улучшение

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

Введение

Рабочий процесс преобразования из плавающей запятой в фиксированную запятую в HDL Coder™ включает следующие шаги:

  1. Проверьте, что проект с плавающей точкой совместим для генерации кода.

  2. Вычислите фиксированные точки на основе симуляции испытательного стенда.

  3. Сгенерируйте читаемую и прослеживаемую фиксированную точку код MATLAB®.

  4. Проверьте сгенерированный проект фиксированной точки.

Этот пример использует Фильтр Калмана, подходящий для генерации HDL-кода, чтобы проиллюстрировать некоторые ключевые аспекты рабочего процесса преобразования фиксированной точки, в частности шаги 2 и 3 в вышеупомянутом списке.

Проект MATLAB

Код MATLAB, используемый в этом примере, реализует простой Фильтр Калмана. Этот пример также содержит испытательный стенд MATLAB, который осуществляет фильтр.

Реализация фильтра Калмана, подходящая для генерации HDL-кода

design_name = 'mlhdlc_kalman_hdl';
testbench_name = 'mlhdlc_kalman_hdl_tb';
%
% MATLAB Design: <matlab:edit('mlhdlc_kalman_hdl') mlhdlc_kalman_hdl>
% MATLAB testbench: <matlab:edit('mlhdlc_kalman_hdl_tb') mlhdlc_kalman_hdl_tb>
%

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

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

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

% 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, [testbench_name,'.m*']), mlhdlc_temp_dir);

Моделируйте проект

Моделируйте проект с испытательным стендом до генерации кода, чтобы убедиться, что нет никаких ошибок периода выполнения.

mlhdlc_kalman_hdl_tb
Running --------> mlhdlc_kalman_hdl_tb

Current plot held
Current plot released

Создайте новый проект HDL Coder

Чтобы создать новый проект, введите следующую команду:

  coder -hdlcoder -new flt2fix_project

Затем, добавьте файл 'mlhdlc_kalman_hdl.m' в проект как функция MATLAB и 'mlhdlc_kalman_hdl_tb.m' как Испытательный стенд MATLAB.

Можно обратиться к Началу работы с MATLAB к примеру по Рабочему процессу HDL для более полного примера при создании и заполнении проектов HDL Coder.

Рабочий процесс генерации фиксированной точки

Выполните следующие задачи перед хождением дальше к шагу предложения по фиксированной точке:

  1. Нажмите кнопку 'Workflow Advisor', чтобы запустить HDL Workflow Advisor.

  2. Выберите 'Convert to fixed-point at build time' для 'Опции' преобразования Фиксированной точки.

  3. Нажмите кнопку 'Run' к входным define типам для проекта от испытательного стенда.

  4. Выберите шаг рабочего процесса 'Fixed-Point Conversion'.

  5. Нажмите 'Analyze', чтобы выполнить оснащенную симуляцию с плавающей точкой.

Обратитесь к Преобразованию из плавающей запятой в фиксированную запятую для более полного примера на этих шагах.

Определите начальные типы фиксированной точки

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

На этом этапе преобразования предлагает фиксированные точки для каждой переменной в проекте на основе записанного min / макс. значений переменных с плавающей точкой и ввода данных пользователем.

На данном этапе для всех переменных, вы можете (ре) вычислять и делать предложение:

  • Дробные длины для данной зафиксированной установки размера слова, или

  • Размеры слова для данной зафиксированной дробной установки длины.

Выберите установку размера слова

Когда вы начиная с проекта с плавающей точкой и прохождения через преобразования из плавающей запятой в фиксированную запятую впервые, это - хорошая практика, чтобы запуститься путем определения установки 'Default Word Length' на основе самого большого динамического диапазона всех переменных в проекте.

В этом примере мы запускаем с размера слова по умолчанию 22 и запускаемся, 'Предлагают' шаг Фиксированных точек.

Исследуйте предложенную таблицу фиксированной точки

Таблица типа содержит следующую информацию для каждой переменной, организованной функцией, существующей в проекте MATLAB с плавающей точкой:

  • Сим Мин: минимальное значение, присвоенное переменной во время симуляции.

  • Сим Макс: максимальное значение, присвоенное переменной во время симуляции.

  • Целое число: Являются ли все значения, присвоенные во время симуляции, целым числом.

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

Можно также использовать, 'Вычисляют Выведенный Анализ Области значений', чтобы вычислить выведенные области значений, и это покрыто подробно в этом примере, Вычислив Выведенные Области значений в преобразовании фиксированной точки

Интерпретируйте предложенные числовые типы для переменных

На основе области значений симуляции (min & макс.) значения и установка размера слова по умолчанию, числовой тип предложен для каждой переменной.

Следующая таблица показывает числовые предложения по типу по 'Размеру слова по умолчанию' 22 битов.

Исследуйте типы, предложенные в вышеупомянутой таблице для переменных, оснащенных в проекте верхнего уровня.

Область значений с плавающей точкой для переменной 'B':

  • Информация о симуляции: SimMin: 0, SimMax: 896.74.., целое число: нет

  • Введите Предложенный: numerictype (0,22,12) (Со знаком: Без знака, WordLength: 22, FractionLength: 12)

Область значений с плавающей точкой:

  • Имеет то же количество битов как 'Размер слова по умолчанию'.

  • Использует минимальное количество битов, чтобы полностью представлять область значений.

  • Остальная часть использования битов, чтобы представлять точность.

Целочисленная Область значений для переменной 'A':

  • Информация о симуляции: SimMin: 0, SimMax: 1, целое число: да

  • Введите Предложенный: numerictype (0,1,0) (Со знаком: Без знака, WordLength: 1, FractionLength: 0)

Целочисленная область значений:

  • Имеет минимальное количество битов, чтобы представлять целую целочисленную область значений.

  • Не имеет никаких дробных битов.

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

Сгенерируйте фиксированную точку и проверьте сгенерированный код

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

  1. Нажмите на 'Validate Types', чтобы применить вычисленные фиксированные точки.

  2. Затем выберите, опция 'Регистрируют вводы и выводы для графиков сравнения' и затем нажимают на 'Тестовые Численные данные', чтобы повторно выполнить испытательный стенд на фиксированной точке.

График слева сгенерирован от испытательного стенда во время симуляции кода с плавающей точкой, тот справа сгенерирован от симуляции сгенерированной фиксированной точки. Заметьте, графики не соответствуют.

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

Исследуйте ошибочный график на каждую выходную переменную. Это очень высоко для этого конкретного проекта.

Выполните итерации на результатах

Один способ уменьшать ошибку состоит в том, чтобы увеличить 'Размер слова по умолчанию' и повторить преобразование фиксированной точки.

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

Давайте теперь увеличим размер слова по умолчанию до 28 битов и повторить предложение по типу и шаги валидации.

  1. Выберите 'Default word length' 28.

Изменение размера слова по умолчанию автоматически инициировало шаг предложения по типу, и новые фиксированные точки предложены на основе новой установки размера слова. Также заметьте, что валидация типа должна быть повторно выполнена, и численные данные должны быть проверены снова.

  1. Нажмите на 'Validate Types'.

  2. Нажмите на 'Test Numerics', чтобы повторно выполнить испытательный стенд на фиксированной точке.

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

Очистите Сгенерированные Файлы

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

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