Сгенерируйте HDL-код для блоков внутри для каждой подсистемы

В этом примере показано, как использовать блоки в Для Каждой Подсистемы в вашей модели 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-кода. Чтобы ввести комплексный сигнал, можно преобразовать этот сигнал в массив сигналов, и затем ввести с блоком.

Выполнять тот же алгоритм и на действительных и на мнимых частях сигнала:

  1. Разделите сигнал на действительные и мнимые части при помощи блока Complex to Real-Imag.

  2. Создайте векторный сигнал, который состоит из действительных и мнимых частей при помощи блока Mux.

Можно затем ввести этот вектор к Для Каждого блока Subsystem и реплицировать тот же расчет и в действительные и в мнимые части. При выходе Для Каждой Подсистемы, можно преобразовать векторный выход назад в комплексный сигнал. Используйте блок Demux, чтобы разделить действительные и мнимые скалярные части, и затем ввести скаляры к Действительному-Imag с блоком Complex.

Сгенерируйте HDL-код

Сгенерировать HDL-код, в foreach_subsystem_example1 модель, щелкните правой кнопкой по Subsystem_Foreach блокируйте и выберите HDL Code> Generate HDL for Subsystem.

Видеть сгенерированный HDL-код для Subsystem_Foreach блокируйтесь, в Командном окне MATLAB™, нажмите Subsystem_Foreach.vhd файл. Во фрагменте кода VHDL вы видите, что это для - генерирует цикл в HDL code.This, цикл создает четыре экземпляра подсистемы с каждым экземпляром, выполняющим алгоритм на размере 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.

Чтобы узнать больше об оптимизации разделения ресурсов, смотрите Разделение ресурсов.

Смотрите также