Совместное использование ресурсов - это оптимизация области, в которой HDL Coder™ идентифицирует несколько функционально эквивалентных ресурсов и заменяет их одним ресурсом. Данные мультиплексируются во времени по совместно используемому ресурсу для выполнения тех же операций. Дополнительные сведения о совместном использовании ресурсов см. в разделе Общий доступ к ресурсам.
Чтобы узнать, как использовать совместное использование ресурсов с потоковой передачей при обработке векторов 1-D и матриц 2-D, выполните следующие инструкции. Каждое руководство имеет уровень серьезности, который указывает уровень соответствия требованиям. Дополнительные сведения см. в разделе Рекомендации по моделированию HDL Уровни серьезности.
Идентификатор руководства
3.1.9
Серьезность
Информативный
Описание
Для уменьшения площади цепи блока подсистемы, который выполняет одно и то же вычисление для каждого элемента вектора 1-D, используйте свойство блока HDL подсистемы StreamingFactor. Для векторного сигнала, имеющего N элементов, установите StreamingFactor в значение N. Используя мультиплексирование с временным разделением для обработки каждого элемента, можно обработать результат, используя меньшее количество операций. Тактовая частота операторов становится в N раз быстрее тактовой частоты исходной модели.
Когда подсистема, содержащая ресурсы, подлежащие совместному использованию, использует множество векторных сигналов с различными размерами, тактовая частота умножается на наименьшее общее кратное векторному размеру, что может уменьшить максимально достижимую целевую частоту. Для достижения требуемой частоты:
Добавьте логику для демультиплексирования векторного сигнала до его поступления в подсистему и для мультиплексирования сигнала, который выходит из подсистемы. Затем можно указать SharingFactor в подсистеме вместо StreamingFactor.
Поместите различные векторные сигналы таким образом, чтобы они имели тот же размер, что и векторный сигнал, который имеет максимальный размер, а затем укажите StreamingFactor.
Открытие модели hdlcoder_vector_stream_gain.
open_system('hdlcoder_vector_stream_gain') set_param('hdlcoder_vector_stream_gain', 'SimulationCommand', 'Update')

Модель принимает 10-элементный векторный сигнал в качестве входного сигнала и умножает каждый элемент на значение усиления, которое на единицу больше предыдущего значения.
open_system('hdlcoder_vector_stream_gain/Gain_Stream')

Для просмотра результатов моделирования смоделируйте модель и откройте блок «Область».
sim('hdlcoder_vector_stream_gain') open_system('hdlcoder_vector_stream_gain/Show Processing Time')

Gain_Stream подсистема имеет значение StreamingFactor 10. Чтобы создать код HDL для этой подсистемы, запустите makehdl функция:
makehdl('hdlcoder_vector_stream_gain/Gain_Stream')
После создания кода HDL, чтобы увидеть эффект оптимизации потоковой передачи, откройте созданную модель и перейдите внутрь Gain_Stream подсистема.

Векторные данные сериализуются на стороне ввода, а размер вывода параллелизирует последовательные данные. Эта оптимизация увеличивает общий размер цепи, наоборот, когда целевой размер цепи для совместного использования мал. Блок усиления внутри совместно используемой подсистемы работает со скоростью, в 10 раз превышающей базовую скорость модели, что позволяет избежать увеличения задержки подсистемы и сбалансировать уменьшение максимальной достижимой частоты за счет увеличения экономии площади на целевых аппаратных средствах.
3.1.10
Информативный
Блок умножения матрицы - это блок произведения, параметр блока умножения которого имеет значение Matrix(*). В диалоговом окне «Свойства блока HDL» для архитектуры HDL установлено значение Matrix Multiply и можно указать стратегию DotProductStrategy.
Параметры DotProductStrategy
| DotProductStrategy | Описание |
|---|---|
'Fully Parallel' (по умолчанию) | Параллельно выполняет операции умножения и сложения. [MxN]*[NxM] требуется умножение матрицы N*M*M множители. |
'Parallel Multiply-Accumulate' | Для реализации матричного умножения используется параллельная архитектура блока умножения-накопления. Эта архитектура выполняет несколько блоков Multiply-Add параллельно с накоплением. |
'Serial Multiply-Accumulate' | Использует последовательную архитектуру блока умножения-накопления для реализации умножения матриц. Этот режим работает N время избыточной выборки и число множителей становится M*M. |
Для совместного использования ресурсов и дальнейшего сокращения числа множителей при наличии нескольких блоков матричного умножения в одной подсистеме установите для DotProductStrategy значение Fully Parallel и укажите SharingFactor в верхней подсистеме.
Для умножений, включающих комплексные и вещественные числа, число множителей удваивается.
Количество множителей, генерируемых умножением [MxN] * [NxM]
| Тип умножения | Полностью параллельное/параллельное умножение - накопление | Последовательное умножение - накопление |
|---|---|---|
| Реальные x Реальные | N*M*M | M*M |
| Комплекс x Вещественный | N*M*M*2 | M*M*2 |
| Комплекс x Комплекс | N*M*M*4 | M*M*4 |
Для умножения матрицы с плавающей запятой используйте Native Floating Point в качестве IP-библиотеки с плавающей запятой. В этом случае необходимо использовать Fully Parallel
DotProductStrategy. Поскольку этот режим не использует операции по элементам и выполняет операции параллельного умножения и сложения, используйте SharingFactor вместо StreamingFactor для совместного использования ресурсов и сохранения области цепи.
Пример выполнения умножения матриц потоковой передачи с использованием типов с плавающей запятой см. в разделе Создание кода HDL для объекта системы умножения матриц потоковой передачи.