Этот пример показывает, как использовать блоки в Для Каждой Подсистемы в вашей модели Simulink™, и затем сгенерировать HDL-код.
Чтобы неоднократно выполнять тот же алгоритм на отдельных элементах или подмассивах входных сигналов, используйте Для Каждого блока Subsystem. Набор блоков в Подсистеме реплицирует алгоритм, который применяется к отдельным элементам или одинаково разделенным подмассивам входных сигналов. Используя Для Каждого блока Subsystem, вы не должны создавать и соединять копии блока Subsystem, чтобы смоделировать тот же алгоритм. Для Каждой Подсистемы:
Обработка вектора поддержек, которая уменьшает время симуляции вашей модели. Можно обработать отдельные элементы или подмассивы входного сигнала одновременно.
Улучшается удобочитаемость кода при помощи для - генерируют цикл в сгенерированном HDL-коде. Для - генерируют цикл, сокращает количество строк кода, которые могут в противном случае привести к сотням строк кода для больших векторных сигналов.
Генерация HDL-кода поддержек для всех типов данных, блоков Simulink™ и предопределенных и пользовательских системных объектов.
Оптимизация поддержек на и в блоке, такая как разделение ресурсов и конвейеризация. Возможность параллельной обработки Для Каждого блока Subsystem, объединенного с оптимизацией, которую вы задаете, производит высокую производительность на целевом устройстве FPGA.
Откройте модель foreach_subsystem_example1
. Вы видите этот простой алгоритм, смоделированный в Для Каждого блока Subsystem.
Когда вы моделируете модель, вы видите, что входные сигналы In1
и In3
разделены в подмассивы. Чтобы видеть это разделение, дважды кликните блок For Each. Ширина Размерности и Раздела Раздела параметров блоков задает размерность, через которую входной сигнал разделен и ширина каждого среза раздела соответственно. На основе размеров входного сигнала и разделения, которое вы задаете, Для Каждой Подсистемы, определяет количество итераций, которых это требует, чтобы вычислить алгоритм.
В этом примере входные сигналы In1 и In3 размера 8 разделены в четыре подмассива, каждый размер 2. Входной сигнал In2 размера 2 не разделен. Вычислить алгоритм, Для Каждой Подсистемы требует четырех итераций с каждой итерацией, повторяющей алгоритм на каждом из четырех подмассивов In1 и In3.
Для Каждой Подсистемы упрощает моделирование векторизованных алгоритмов. Эти данные показывают, как можно смоделировать тот же алгоритм путем создания нескольких экземпляров подсистемы. Эта модель может стать графически комплексной и трудной поддержать.
Блок не поддерживает сложные типы данных как входные параметры для генерации HDL-кода. Чтобы ввести комплексный сигнал, можно преобразовать этот сигнал в массив сигналов, и затем ввести к блоку.
Выполнять тот же алгоритм и на действительных и на мнимых частях сигнала:
Разделите сигнал на действительные и мнимые части при помощи блока Complex to Real-Imag.
Создайте векторный сигнал, который состоит из действительных и мнимых частей при помощи блока Mux.
Можно затем ввести этот вектор к Для Каждого блока Subsystem и реплицировать то же вычисление и в действительные и в мнимые части. При выводе Для Каждой Подсистемы, можно преобразовать векторный вывод назад в комплексный сигнал. Используйте блок Demux, чтобы разделить действительные и мнимые скалярные части, и затем ввести скаляры к Действительному-Imag к блоку Complex.
Чтобы сгенерировать HDL-код, в модели foreach_subsystem_example1
, щелкают правой кнопкой по блоку Subsystem_Foreach
и выбирают HDL Code> Generate HDL for Subsystem.
Чтобы видеть сгенерированный HDL-код для блока Subsystem_Foreach
, в Командном окне MATLAB™, кликают по файлу Subsystem_Foreach.vhd
. Во фрагменте кода VHDL вы видите, что это для - генерирует цикл в HDL-коде. Этот цикл создает четыре экземпляра подсистемы с каждым экземпляром, выполняющим алгоритм на размере 2 подмассива входных параметров In1 и In3.
Определенная оптимизация, которую вы задаете, может изменить содержимое подсистем, который Для Каждой Подсистемы инстанцирует. В таких случаях генератор кода не использует для - генерируют циклы в HDL-коде. HDL-код не содержит для - генерируют циклы, если вы имеете:
Соедините шиной или объедините входные сигналы.
Определенная оптимизация включила на подсистеме, такой как разделение ресурсов и потоковая передача.
Векторные входные параметры, которые разделены в нескалярные сигналы в коде Verilog. Чтобы получить для - генерируют циклы в коде Verilog, делят векторный сигнал к скалярам.
Оптимизировать алгоритм содержало в Для Каждой Подсистемы, можно включить оптимизацию, такую как разделение ресурсов и передающий потоком на DUT, который содержит Для Каждой Подсистемы. Например, при помощи оптимизации разделения ресурсов, можно совместно использовать несколько экземпляров Подсистемы, которые создаются Для Каждой Подсистемы. Эта оптимизация снова использует алгоритм, смоделированный Подсистемой через несколько экземпляров, и уменьшает использование области на целевом устройстве.
Примечание: Когда вы включаете оптимизацию на Для Каждой Подсистемы, сгенерированный HDL-код не содержит для - генерируют циклы.
Этот пример показывает, как использовать оптимизацию разделения ресурсов на Для Каждой Подсистемы. Чтобы совместно использовать ресурсы, выберите блок Subsystem, который содержит Для Каждой Подсистемы, и затем задайте Совместное использование Фактора. В этом примере щелкните правой кнопкой по блоку Subsystem_Foreach
и выберите HDL Code> HDL Block Properties. Установите Совместное использование Фактора на 4, потому что Для Каждой Подсистемы генерирует четыре экземпляра Подсистемы. Затем сгенерируйте HDL-код для блока Subsystem_Foreach
.
Чтобы видеть эффект оптимизации разделения ресурсов, в командной строке, вводят gm_foreach_subsystem_example1
, чтобы открыть сгенерированную модель. В сгенерированной модели вы видите, что оптимизация совместно использовала четыре экземпляра подсистемы, сгенерированные Для Каждой Подсистемы в одну Подсистему For Each Subsystem_Instance1
.
Если вы дважды кликаете блок For Each Subsystem_Instance1
, вы видите алгоритм, вычисленный для размера 2 подмассива входных параметров In1 и In3.
Чтобы узнать больше об оптимизации разделения ресурсов, смотрите Разделение ресурсов.