В этом примере показано, как использовать блоки в Для Каждой Подсистемы в вашей модели Simulink™, и затем сгенерировать HDL-код.
Чтобы неоднократно выполнять тот же алгоритм на отдельных элементах или подрешетках входных сигналов, используйте Для Каждого блока Subsystem. Набор блоков в Подсистеме реплицирует алгоритм, который применяется к отдельным элементам или одинаково разделенным подрешеткам входных сигналов. Используя Для Каждого блока Subsystem, вы не должны создавать и соединять копии блока Subsystem, чтобы смоделировать тот же алгоритм. Для Каждой Подсистемы:
Векторная или 2D матричная обработка поддержек, которая уменьшает время симуляции вашей модели. Можно обработать отдельные элементы или подрешетки входного сигнала одновременно.
Улучшается удобочитаемость кода при помощи для - генерируют цикл в сгенерированном HDL-коде. Для - генерируют цикл, сокращает количество строк кода, которые могут в противном случае привести к сотням строк кода для больших векторных сигналов.
Генерация HDL-кода поддержек для всех типов данных, блоков Simulink™ и предопределенных и пользовательских системных объектов.
Оптимизация поддержек на и в блоке, такая как разделение ресурсов и конвейеризация. Возможность параллельной обработки Для Каждого блока Subsystem, объединенного с оптимизацией, которую вы задаете, производит высокую производительность на целевом устройстве FPGA.
Откройте foreach_subsystem_example1
модель. Вы видите этот простой алгоритм, смоделированный в Для Каждого блока Subsystem.
Когда вы симулируете модель, вы видите что входные сигналы In1
и In3
разделены в подрешетки. Чтобы видеть это разделение, дважды кликните блок For Each. Ширина Размерности и Раздела Раздела параметров блоков задает размерность, через которую входной сигнал разделен и ширина каждого среза раздела соответственно. На основе размеров входного сигнала и разделения, которое вы задаете, Для Каждой Подсистемы, определяет количество итераций, которых это требует, чтобы вычислить алгоритм.
В этом примере входные сигналы In1 и In3 размера 8 разделены в четыре подрешетки, каждый размер 2. Входной сигнал In2 размера 2 не разделен. Вычислить алгоритм, Для Каждой Подсистемы требует четырех итераций с каждой итерацией, повторяющей алгоритм на каждой из четырех подрешеток In1 и In3.
Для Каждой Подсистемы упрощает моделирование векторизованных алгоритмов. Этот рисунок показывает, как можно смоделировать тот же алгоритм путем создания нескольких экземпляров подсистемы. Эта модель может стать графически комплексной и трудной обеспечить.
Для Каждой Подсистемы поддерживает 2D матричный вход для генерации HDL-кода. Например, foreach_subsystem_example2
модель показывает простую многоканальную работу фильтра. Генерация HDL-кода не поддерживается для матриц в портах ввода и вывода HDL DUT, таким образом, модель разделяет каналы на контуре подсистемы DUT.
Для Каждой подсистемы составляет в среднем выборки на каждом канале. Сгенерированный HDL-код будет содержать три копии логики в Для Каждой Подсистемы, и каждый работает с 4x1 вектор.
Блок не поддерживает сложные типы данных как входные параметры для генерации 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.
Чтобы узнать больше об оптимизации разделения ресурсов, смотрите Разделение ресурсов.