Выполнение операции умножения-накопления на входах
Кодер ЛПВП/операции ЛПВП
Блок умножения-накопления выполняет эту операцию на входах a и bи предвзятость c, для вычисления результата dataOut.
dataOut = sum(a.* b) + c
По умолчанию блок работает в векторном режиме. Исходные данные a и b могут быть скалярами, векторами или 2-D матрицами. По умолчанию значение смещения c равно нулю, и блок вычисляет скалярное произведение входов a и b. Можно указать ненулевое значение для c с помощью Dialog или Input port в качестве Источника. Блок добавляет это смещение к скалярному произведению a и b. Операция умножения имеет полную точность независимо от настройки типа выходных данных. К операции сложения применяются параметры Тип данных вывода (Output data type) и Режим округления целых чисел (Integer rounding mode).
С помощью параметра «Режим работы» можно задать режимы работы потоковой передачи для блока «Умножение-накопление». При создании кода HDL при использовании режима потоковой передачи в блок вводятся скалярные значения. Блок имеет два режима потоковой передачи: Streaming - using Start and End ports и Streaming - using Number of Samples. При выборе этих режимов потоковой передачи можно указать управляющие сигналы для использования с режимом. Управляющие сигналы определяют, когда начинать и заканчивать накопление и когда выходной сигнал является действительным.
Скалярные входы не поддерживаются для генерации кода HDL. Чтобы создать код для блока, используйте векторные входы. Для скалярных входов используйте блок «Умножение-сложение».
Типы матричных данных не поддерживаются в интерфейсах блочных портов. При наличии сигналов матричного типа используйте блок «Произведение» в режиме умножения матриц.
Потоковые режимы работы для блока не поддерживаются внутри блока переустановляемой подсистемы для генерации кода HDL.
a - Входной сигналvector | matrix | array | busПорт для ввода данных в блок.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point
b - Входной сигналscalar | vector | matrix | array | busПорт для ввода данных в блок.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean | fixed point | enumerated | bus
c - Сигнал смещенияscalar | vector | matrix | array | busПорт для подачи сигнала смещения в блок. Блок добавляет это смещение к входам. Убедитесь, что тип данных сигнала смещения соответствует типу скалярного произведения входных сигналов.
Чтобы включить этот порт, установите для параметра Source значение Input port.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point
startIn - Начало сигнала управления накоплениемscalar | vector | matrix | array | busПорт для подачи управляющего сигнала для начала накопления. Рекомендуется использовать boolean сигнал типа данных в качестве входного сигнала порта. Чтобы начать получать накопленное выходное значение из сигнала dataOut, должны быть высоки сигналы startIn и validIn. Сигнал dataOut выдает накопленный результат из следующего тактового цикла.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Start and End Ports.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point
validIn - Действительный входной управляющий сигналscalar | vector | matrix | array | busПорт для выдачи управляющего сигнала, указывающего, что входной сигнал является действительным для накопления. Рекомендуется использовать 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
endIn - Конец сигнала управления накоплениемscalar | vector | matrix | array | busПорт для выдачи управляющего сигнала, указывающего на конец накопления. Для указания кадра, содержащего накопленные выходные данные, можно использовать сигналы startIn и endIn с сигналом validIn.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Start and End Ports а затем выберите End input и output ports.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point
dataOut - Выходной сигналscalar | vector | matrix | array | busПорт, генерирующий выходные данные из операции умножения-накопления. По умолчанию блок использует Vector режим работы и вычисляет скалярное произведение входных сигналов и добавляет смещение для получения результата. Если в качестве режима работы указан режим потоковой передачи, значение сигнала dataOut зависит от предоставляемых управляющих сигналов. Тип данных выходного сигнала тот же, что и у аккумулятора.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point
startOut - Начало накопления выходного управляющего сигналаscalar | vector | matrix | array | busПорт, генерирующий выходной управляющий сигнал для индикации начала накопления. Когда и 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
validOut - Действительный выходной управляющий сигналscalar | vector | matrix | array | busПорт, генерирующий выходной управляющий сигнал для указания на то, что сигнал dataOut является действительным. Когда сигнал validIn становится высоким, сигнал validOut становится высоким в следующем такте и указывает, что dataOut является допустимым.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Start and End Ports а затем выберите Допустимый выходной порт.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point
endOut - Конец накопительного выходного управляющего сигналаscalar | vector | matrix | array | busПорт, генерирующий выходной управляющий сигнал для указания конца накопления. Для указания допустимого кадра, содержащего накопленный выходной сигнал, можно использовать циклы тактовых импульсов между моментом, когда сигнал startOut становится высоким, и моментом, когда сигнал EndOut становится высоким.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Start and End Ports а затем выберите End input и output ports.
Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point
countOut - Выходной управляющий сигнал счетчикаscalar | vector | matrix | array | busПорт, генерирующий выходной управляющий сигнал для указания количества накапливаемых выборок. Значение этого сигнала увеличивается от 1 к значению, указанному для параметра «Количество образцов». При высоком значении сигнала 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' (по умолчанию) | 'Streaming - using Start and End Ports' | 'Streaming - using Number of Samples'Режим работы можно задать следующим образом:
Vector: Вы можете использовать скаляры или векторы в качестве входных данных. Блок выполняет скалярное произведение входов u1 и u2 и добавляет смещение k для получения результата.
Streaming - using Start and End PortsИспользование скалярных входов для генерации кода HDL. В этом режиме можно использовать управляющие сигналы startIn и endIn для определения времени начала и остановки накопления. Выходные данные действительны при высоком значении validIn.
Streaming - using Number of SamplesИспользование скалярных входов для генерации кода HDL. В этом режиме можно задать количество выборок и использовать управляющий сигнал countIn для определения времени начала и остановки накопления. Выходные данные действительны при высоком значении validIn.
Параметр блока:
opMode |
| Текст: символьный вектор |
Значение:
'Vector' | 'Streaming - using Start and End Ports' | 'Streaming - using Number of Samples' |
По умолчанию:
'Vector' |
Bias - Смещение для добавления к входному скалярному произведению{'0.0'} (по умолчанию)Смещение можно указать следующим образом:
Источник как Dialog. Затем укажите значение.
Источник как Input port. Этот параметр создает внешний входной порт c для ввода сигнала смещения в блок.
Параметр блока:
initValueSetting |
| Текст: символьный вектор |
Значение:
'Dialog' | 'Input port' |
По умолчанию:
'Dialog' |
Если для параметра «Источник» задано значение Dialog, можно указать начальное значение с помощью initValue2 установка.
Параметр блока:
initValue2 |
| Текст: символьный вектор |
| Значение: целое число, большее или равное нулю |
По умолчанию:
'0.0' |
Number of Samples - Количество выборок действительного накопленного выходного сигнала{'2'} (по умолчанию)Можно указать количество выборок, чтобы указать кадр, содержащий количество выборок действительных накопленных выходных данных Out.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Number of Samples.
Параметр блока:
num_samples |
| Текст: символьный вектор |
| Значение: целое число, большее или равное нулю |
По умолчанию:
'2' |
Output data type - Тип данных блочного выводаInherit: Inherit via back propagation (по умолчанию)Задайте тип выходных данных:
Правило, наследующее тип данных, например Inherit: Same as first input.
Встроенный тип данных, например single или int16.
Имя объекта типа данных. например, Simulink.NumericType объект.
Выражение, которое вычисляет допустимый тип данных, например: fixdt(1,16,0)
Режимы потоковой передачи не поддерживают Inherit: Inherit via internal rule. При установке типа выходных данных можно использовать помощник по типам данных. Для отображения помощника нажмите кнопку Show data type assistant.
![]()
Параметр блока:
OutDataTypeStr |
| Текст: символьный вектор |
По умолчанию:
{'Inherit: Inherit via internal rule'} |
Сведения о возможных значениях, которые можно задать для этого параметра, см. в разделе Параметры, зависящие от блока.
Integer rounding mode - Режим округления для операций с фиксированной точкойFloor (по умолчанию) | Ceiling | Convergent | Nearest | Round | Simplest | ZeroУкажите операцию округления как:
CeilingОкругляет положительные и отрицательные числа в сторону положительной бесконечности. Эквивалентно MATLAB
®ceil функция.
ConvergentОкругляет число до ближайшего представимого значения. Если возникает связь, округляется до ближайшего чётного целого числа. Эквивалентно Designer™ фиксированной точки convergent функция.
FloorОкругляет положительные и отрицательные числа в сторону отрицательной бесконечности. Эквивалентно MATLAB floor функция.
NearestОкругляет число до ближайшего представимого значения. Если возникает галстук, округляется до положительной бесконечности. Эквивалентно конструктору фиксированных точек nearest функция.
RoundОкругляет число до ближайшего представимого значения. Если возникает связь, округляет положительные числа в сторону положительной бесконечности и округляет отрицательные числа в сторону отрицательной бесконечности. Эквивалентно конструктору фиксированных точек round функция.
SimplestВыбор между округлением в сторону пола и округлением в сторону нуля для создания кода округления, который является максимально эффективным.
ZeroОкругляет число до нуля. Эквивалентно MATLAB fix функция.
Параметр блока:
RndMeth |
| Текст: символьный вектор |
По умолчанию:
{'Floor'} |
Сведения о возможных значениях, которые можно задать для этого параметра, см. в разделе Параметры, зависящие от блока.
Valid output port - Управляющая генерация выходного порта validate OutУправление генерацией выходного порта validedOut. Этот порт указывает, является ли значение dataOut допустимым.
Не отображает выходной порт validedOut.
Отображение выходного порта validedOut.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Number of Samples или Streaming - using Start and End Ports.
Параметр блока:
validOut |
| Текст: символьный вектор |
Значения:
'off' | 'on' |
По умолчанию:
'off' |
End input and output ports - Управление генерацией входного порта endIn и выходного порта endOutУправление генерацией входного порта endIn и выходного порта endOut. Порты указывают конец кадра, содержащего допустимые выходные данные накопления.
Не отображает входной порт endIn и выходной порт endOut.
Отображение входного порта endIn и выходного порта endOut.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Start and End Ports.
Параметр блока:
endInandOut |
| Текст: символьный вектор |
Значения:
'off' | 'on' |
По умолчанию:
'off' |
Start output port - Управление генерацией выходного порта startOutУправление генерацией выходного порта startOut. Этот порт генерирует сигнал startOut, который указывает начало кадра, содержащего действительные накопленные выходные данные.
Не отображает выходной порт startOut.
Отображение выходного порта startOut.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Start and End Ports.
Параметр блока:
startOut |
| Текст: символьный вектор |
Значения:
'off' | 'on' |
По умолчанию:
'off' |
Count output port - Управление генерацией выходного порта countOutУправление генерацией выходного порта countOut. Этот порт генерирует счетчик, указывающий кадр, содержащий допустимые выборки.
Не отображает выходной порт countOut.
Отображение выходного порта countOut.
Чтобы включить этот порт, установите для параметра Operation Mode значение Streaming - using Number of Samples.
Параметр блока:
countOut |
| Текст: символьный вектор |
Значения:
'off' | 'on' |
По умолчанию:
'off' |
Блок «Умножение-накопление» позволяет:
Выполните операции умножения матрицы. Например, если имеются два ввода матрицы с размерами N-by-M и M-by-P, можно вычислить результат с помощью N-by-P параллельно умножать-накапливать операции.
Замените последовательность операций умножения и сложения, например, в блоках фильтров, и повысьте производительность аппаратных средств путем преобразования в фрагменты DSP в FPGA. На этом рисунке показано, как можно использовать блок умножения-накопления с sfir_fixed модель.

Для задания режима потоковой передачи блока можно использовать параметр «Режим работы». При выборе Streaming - using Start and End Ports, по умолчанию включены три дополнительных параметра. Настройки включают в себя:
Допустимый выходной порт
Конечные порты ввода и вывода
Запуск выходного порта
Рекомендуется оставить эти параметры включенными. При применении настроек появляются три дополнительных порта ввода и три дополнительных порта вывода:
| Входные порты | Выходные порты |
|---|---|
| старт | startOut |
| validIn | validOut |
| окончание | endOut |
На этом рисунке показан потоковый режим работы с использованием начального и конечного портов. В этом примере значение смещения равно 8.

Первоначально при низком значении validIn значение dataOut равно нулю. В момент времени 1s, и startIn, и validIn становятся высокими. Следовательно, validOut становится высоким в следующем такте, и dataOut начинает производить действительные выходные данные накопления. Во время накопления dataOut принимает значения a и b из предыдущего тактового цикла. Например, в момент времени t = 2s, dataOut = 1 * 1 + 8 = 9.
Чтобы продолжить накопление, при следующем тактовом цикле установите низкий уровень startIn и оставьте высокий уровень validIn. dataOut продолжает накапливать входные данные до тех пор, пока значение validIn не станет низким. На каждом временном шаге dataOut вычисляет произведение входных данных из предыдущего тактового цикла и суммирует результат со значением dataOut из предыдущего тактового цикла. Например, в момент времени t = 3s dataOut = 2 * 2 + 9 = 13.
Когда validIn становится низким, dataOut удерживает выходное значение, видимое в момент времени t = 5s. При t = 5 с значение endIn и validIn являются высокими. Поэтому значение EndOut становится высоким в следующем такте, что указывает на конец кадра. Таким образом, кадр между t = 2s (когда startOut высокий) и t = 6s (когда endOut высокий) указывает кадр, содержащий допустимый выход.
Если startIn, validIn и endIn оба являются высокими одновременно, только dataOut, соответствующий этим входам, накапливаются, как видно при t = 8s. Если startIn является высоким для нескольких тактовых циклов, и если validIn является высоким, аккумулятор сбрасывается при каждом такте, как видно при t = 10s и t = 11s. Накопление продолжается при t = 12 с.
Для задания режима потоковой передачи блока можно использовать параметр «Режим работы». При выборе Streaming - using Number of Samples, по умолчанию включены две дополнительные настройки. Настройки включают в себя:
Допустимый выходной порт
Порт вывода счетчика
Рекомендуется оставить эти параметры включенными. При применении настроек появляется дополнительный входной порт validIn и три дополнительных выходных порта:
endOut
validOut
countOut
Этот рисунок иллюстрирует потоковый режим работы с использованием количества выборок. В этом примере значение смещения равно 8 и количество образцов равно 5.

Первоначально при низком значении validIn значение dataOut равно 0 и Countout имеет значение 1. В момент времени 1s, validIn становится высоким. Следовательно, значение validOut становится высоким в следующем такте, и dataOut начинает генерировать действительные выходные данные накопления. Во время накопления dataOut принимает значения a и b из предыдущего тактового цикла. Например, в момент времени t = 2s, dataOut = 1 * 1 =1. Приращение отсчета на 1 при следующем такте, то есть при t = 3s, countOut становится 2.
Чтобы продолжить накопление, оставьте значение validIn высоким. dataOut продолжает накапливать входные данные до тех пор, пока значение validIn не станет низким. Когда из dataOut получено пять допустимых выходов, countOut становится 5 и Endout становится высоким, что указывает на конец кадра. Следовательно, время между тем, когда countOut 1 и когда countOut равно пяти, указывает кадр, содержащий допустимый выходной сигнал.
Счетчик накопителя сброшен и отсчет начинается с 1. Когда значение validIn снова становится высоким, dataOut начинает накапливать новый набор значений, а countOut начинает увеличиваться для каждого допустимого dataOut.
HDL Coder™ предоставляет дополнительные опции конфигурации, которые влияют на реализацию HDL и синтезированную логику.
| Настройка архитектуры HDL | Описание |
|---|---|
| В этом режиме выбирается |
Parallel | Для входных векторов размера |
Serial | Для входных векторов размера
При синтезировании конструкции, в зависимости от ширины входных битов, эта архитектура соответствует одному фрагменту DSP в FPGA. |
| Общая информация | |
|---|---|
| ConstrainedOutputPipeline | Количество регистров для размещения на выходах путем перемещения существующих задержек в рамках проекта. Распределенная конвейерная обработка не перераспределяет эти регистры. Значение по умолчанию: |
| InputPipeline | Количество входных ступеней трубопровода для вставки в сформированный код. Распределенная конвейерная обработка и конвейерная обработка с ограниченным выходом могут перемещать эти регистры. Значение по умолчанию: |
| OutputPipeline | Количество выходных ступеней трубопровода для вставки в сформированный код. Распределенная конвейерная обработка и конвейерная обработка с ограниченным выходом могут перемещать эти регистры. Значение по умолчанию: |
При использовании сложных сигналов этот блок может генерировать код HDL, но не отображается на фрагменты DSP.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.