Автоматическое преобразование фиксированной точки

Требования к лицензии

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

  • Fixed-Point Designer™

  • MATLAB® Coder™

Возможности автоматического преобразования с фиксированной точкой

Код MATLAB с плавающей точкой можно преобразовать в код с фиксированной точкой с помощью инструмента преобразования с фиксированной точкой в HDL Coder™ проектах. Можно принять решение предложить типы данных на основе данных области симуляции, производных (также известных как статические) данных области значений или обоих.

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

Список поддерживаемых функций и функций MATLAB см. в Язык MATLAB Поддерживаемые функции для автоматического преобразования фиксированных точек.

Во время преобразования с фиксированной точкой можно:

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

  • Предложите длины дробей на основе размеров слова по умолчанию.

  • Предложите размеры слова на основе длин дробей по умолчанию.

  • Оптимизируйте целые числа.

  • Задайте запас прочности для данных симуляций min/max.

  • Проверьте, что вы можете создавать свой проект с помощью предложенных типов данных.

  • Тестируйте числа путем выполнения испытательного стенда с применёнными фиксированными точками.

  • Просмотрите гистограмму бит, используемых каждой переменной.

  • Обнаружение переполнения.

Покрытие кода

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

Инструмент отображает цветовую полосу покрытия слева от кода.

В этой таблице описывается расцветка.

Цвет полосы покрытияУказывает
Зеленый

Одна из следующих ситуаций:

  • Функция точки входа выполняется несколько раз, и код выполняет более одного раза.

  • Функция точки входа выполняется один раз, а код - один раз.

Различные оттенки зеленого цвета указывают на различные области значений отсчётов выполнения линии. Самый темный оттенок зелёного цвета указывает на наивысшую область значений.

ОранжевыйФункция точки входа выполняется несколько раз, но код выполняет один раз.
КрасныйКод не выполняется.

Когда вы останавливаетесь на полосе покрытия, цветовая подсветка распространяется на код. Для каждого раздела кода приложение отображает количество раз, которое раздел выполняет.

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

Цвет полосы покрытияДействие
ЗеленыйЕсли вы ожидаете, что разделы кода будут выполняться чаще, чем показывает покрытие, измените код MATLAB или тестовые файлы.
ОранжевыйТакое поведение ожидается для кода инициализации, например, инициализация стойких переменных. Если вы ожидаете, что код будет выполняться более одного раза, измените код MATLAB или тестовые файлы.
КрасныйЕсли код, который не выполняется, является условием ошибки, это поведение приемлемо. Если вы ожидаете выполнения кода, либо измените код MATLAB, либо тестовые файлы. Если код написан консервативно и имеет верхний и нижний граничные пределы, и вы не можете изменить тестовые файлы, чтобы достичь этого кода, добавьте статические минимальные и максимальные значения. См. Вычисление производных областей значений.

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

  1. Нажмите Run Simulation.

  2. Очистить Show code coverage.

Предложение типов данных

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

Примечание

Вы не можете предложить типы данных на основе производных областей значений для классов MATLAB.

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

Выполнение симуляции

Когда вы открываете инструмент Преобразования с Фиксированной Точкой, инструмент генерирует MEX-функцию для вашего проекта MATLAB. Если сборка завершается без ошибок, инструмент отображает скомпилированную информацию (тип, размер, сложность) для функций и переменных в вашем коде. Чтобы перейти к локальным функциям, щелкните вкладку Functions. Если возникают ошибки сборки, инструмент предоставляет сообщения об ошибке, которые ссылаются на строку кода, вызвавшую проблемы сборки. Перед выполнением симуляции необходимо устранить эти ошибки. Используйте ссылку, чтобы перейти к автономной строке кода в редакторе MATLAB и изменить код, чтобы исправить проблему. Если ваш код использует функции, которые не поддерживаются для преобразования с фиксированной точкой, инструмент отображает их на вкладке Function Replacements. См. «Замена функций».

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

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

Если испытательный стенд не работает, ошибки отображаются на вкладке Simulation Output.

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

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

Вычисление производных областей значений

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

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

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

Когда вы выбираете Compute Derived Ranges, инструмент запускает производный анализ области значений, чтобы вычислить статические диапазоны для переменных в вашем алгоритме MATLAB. Когда анализ завершен, статические области значений отображаются на вкладке Variables. Если запуск производит +/-Inf производные области значений, рассмотрите определение областей значений для всех стойких переменных.

Вы можете выбрать Quick derived range analysis. С помощью этой опции инструмент преобразования выполняет более быстрый статический анализ. Вычисленные области значений могут быть больше, чем необходимо. Выберите эту опцию в случаях, когда статический анализ занимает больше времени, чем вы можете себе позволить.

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

Блокировка предложенных типов данных

Можно заблокировать предложенные типы данных против изменений с помощью инструмента Fixed-Point Conversion одним из следующих методов:

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

  • Щелчок правой кнопкой мыши по типу, предложенному инструментом, и выбор Lock computed value.

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

  • Вручную перезаписать его.

  • Щелкните его правой кнопкой мыши и выберите Undo changes. Это действие разблокирует только выбранный тип.

  • Щелчок правой кнопкой мыши и выбор Undo changes for all variables. Это действие разблокирует все заблокированные предлагаемые типы.

Функции просмотра

Список функций в проекте можно просмотреть на панели Navigation. Этот список также включает специализации функций и методы классов. Когда вы выбираете функцию из списка, код MATLAB для этой функции или метода класса отображается в окне кода инструмента Преобразование фиксированной точки.

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

Просмотр переменных

Вкладка Variables содержит следующую информацию для каждой переменной в функции, выбранной на панели Navigation:

  • Type - исходный тип данных переменной в алгоритме MATLAB.

  • Sim Min и Sim Max - минимальное и максимальное значения, присвоенные переменной во время симуляции.

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

  • Static Min и Static Max - статические минимальное и максимальное значения.

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

    Когда вы вычисляете производные области значений, инструмент Fixed-Point Conversion запускает статический анализ, чтобы вычислить статические области значений для переменных в вашем коде. После завершения анализа отображаются статические области значений. Можно отредактировать вычисленные результаты. Отредактированные поля выделены полужирным шрифтом. Редактирование этих полей не запускает статический анализ области значений, но инструмент использует отредактированные значения в последующих анализах. Можно вернуться к типам, предложенным инструментом.

  • Whole Number - Все ли значения, присвоенные переменной во время симуляции, являются целыми числами.

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

  • Предлагаемый тип данных с фиксированной точкой для заданной длины слова (или дроби). Предложенные типы данных используют numerictype обозначение. Для примера, numerictype(1,16,12) обозначает тип с фиксированной точкой со знаком с размером слова 16 и длиной дроби 12. numerictype(0,16,12) обозначает беззнаковый тип с фиксированной точкой с размером слова 16 и длиной дроби 12.

    Поскольку инструмент не применяет типы данных к выражениям, он не отображает предлагаемые типы для них. Вместо этого отображаются их исходные типы данных.

Можно также просмотреть и изменить информацию о переменной на панели кода, поместив курсор на имя переменной.

Можно использовать Ctrl+F для поиска переменных в коде MATLAB и на вкладке Variables. Инструмент подсвечивает вхождения в коде и отображает только переменную с заданным именем на вкладке Variables.

Просмотр информации для классов MATLAB

Инструмент отображает:

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

  • Информация о классах MATLAB на вкладке Variables.

Специализации

Если функция является специализированной, инструмент перечисляет каждую специализацию и нумерует их последовательно. Например, рассмотрим функцию, dut, который вызывает подфункции, foo и bar, несколько раз с различными типами входов.

function y = dut(u, v)
 
tt1 = foo(u);
tt2 = foo([u v]);
tt3 = foo(complex(u,v));
 
ss1 = bar(u);
ss2 = bar([u v]); 
ss3 = bar(complex(u,v));
 
y = (tt1 + ss1) + sum(tt2 + ss2) + real(tt3) + real(ss3);
 
end
 
function y = foo(u)
  y = u * 2;
end
 
function y = bar(u)
  y = u * 4;
end

Если вы выбираете специализацию, приложение отображает только переменные, используемые специализацией.

В сгенерированном коде с фиксированной точкой номер каждой специализации с фиксированной точкой совпадает с номером в списке Source Code, что облегчает отслеживание между версиями вашего кода с плавающей и фиксированной точками. Для примера сгенерированная функция с фиксированной точкой для foo > 1 называется foo_s1.

Гистограмма

Чтобы записать данные для гистограмм, в окне Fixed-Point Conversion, нажмите Run Simulation и выберите Log data for histogram, а затем нажмите кнопку Run Simulation.

После симуляции, чтобы просмотреть гистограмму переменной, на вкладке Variables, щелкните поле Proposed Type для этой переменной.

Гистограмма предоставляет область значений предложенного типа данных и процент значений симуляции, которые охватывает предложенный тип данных. Веса битов отображаются вдоль оси X, и процент вхождений вдоль оси Y. Каждый интервал в гистограмме соответствует биту в двоичном слове. Для примера эта гистограмма отображает область значений для переменной типа numerictype(1,16,14).

Можно просмотреть эффект изменения предложенных типов данных путем:

  • Перетаскивание ребер ограничивающего прямоугольника в окне гистограммы для изменения предложенного типа данных.

  • Выбор или очистка Signed.

Чтобы вернуться к типам, предложенным автоматическим преобразованием, в окне гистограммы нажмите.

Замена функций

Если ваш код MATLAB использует функции, которые не имеют поддержки с фиксированной точкой, инструмент перечисляет эти функции на вкладке Function Replacements. Можно выбрать замену неподдерживаемых функций на пользовательскую замену функций или на интерполяционную таблицу.

Можно добавлять и удалять замены функций из этого списка. Если вы вводите замену функции для функции, функция замены используется при построении проекта. Если вы не вводите замену, инструмент использует тип, указанный в оригинальном коде MATLAB для функции.

Примечание

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

Проверка типов

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

Если ошибки или предупреждения возникают во время валидации, они отображаются на вкладке Type Validation Output. Если возникают ошибки или предупреждение:

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

  • На вкладке Function Replacements проверьте, что вы предоставили замену функций для неподдерживаемых функций.

Проверка

После проверки предлагаемых типов данных с фиксированной точкой выберите Test Numerics, чтобы проверить поведение алгоритма MATLAB с фиксированной точкой. По умолчанию, если вы добавили испытательного стенда, чтобы задать входы или запустить симуляцию, инструмент использует этот испытательный стенд для тестирования цифр. Инструмент сравнивает численное поведение сгенерированного кода MATLAB с фиксированной точкой с исходным кодом MATLAB с плавающей точкой. Если вы выбираете, чтобы записать входы и выходы для графиков сравнения, инструмент генерирует дополнительный график для каждого скалярного выхода. Этот график показывает результаты с плавающей и фиксированной точками и различие между ними. Для некалярных выходов показана только информация об ошибке.

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

Обнаружение переполнений

При тестировании цифр выбор Use scaled doubles to detect overflows включает обнаружение переполнения. Когда эта опция выбрана, инструмент преобразования запускает симуляцию с использованием масштабированных двойных версий предлагаемых фиксированных точек. Поскольку масштабированные двойки хранят свои данные в двойной точности с плавающей точностью, они выполняют арифметику в полной области значений. Они также сохраняют свои настройки с фиксированной точкой, поэтому они могут сообщать, когда расчеты выходят из области значений типа с фиксированной точкой.

Если инструмент обнаруживает переполнения, на его вкладке Overflow, он обеспечивает:

  • Список переменных и выражений, которые переполнены

  • Информация о том, насколько каждая переменная переполнена

  • Ссылка на переменные или выражения в окне кода

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

См. также

Обнаружение переполнений