Выполните операцию умножения-накопления на входах
Операции HDL-кодера/HDL
Блок 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-кода. Чтобы сгенерировать код для блока, используйте векторные входы. Со скалярными входами используйте блок Multiply-Add.
Типы матричных данных не поддерживаются в интерфейсах блочных портов. Если у вас есть сигналы матричного типа, используйте блок Product в режиме умножения матрицы.
Потоковые режимы операции блока не поддерживаются внутри блока Resettable Subsystem для генерации 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 and output ports.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fixed point
dataOut
- Выходной сигналscalar
| vector
| matrix
| array
| bus
Порт, который генерирует выходные данные от операции умножения-накопления. По умолчанию блок использует Vector
режим работы и вычисляет точечный продукт входных сигналов, и добавляет смещение, чтобы получить результат. Если вы задаете потоковый режим операции как Operation Mode, значение сигнала 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
а затем выберите Valid output port.
Типы данных: 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 and output ports.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fixed point
countOut
- Подсчет выходного управляющего сигналаscalar
| vector
| matrix
| array
| bus
Порт, который генерирует выходной сигнал управления, чтобы указать количество выборок для накопления. Значение этого сигнала увеличивается от 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'
(по умолчанию) | 'Streaming - using Start and End Ports'
| 'Streaming - using Number of Samples'
Можно задать 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'
|
Bias
- Смещение, чтобы добавить к продукту входной точки{'0.0'}
(по умолчанию)Вы можете задать смещение с:
Source как Dialog
. Затем задайте Value.
Source как Input port
. Эта настройка создает внешний входной порт c
для ввода сигнала смещения в блок.
Параметры блоков:
initValueSetting
|
Тип: Вектор символов |
Значение:
'Dialog' | 'Input port' |
По умолчанию:
'Dialog'
|
Если вы задаете Source следующим Dialog
, можно задать начальное значение при помощи initValue2
настройка.
Параметры блоков:
initValue2
|
Тип: Вектор символов |
Значение: Целое число, больше или равное нулю |
По умолчанию:
'0.0'
|
Number of Samples
- Количество выборок действительного накопленного выходного сигнала{'2'}
(по умолчанию)Можно задать Number of Samples, чтобы задать систему координат, содержащий количество выборок допустимых накопленных выходов dataOut.
Чтобы включить этот порт, установите 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
. Когда вы устанавливаете Output data type, вы можете использовать Data Type Assistant. Чтобы отобразить ассистента, щелкните Show data type assistant.
Параметры блоков:
OutDataTypeStr
|
Тип: Вектор символов |
По умолчанию:
{'Inherit: Inherit via internal rule'} |
Чтобы увидеть возможные значения, которые можно задать для этого параметра, смотрите Специфические для блока Параметры.
Integer rounding mode
- Режим округления для операций с фиксированной точкойFloor
(по умолчанию) | Ceiling
| Convergent
| Nearest
| Round
| Simplest
| Zero
Задайте округление как:
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'}
|
Чтобы увидеть возможные значения, которые можно задать для этого параметра, смотрите Специфические для блока Параметры.
Valid output port
- Управляйте генерацией выходного порта validOutУправляйте генерацией выходного порта validOut. Этот порт указывает, является ли dataOut допустимым.
Не отображает validOut выходной порт.
Отобразите validOut выходной порт.
Чтобы включить этот порт, установите 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'
|
С помощью блока Multiply-Accumulate можно:
Выполните операции матричного умножения. Для примера, если у вас есть две матрицы входов с размерностями N-by-M
и M-by-P
, можно вычислить результат при помощи N-by-P
операции умножения-накопления параллельно.
Замените последовательность операций умножения и сложения, например, в блоках фильтров, и улучшите эффективность на оборудовании, сопоставив срезы DSP на FPGA. Этот рисунок показывает, как вы можете использовать Multiply-Accumulate блок с sfir_fixed
модель.
Можно использовать настройку Operation Mode для блока, чтобы задать потоковый режим операции. Когда вы выбираете Streaming - using Start and End Ports
по умолчанию отображаются три дополнительные настройки. Настройки включают:
Valid output port
End input and output ports
Start output port
Рекомендуется оставить эти параметры включенными. При применении настроек появляются три дополнительных входных порта и три дополнительных выходных порта:
Входные порты | Выходные порты |
---|---|
startIn | startOut |
validIn | validOut |
endIn | 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 = 5s endIn и validIn высоки. Поэтому endOut становится высоким в следующем тактовом цикле, который указывает на конец системы координат. Поэтому система координат между t = 2s (когда startOut высоко) и t = 6s (когда endOut высоко) указывает на систему координат, содержащий допустимый выход.
Если startIn, validIn и endIn одновременно высоки, то накапливаются только dataOut, соответствующие этим входам, как видно на t = 8s. Если startIn высока для нескольких тактов, и если validIn высока, аккумулятор сбрасывается в каждом такте, как видно на t = 10s и t = 11s. Накопление продолжается при t = 12s.
Можно использовать настройку Operation Mode для блока, чтобы задать потоковый режим операции. Когда вы выбираете Streaming - using Number of Samples
по умолчанию отображаются две дополнительные настройки. Настройки включают:
Valid output port
Count output port
Рекомендуется оставить эти параметры включенными. Когда вы применяете настройки, у вас есть дополнительный входной порт validIn и появляются три дополнительных выходных порта:
endOut
validOut
countOut
Этот рисунок иллюстрирует потоковый режим операции, используя количество выборок. В этом примере значение смещения 8
и Number of Samples 5
.
Первоначально, когда validIn низкая, dataOut 0
а countOut есть 1
. Во время 1s
, validIn становится высоким. Поэтому validOut становится высоким в следующем тактовом цикле, и dataOut начинает выдавать действительный выход накопления. Во время накопления dataOut принимает значения a и b от предыдущего такта. Для примера в момент t = 2s
, dataOut = 1*1 = 1
. countOut шагов по 1
при следующем такте, то есть при t = 3s
, countOut становится 2
.
Чтобы продолжить накопление, держите validIn высоким. dataOut продолжает накапливать входы, пока validIn не станет низким. Когда из dataOut получают пять допустимых выходов, countOut становится 5
и endOut становится высоким, что указывает на конец системы координат. Поэтому время между countOut 1
и когда countOut равно пяти, указывает на систему координат, содержащую действительные выходы.
Счетчик аккумулятора теперь сбрасывается, и countOut начинается с 1
. Когда validIn снова становится высоким, dataOut начинает накапливать новое множество значений и countOut начинает увеличиваться для каждого допустимого dataOut.
HDL Coder™ предоставляет дополнительные опции строения, которые влияют на реализацию HDL и синтезированную логику.
Настройка архитектуры HDL | Описание |
---|---|
| Этот режим выбирает |
Parallel | Для входных векторов размера |
Serial | Для входных векторов размера
Когда вы синтезируете свой проект, в зависимости от входных битовых ширин, эта архитектура сопоставляется с одним срезом DSP на FPGA. |
Общая информация | |
---|---|
ConstrainedOutputPipeline | Количество регистров для размещения на выходах путем перемещения существующих задержек в рамках вашего проекта. Распределённая конвейеризация не перераспределяет эти регистры. Значение по умолчанию является |
InputPipeline | Количество входных этапов конвейера для вставки в сгенерированный код. Распределённая конвейеризация и ограниченная выходная конвейеризация могут перемещать эти регистры. Значение по умолчанию является |
OutputPipeline | Количество выходных этапов конвейера для вставки в сгенерированный код. Распределённая конвейеризация и ограниченная выходная конвейеризация могут перемещать эти регистры. Значение по умолчанию является |
Когда вы используете сложные сигналы, этот блок может сгенерировать HDL-код, но не сопоставляется с срезами DSP.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.