Задайте атрибуты фиксированной точки для блоков

Параметры блоков с фиксированной точкой

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

Примечание

Наследование с плавающей точкой имеет приоритет над параметрами, обсуждаемыми в этом разделе. Когда блок имеет вход с плавающей точкой, все типы данных блоков совпадают с входом.

Большинство параметров с фиксированной точкой можно найти на Data Types панели блоков тулбокса. Следующий рисунок показывает типовую панель Data Types.

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

Параметр типа данных с фиксированной точкойОписание

Режим округления

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

Дополнительные сведения о доступных опциях см. в разделе «Режимы округления».

Насыщение при целочисленном переполнении

Когда вы выбираете этот параметр, блок насыщает результат своей операции с фиксированной точкой. Когда вы очищаете этот параметр, блок переносит результат своей операции с фиксированной точкой.

Для получения дополнительной информации о насыщении и переносе смотрите Обработку переполнения для операций с фиксированной точкой.

Промежуточный продукт

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

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

Выходы продукта

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

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

Аккумулятор

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

Для получения дополнительной информации о типе данных аккумулятора этого блока см. страницу с описанием определенного блока.

Выход

Задает тип выходных данных и масштабирование для блоков.

Использование помощника по типам данных

Этот Data Type Assistant является интерактивным графическим инструментом, доступным на панели Data Types некоторых блоков тулбокса с фиксированной точкой.

Дополнительные сведения об использовании Data Type Assistant, которая поможет вам задать параметры типа данных блоков, см. в разделе «Задание типов данных с использованием Data Type Assistant (Simulink)».

Проверка диапазонов сигнала

Некоторые блоки тулбокса с фиксированной точкой имеют Minimum и Maximum параметры на панели Data Types. Когда тип данных с фиксированной точкой имеет эти параметры, можно использовать их, чтобы задать соответствующие минимальные и максимальные значения для целей проверки области значений.

Чтобы узнать, как задать диапазоны сигнала и включить проверку диапазона сигнала, смотрите Specify Signal Ranges (Simulink).

Настройка параметров уровня системы

Вы можете контролировать и управлять настройками фиксированных точек для блоков тулбокса на уровне системы или подсистемы с помощью Fixed-Point Tool. Для получения дополнительной информации см. раздел Fixed-Point Tool (Fixed-Point Designer).

Логгирование

Fixed-Point Tool журналов переполнения, насыщения и минимумы симуляции для блоков тулбокса с фиксированной точкой. Fixed-Point Tool не регистрирует переполнения и насыщения, когда Data overflow Линия на панели Diagnostics > Data Integrity диалогового окна Параметров конфигурации задано значение None.

Автомасштабирование

Можно использовать функцию автомасштабирования Fixed-Point Tool, чтобы задать масштабирование для типов данных с фиксированной точкой тулбокса.

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

блоки тулбокса подчиняются Use local settings, Double, Single, и Off режимы параметра Data type override в Fixed-Point Tool. The  Scaled double режим также поддерживается для исходного кода тулбоксов и блоков преобразования байтов, а также для некоторых арифметических блоков, таких как различие и Normalization.

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

Наследование через внутреннее правило

Выбор соответствующих размеров слова и масштабирований для параметров с фиксированной точкой в вашей модели может оказаться сложным. Чтобы помочь вам, Inherit via internal rule выбор часто доступен для параметров типа данных блоков с фиксированной точкой, таких как сигналы Accumulator и Product output. В следующих разделах описывается, как слова и длины дробей выбираются для вас при выборе Inherit via internal rule для параметра типа данных блоков с фиксированной точкой в программном обеспечении тулбокса:

Примечание

В уравнениях в следующих разделах WL = размер слова и FL = длина дроби.

Внутреннее правило для типов данных аккумулятора

Внутреннее правило для типов данных аккумулятора сначала вычисляет идеальный, полностью точный результат. Где N количество добавлений:

WLideal accumulator=WLinput to accumulator+floor(log2(N1))+1

FLideal accumulator=FLinput to accumulator

Например, рассмотрите суммирование всех элементов массива вектора длины 6 и типа sfix10_En8 данных. Идеальный, полностью точный результат имеет размер слова 13 и длину дроби 8.

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

Внутреннее правило для типов данных продукта

Внутреннее правило для типов данных продукта сначала вычисляет идеальный, полностью точный результат:

WLideal product=WLinput 1+WLinput 2

FLideal product=FLinput 1+FLinput 2

Для примера умножение вместе элементы массива вектора действительных чисел длины 2 и типа sfix10_En8 данных. Идеальный, полностью точный результат имеет размер слова 20 и длину дроби 16.

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

Внутреннее правило для типов выходных данных

Несколько блоков тулбокса имеют Inherit via internal rule выбор, доступный для вывода блока. Внутреннее правило, используемое в этих случаях, специфично для блоков, и уравнения перечислены в блочной странице с описанием.

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

«

Эффект панели аппаратной реализации внутреннего правила»

Внутреннее правило выбирает размеры слова и длины дробей, которые подходят для вашего оборудования. Чтобы получить лучшие результаты с помощью внутреннего правила, необходимо указать тип оборудования, которое вы используете, на панели Hardware Implementation диалогового окна Параметры конфигурации. Чтобы открыть это диалоговое окно, нажмите Modeling > Model Settings в Simulink® панель инструментов.

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

Другие цели.  Для всех целей, кроме ASIC/FPGA, идеальный полностью точный размер слова, рассчитанная внутренним правилом, округлится до следующего доступного размера слова целевого объекта. Вычисленная идеальная длина дроби используется, сохраняя наименьшие значащие биты.

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

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

Примеры внутренних правил

В следующих разделах показаны примеры взаимодействия внутреннего правила с панелью Hardware Implementation для вычисления типов данных аккумулятора и типов данных продукта.

Типы данных аккумулятора.  Примите во внимание следующие ex_internalRule_accumExp модели.

В блоках Difference (DSP System Toolbox) параметр Accumulator устанавливается в Inherit: Inherit via internal rule, и параметру Output задано значение Inherit: Same as accumulator. Поэтому можно увидеть тип данных аккумулятора, рассчитанный по внутреннему правилу на выход сигнале в модели.

В предыдущей модели параметр Device type на панели Hardware Implementation диалогового окна Параметров конфигурации устанавливается равным ASIC/FPGA. Поэтому тип данных аккумулятора, используемый внутренним правилом, является идеальным, полностью точным результатом.

Вычислим полную точность размера слова для каждого из блоков Difference в модели:

WLideal accumulator=WLinput to accumulator+floor(log2(number of accumulations))+1WLideal accumulator=9+floor(log2(1))+1WLideal accumulator=9+0+1=10WLideal accumulator1=WLinput to accumulator1+floor(log2(number of accumulations))+1WLideal accumulator1=16+floor(log2(1))+1WLideal accumulator1=16+0+1=17WLideal accumulator2=WLinput to accumulator2+floor(log2(number of accumulations))+1WLideal accumulator2=127+floor(log2(1))+1WLideal accumulator2=127+0+1=128

Вычислите полную точность длины дроби, которая одинаковая для каждого блока Matrix Sum в этом примере:

FLideal accumulator=FLinput to accumulatorFLideal accumulator=4

Теперь измените параметр Device type в панели Hardware Implementation диалогового окна Параметров конфигурации на 32–bit Embedded Processor, путем изменения параметров, как показано на следующем рисунке.

Как вы можете видеть в диалоговом окне, это устройство имеет 8-, 16- и 32-битные размеры слова. Поэтому идеальные размеры слова 10, 17 и 128 бит, вычисленные внутренним правилом, не могут использоваться. Вместо этого внутреннее правило использует следующий наибольший доступный размер слова в каждом случае Вы можете увидеть это, если вы перезапустите модель, как показано на следующем рисунке.

Типы данных продукта.  Примите во внимание следующие ex_internalRule_prodExp модели.

В блоках Array-Vector Multiply (DSP System Toolbox) параметр Product Output устанавливается в Inherit: Inherit via internal rule, и параметру Output задано значение Inherit: Same as product output. Поэтому можно увидеть тип данных выходов продукта, рассчитанный по внутреннему правилу на сигнале выхода в модели. Установка параметра Accumulator не имеет значения, потому что в этом примере используются действительные значения.

Для предыдущей модели параметр Device type на панели Hardware Implementation диалогового окна Параметров конфигурации установлен в ASIC/FPGA. Поэтому тип данных продукта, используемый внутренним правилом, является идеальным, полностью точным результатом.

Вычислите полную точность размера слова для каждого из блоков Array-Vector Multiply в модели:

WLideal product=WLinput a+WLinput bWLideal product=7+5=12WLideal product1=WLinput a+WLinput bWLideal product1=16+15=31

Вычислите полную точность длины дроби, которая одинаковая для каждого блока Array-Vector Multiply в этом примере:

FLideal accumulator=FLinput to accumulatorFLideal accumulator=4

Теперь измените параметр Device type в панели Hardware Implementation диалогового окна Параметров конфигурации на 32–bit Embedded Processor, как показано на следующем рисунке.

Как вы можете видеть в диалоговом окне, это устройство имеет 8-, 16- и 32-битные размеры слова. Поэтому идеальные размеры слова 12 и 31 бит, вычисленные внутренним правилом, не могут использоваться. Вместо этого внутреннее правило использует следующий наибольший доступный размер слова в каждом случае. Вы можете увидеть это, если вы перезапустите модель, как показано на следующем рисунке.

Задайте типы данных для блоков с фиксированной точкой

В следующих разделах показано, как использовать Fixed-Point Tool для выбора соответствующих типов данных для блоков с фиксированной точкой в ex_fixedpoint_tut модель:

Подготовка модели

  1. Откройте модель, набрав ex_fixedpoint_tut в MATLAB® командная строка.

    Эта модель использует блок Совокупная сумма, чтобы суммировать вход, поступающий от Подсистемы Источников с Фиксированной Точкой. Подсистема источников с фиксированными точками выводит два сигнала с различными типами данных:

    • Источник Signed имеет размер слова 16 бит и длину дроби 15 бит.

    • Источник Unsigned имеет размер слова 16 бит и длину дроби 16 бит.

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

    Warning: Overflow occurred. This originated from
    'ex_fixedpoint_tut/Signed Cumulative Sum'. 
    Warning: Overflow occurred. This originated from
    'ex_fixedpoint_tut/Unsigned Cumulative Sum'. 

    Согласно этим предупреждениям, переполнение происходит в обоих блоках Совокупная сумма.

  3. Чтобы исследовать переполнения в этой модели, используйте Fixed-Point Tool. Можно открыть Fixed-Point Tool, выбрав в меню модели Tools > Fixed-Point > Fixed-Point Tool. Включите логгирование для всех блоков в вашей модели, установив параметр Fixed-point instrumentation mode на Minimums, maximums and overflows.

  4. Теперь, когда вы включили логгирование, перезапустите модель, нажав кнопку Simulation.

  5. Результаты симуляции появляются в таблице на центральной панели Contents Fixed-Point Tool. Просмотрите следующие столбцы:

    • Name - Задает имя каждого сигнала в следующем формате: Subsystem Name/Block Name: Signal Name.

    • SimDT - Тип данных моделирования каждого записанного сигнала.

    • SpecifiedDT - Тип данных, заданный в диалоговом окне блока для каждого сигнала.

    • SimMin - наименьшее представимое значение, достигнутое во время симуляции для каждого записанного сигнала.

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

    • OverflowWraps - Количество переполнений, которые переносятся во время симуляции.

    Можно также увидеть, что значения SimMin и SimMax для типов данных Аккумулятора варьируются от 0 на .9997. Записанные результаты показывают, что 8192 переполнения, обернутые во время симуляции в типе данных Аккумулятора блока Signed Cumulative Sum. Точно так же тип данных Аккумулятора блока Unsigned Cumulative Sum имел 16 383 переносы переполнения во время симуляции.

    Чтобы получить дополнительные сведения о каждом из этих типов данных, выделите их на панели Contents и нажмите кнопку Show details for selected result ()

  6. Предположим, что целевой компьютер поддерживает 32-битные целые числа и установите размер слова Accumulator в обоих блоках Совокупная сумма равной 32. Для этого выполните следующие шаги:

    1. Щелкните правой кнопкой мыши по Signed Cumulative Sum: Accumulator строка на панели «Fixed-Point Tool» и выберите Highlight Block In Model.

    2. Дважды кликните блок в модели и выберите панель Data Types диалогового окна.

    3. Откройте Data Type Assistant для аккумулятора, нажав кнопку Assistant () в строке Accumulator данных type.

    4. Установите Mode равным Fixed Point. Чтобы увидеть представимую область значений текущего заданного типа данных, щелкните Fixed-point details ссылку. Инструмент отображает представимые максимальные и представимые минимальные значения для текущего типа данных.

    5. Измените Word length на 32и нажмите кнопку Refresh details в разделе Fixed-point details, чтобы увидеть обновленный представляемый диапазон. При изменении значения параметра Word length автоматически обновляется Data Type окно редактирования.

    6. Нажмите OK в диалоговом окне блока, чтобы сохранить изменения и закрыть окно.

    7. Установите размер слова типа данных Аккумулятора блока Unsigned Cumulative Sum равной 32 биты. Это можно сделать одним из двух способов:

      • Введите тип данных fixdt([],32,0) непосредственно в Data Type редактирования для параметра Accumulator data type.

      • Выполните те же шаги, которые вы использовали, чтобы задать размер слова типа данных Accumulator блока Signed Cumulative Sum равной 32 биты.

  7. Чтобы проверить свои изменения в размере слова и проверить на переполнение, перезапустите модель. Для этого нажмите кнопку Simulate в Fixed-Point Tool.

    Панель Contents Fixed-Point Tool обновляется, и можно увидеть, что в последней симуляции переполнения не произошло. Однако можно также увидеть, что значения SimMin и SimMax варьируются от 0 на 0. Это нижнее течение происходит, потому что длина дроби типа данных Accumulator слишком мала. Этот SpecifiedDT не может представлять точность значений данных. В следующих разделах обсуждается, как найти бенчмарк с плавающей точкой и использовать Fixed-Point Tool для предложения длин дробей.

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

Функция Data type override Fixed-Point Tool позволяет вам переопределять типы данных, заданные в модели, типами с плавающей точкой. Запуск вашей модели в Double режим переопределения дает вам ссылочную область значений, которая поможет вам выбрать соответствующие длины дробей для типов данных с фиксированной точкой. Для этого выполните следующие шаги:

  1. Откройте Fixed-Point Tool и установите Data type override равным Double.

  2. Запустите модель, нажав кнопку Run simulation and store active results.

  3. Исследуйте результаты на панели Contents Fixed-Point Tool. Потому что вы запустили модель в Double режим переопределения, вы получаете точное, идеализированное представление минимумов и максимумов симуляции. Эти значения появляются в параметрах SimMin и SimMax.

  4. Теперь, когда у вас есть точное ссылочное представление минимального и максимального значений симуляции, вы можете легче выбрать соответствующие длины дробей. Прежде чем делать эти варианты, сохраните свои активные результаты в ссылку, чтобы вы могли использовать их в качестве бенчмарка с плавающей точкой. Для этого выберите Results > Move Active Results To Reference из меню Fixed-Point Tool. Статус, отображаемый в Run столбце, изменяется с Active на Reference для всех сигналов в вашей модели.

Используйте Fixed-Point Tool, чтобы Предложить Длины Дробей

Теперь, когда у вас есть Double переопределите результаты, сохраненные как ссылка с плавающей точкой, вы готовы предложить длины дробей.

  1. Чтобы предложить длины дробей для типов данных, вы должны иметь набор Active результаты, доступные в Fixed-Point Tool. Чтобы создать активный набор результатов, просто перезапустите модель. Теперь инструмент отображает оба Active результаты и Reference результаты для каждого сигнала.

  2. Установите флажок Use simulation min/max if design min/max is not available. Вы не задали никаких проектов минимумов или максимумов для типов данных в этой модели. Таким образом, инструмент использует записанную информацию для вычисления и предложения длин дробей. Для получения информации об указании проекта минимумов и максимумов смотрите Задать Диапазоны сигнала (Simulink).

  3. Нажмите кнопку Propose fraction lengths (). Инструмент заполняет предложенные типы данных в ProposedDT столбце панели Contents. Соответствующие предложенные минимумы и максимумы отображаются в ProposedMin и ProposedMax столбцах.

Исследуйте результаты и примите предлагаемое масштабирование

Перед принятием длин дробей, предложенных Fixed-Point Tool, важно просмотреть детали этого типа данных. Это позволяет вам увидеть, какую часть данных может представлять предлагаемый тип данных. Чтобы изучить предлагаемые типы данных и принять предлагаемое масштабирование, выполните следующие шаги:

  1. На панели Contents инструмента Fixed-Point Tool можно увидеть предложенные длины дробей для типов данных в вашей модели.

    • Предлагаемая длина дроби для типа данных Аккумулятора как блоков Signed, так и блоков Unsigned Cumulative Sum составляет 17 биты.

    • Чтобы получить более подробную информацию о предлагаемом масштабировании для определенного типа данных, выделите тип данных на панели Contents Fixed-Point Tool.

    • Откройте окно Autoscale Information для подсвеченного типа данных нажатием кнопки Show autoscale information for the selected result ().

  2. Когда откроется окно Autoscale Information, проверьте Value и Percent Proposed Representable столбцы для параметров Simulation Minimum и Simulation Maximum. Можно увидеть, что предложенный тип данных может представлять 100% области значений данных моделирования.

  3. Чтобы принять предложенные типы данных, установите флажок в столбце Accept для каждого типа данных, предлагаемое масштабирование которого требуется сохранить. Затем нажмите кнопку Apply accepted fraction lengths (). Инструмент обновляет указанные типы данных в диалоговых окнах блока и в столбце SpecifiedDT на панели Contents.

  4. Чтобы проверить вновь принятое масштабирование, задайте значение параметра Data type override Use local settings и запустите модель. Просматривая Contents панель инструмента Fixed-Point Tool, можно увидеть следующие детали:

    • Значения SimMin и SimMax Active run соответствует значениям SimMin и SimMax из Reference с плавающей точкой run.

    • Переполнений больше нет.

    • Этот SimDT не соответствует SpecifiedDT для типа данных Accumulator ни одного из блоков Совокупная сумма. Это различие происходит, потому что блок Совокупная сумма всегда наследует свою Signedness от входного сигнала и позволяет только вам задать Signedness Auto. Поэтому SpecifiedDT для обоих типов данных аккумулятора fixdt([],32,17). Однако, поскольку блок Signed Cumulative Sum имеет входной сигнал со знаком, SimDT для параметра Accumulator этого блока также подписан (fixdt(1,32,17)). Точно так же SimDT параметра Accumulator блока Unsigned Cumulative Sum наследует свою Signedness от своего входного сигнала и, таким образом, является беззнаковым (fixdt(0,32,17)).