Multiply-Accumulate

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

  • Библиотека:
  • Операции HDL-кодера/HDL

  • Multiply-Accumulate block

Описание

Блок Multiply-Accumulate выполняет эту операцию на входах a и b, и смещение c, для вычисления результатов dataOut.

dataOut = sum(a.* b) + c

По умолчанию блок работает в вектор режиме. Входы a и b могут быть скалярами, векторами или 2-D матрицами. По умолчанию значение смещения c равно нулю, и блок вычисляет скалярный продукт входов a и b. Можно задать ненулевое значение для c при помощи Dialog или Input port как Source. Блок добавляет это смещение к скалярному продукту a и b. Операция умножения является полной точностью независимо от настройки Output data type. Настройки Output data type и Integer rounding mode применяются к операции сложения.

При помощи настройки Operation Mode можно задать потоковые режимы операции для блока Multiply-Accumulate. Для генерации HDL-кода, когда вы используете режим потоковой операции, вводите скалярные значения в блок. Блок имеет два потоковых режима: Streaming - using Start and End ports и Streaming - using Number of Samples. Когда вы выбираете эти потоковые режимы, можно задать сигналы управления, которые будут использоваться в режиме. Сигналы управления определяют, когда начало и конец накопление, и когда выход действителен.

Ограничения для генерации HDL-кода

  • Скалярные входы не поддерживаются для генерации HDL-кода. Чтобы сгенерировать код для блока, используйте векторные входы. Со скалярными входами используйте блок Multiply-Add.

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

  • Потоковые режимы операции блока не поддерживаются внутри блока Resettable Subsystem для генерации HDL-кода.

Порты

Вход

расширить все

Порт для предоставления входов блоку.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Порт для предоставления входов блоку.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean | fixed point | enumerated | bus

Порт для подачи сигнала смещения в блок. Блок добавляет это смещение к входам. Убедитесь, что тип данных сигнала смещения совпадает с типом данных точечного продукта входов.

Зависимости

Чтобы включить этот порт, установите Source равным Input port.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Порт для предоставления управляющего сигнала для начала накопления. Рекомендуется, чтобы вы использовали boolean сигнал типа данных как вход в порт. Чтобы начать получать накопленное выходное значение из dataOut сигнала, startIn и validIn сигналы должны быть высокими. Сигнал dataOut генерирует накопленный результат от следующего такта.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Порт для предоставления управляющего сигнала, чтобы указать, что входной сигнал действителен для накопления. Рекомендуется, чтобы вы использовали boolean сигнал типа данных как вход в порт. Чтобы начать получать накопленное выходное значение из dataOut сигнала, validIn и startIn сигналы должны быть высокими. Сигнал dataOut генерирует накопленный результат от следующего такта. Сигнал validIn имеет более высокий приоритет, чем startIn и endIn сигналы.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports или Streaming - using Number of Samples.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

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

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports а затем выберите End input and output ports.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Выход

расширить все

Порт, который генерирует выходные данные от операции умножения-накопления. По умолчанию блок использует Vector режим работы и вычисляет точечный продукт входных сигналов, и добавляет смещение, чтобы получить результат. Если вы задаете потоковый режим операции как Operation Mode, значение сигнала dataOut зависит от управляющих сигналов, которые вы предоставляете. Тип данных выходного сигнала такой же, как и у аккумулятора.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Порт, который генерирует выходной сигнал управления для указания начала накопления. Когда и validIn, и startIn высоки, startOut сигнал становится высоким в следующем такте. Тактовый цикл, в котором startOut становится высоким, указывает на начало системы координат и на то, что dataOut сигнал начал выдавать действительный накопленный выход.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports а затем выберите Start output port.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Порт, который генерирует выходной сигнал управления, чтобы указать, что dataOut сигнал действителен. Когда validIn сигнал становится высоким, validOut сигнал становится высоким в следующем такте и указывает, что dataOut действителен.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports а затем выберите Valid output port.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

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

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports а затем выберите End input and output ports.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Порт, который генерирует выходной сигнал управления, чтобы указать количество выборок для накопления. Значение этого сигнала увеличивается от 1 к значению, заданному для Number of Samples. Пока сигнал validIn высок, countOut увеличивается на 1 каждый такт.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Number of Samples а затем выберите Count output port.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

Параметры

расширить все

Можно задать Operation Mode следующим образом:

  • Vector: В качестве входных параметров можно использовать скаляры или векторы. Блок выполняет точечный продукт входов u1 и u2 и добавляет смещение k для получения результата.

  • Streaming - using Start and End Ports: Используйте скалярные входы для генерации HDL-кода. В этом режиме можно использовать сигналы startIn и endIn управления, чтобы определить, когда начать и остановить накопление. Данные выходы действительны, когда validIn высоко.

  • Streaming - using Number of Samples: Используйте скалярные входы для генерации HDL-кода. В этом режиме можно задать Number of Samples и использовать countIn сигнал управления, чтобы определить, когда начать и остановить накопление. Данные выходы действительны, когда validIn высоко.

Программное использование

Параметры блоков: opMode
Тип: Вектор символов
Значение: 'Vector' | 'Streaming - using Start and End Ports' | 'Streaming - using Number of Samples'
По умолчанию: 'Vector'

Вы можете задать смещение с:

  • Source как Dialog. Затем задайте Value.

  • Source как Input port. Эта настройка создает внешний входной порт c для ввода сигнала смещения в блок.

Программное использование

Параметры блоков: initValueSetting
Тип: Вектор символов
Значение: 'Dialog' | 'Input port'
По умолчанию: 'Dialog'

Если вы задаете Source следующим Dialog, можно задать начальное значение при помощи initValue2 настройка.

Параметры блоков: initValue2
Тип: Вектор символов
Значение: Целое число, больше или равное нулю
По умолчанию: '0.0'

Можно задать Number of Samples, чтобы задать систему координат, содержащий количество выборок допустимых накопленных выходов dataOut.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Number of Samples.

Программное использование

Параметры блоков: num_samples
Тип: Вектор символов
Значение: Целое число, больше или равное нулю
По умолчанию: '2'

Установите тип выходных данных:

  • Правило, которое наследует тип данных, такой как Inherit: Same as first input.

  • Встроенный тип данных, такой как single или int16.

  • Имя объекта типа данных. для образца, а Simulink.NumericType объект.

  • Выражение, которое вычисляет допустимый тип данных, например fixdt(1,16,0)

Потоковые режимы не удовлетворяют Inherit: Inherit via internal rule. Когда вы устанавливаете Output data type, вы можете использовать Data Type Assistant. Чтобы отобразить ассистента, щелкните Show data type assistant.

Программное использование

Параметры блоков: OutDataTypeStr
Тип: Вектор символов
По умолчанию: {'Inherit: Inherit via internal rule'}

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

Задайте округление как:

Ceiling

Округлает положительные и отрицательные числа к положительной бесконечности. Эквивалентно MATLAB® ceil функция.

Convergent

Округлить число до ближайшего представимого значения. Если происходит связывание, округляет до ближайшего четного целого числа. Эквивалентно Fixed-Point Designer™ convergent функция.

Floor

Округлает положительные и отрицательные числа к отрицательной бесконечности. Эквивалентно MATLAB floor функция.

Nearest

Округлает число до ближайшего представимого значения. Если происходит галстук, округляет к положительной бесконечности. Эквивалентен Fixed-Point Designer nearest функция.

Round

Округлить число до ближайшего представимого значения. Если происходит связывание, округляет положительные числа к положительной бесконечности и округляет отрицательные числа к отрицательной бесконечности. Эквивалентен Fixed-Point Designer round функция.

Simplest

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

Zero

Число округлений к нулю. Эквивалентно MATLAB fix функция.

Программное использование

Параметры блоков: RndMeth
Тип: Вектор символов
По умолчанию: {'Floor'}

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

Управляйте генерацией выходного порта validOut. Этот порт указывает, является ли dataOut допустимым.

прочь

Не отображает validOut выходной порт.

на

Отобразите validOut выходной порт.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Number of Samples или Streaming - using Start and End Ports.

Программное использование

Параметры блоков: validOut
Тип: Вектор символов
Значения: 'off' | 'on'
По умолчанию: 'off'

Управляйте генерацией входного порта endIn и endOut выхода порта. Порты указывают конец системы координат, содержащего допустимый выход накопления.

прочь

Не отображает endIn входной порт и endOut выходной порт.

на

Отобразите endIn входной порт и endOut выходной порт.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports.

Программное использование

Параметры блоков: endInandOut
Тип: Вектор символов
Значения: 'off' | 'on'
По умолчанию: 'off'

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

прочь

Не отображает startOut выходной порт.

на

Отобразите startOut выходной порт.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Start and End Ports.

Программное использование

Параметры блоков: startOut
Тип: Вектор символов
Значения: 'off' | 'on'
По умолчанию: 'off'

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

прочь

Не отображает countOut выходной порт.

на

Отобразите countOut выходной порт.

Зависимости

Чтобы включить этот порт, установите Operation Mode равным Streaming - using Number of Samples.

Программное использование

Параметры блоков: countOut
Тип: Вектор символов
Значения: 'off' | 'on'
По умолчанию: 'off'

Совет

С помощью блока Multiply-Accumulate можно:

  • Выполните операции матричного умножения. Для примера, если у вас есть две матрицы входов с размерностями N-by-M и M-by-P, можно вычислить результат при помощи N-by-P операции умножения-накопления параллельно.

  • Замените последовательность операций умножения и сложения, например, в блоках фильтров, и улучшите эффективность на оборудовании, сопоставив срезы DSP на FPGA. Этот рисунок показывает, как вы можете использовать Multiply-Accumulate блок с sfir_fixed модель.

Алгоритмы

расширить все

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ Simulink ®

.
Введенный в R2017b