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

Лицензионные требования

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

  • Fixed-Point Designer™

  • MATLAB® Coder™

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

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

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

Для списка поддерживавших функций MATLAB и функций, смотрите Функции языка MATLAB, Поддерживавшие для Автоматизированного Преобразования Фиксированной точки (MATLAB Coder).

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

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

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

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

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

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

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

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

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

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

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

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

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

Эта таблица описывает расцветку.

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

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

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

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

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

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

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

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

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

Покрытие кода включено по умолчанию. Выключите его только после того, как вы проверили, что у вас есть соответствующее покрытие тестового файла. Выключение покрытия кода может ускорить симуляцию. Выключить покрытие кода, в инструменте Fixed-Point Conversion:

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

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

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

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

Примечание

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

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

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

Когда вы открываете инструмент Fixed-Point Conversion, инструмент генерирует оснащенную 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 с помощью одного из следующих методов:

  • Установка Manually предложенный тип данных в инструменте Fixed-Point Conversion.

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

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

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

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

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

Просмотр функций

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

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

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

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

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

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

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

  • Static Min и Static Max — Статические минимальные и максимальные значения.

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

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

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

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

  • Предложенный тип данных с фиксированной точкой для заданного слова (или часть) длина. Предложенные типы данных используют обозначение 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

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

В сгенерированной фиксированной точке количество каждой специализации фиксированной точки совпадает с номером в списке Исходных кодов, который дает возможность прослеживать между версиями и фиксированной точки с плавающей точкой вашего кода. Например, сгенерированную функцию фиксированной точки для 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, он обеспечивает:

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

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

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

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

Смотрите также

Обнаружьте переполнение (MATLAB Coder)