Использование различных типов подсистемы

Можно следовать этим инструкциям, чтобы изучить, как использовать различные типы подсистем в проекте и смоделировать алгоритм иерархически. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований податливости. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.

Виртуальная подсистема: используйте в качестве DUT Верхнего уровня

ID инструкции

2.4.1

Серьезность

Строго рекомендуемый

Описание

Виртуальной подсистемой является Subsystem, который не является условно выполняемым Subsystem или Atomic Subsystem. По умолчанию регулярный блок Subsystem, который вы добавляете в свою модель Simulink®, является виртуальной подсистемой.

Если вы используете DUT неверхнего уровня в качестве виртуальной подсистемы, преобразование в модель - ссылку может изменить семантику подсистемы, потому что последовательность выполнения модели, на которую ссылаются, эквивалентна Atomic Subsystem. Чтобы сохранить семантику подсистемы, задайте DUT как невиртуальную подсистему перед генерацией HDL-кода и верификацией. Невиртуальные типы подсистемы включают Атомарную подсистему, модель - ссылку, Различную Подсистему и различную модель. Можно узнать об этих типах подсистемы в предыдущих разделах.

Чтобы определить, является ли подсистема виртуальной, можно использовать get_param функция параметром IsSubsystemVirtual. Например:

get_param('sfir_fixed/symmetric_fir', 'IsSubsystemVirtual')

Атомарная подсистема: сгенерируйте допускающие повторное использование файлы HDL

ID инструкции

2.4.2

Серьезность

Рекомендуемый

Описание

Можно задать DUT как Atomic Subsystem. Чтобы задать Subsystem как Atomic Subsystem, в диалоговом окне Block Parameters что Subsystem, выбирают Treat as atomic unit. Используйте атомарные подсистемы, чтобы сгенерировать один файл HDL для идентичных экземпляров подсистем, которые вы используете на более низких уровнях иерархии. Чтобы узнать больше, смотрите, Генерируют Повторно используемый код для Атомарных подсистем.

Чтобы включить разделение ресурсов на модуле подсистемы, задайте все подсистемы, которые вы хотите совместно использовать как атомарные подсистемы. Чтобы узнать больше, смотрите Общие Факторы для Совместного использования Подсистем.

Различная подсистема: Используя различные подсистемы для генерации HDL-кода

ID инструкции

2.4.3

Серьезность

Обязательный

Описание

Различная Подсистема, Различный блок Model является шаблоном, предварительно сконфигурированным, чтобы содержать два блока Subsystem, чтобы использовать в качестве Различного выбора Подсистемы. Во времени симуляции решает различное управление, который среди этих двух блоков Subsystem активен. Поэтому можно использовать Различную Подсистему, чтобы создать две различных настройки или поведения подсистемы и затем задать активную настройку во времени симуляции.

  • Вы не можете использовать Различную Подсистему в качестве DUT. Чтобы сгенерировать код, поместите Различную Подсистему в Подсистеме, которую вы хотите использовать в качестве DUT. Имя файла и имя экземпляра сгенерированного кода уникальны для активной настройки, которая выбрана во время генерации кода.

  • Вы не можете совместно использовать несколько Различных блоков Subsystem при помощи Различной оптимизации Подсистемы.

  • Необходимо убедиться, что при проверке функциональности сгенерированного кода, активный вариант, который вы использовали при симуляции модели, совпадает с активным вариантом, который вы использовали в генерации HDL-кода.

Для примера откройте модель hdlcoder_variant_subsystem_design.slx. Если вы открываете Подсистему DUT, вы видите Различный блок Subsystem, Divide. Различная Подсистема имеет две различных подсистемы, Recip и Op. Если вы открываете диалоговое окно Block Parameters для Divide Подсистема, вы видите Различное выражение управления и Условие, которое определяет который Подсистема включить в процессе моделирования. В этом случае, Recip 1, и Recip Подсистема становится активной в процессе моделирования.

load_system('hdlcoder_variant_subsystem_design')
set_param('hdlcoder_variant_subsystem_design','SimulationCommand','Update')
open_system('hdlcoder_variant_subsystem_design/DUT/Divide')
variantRecip =

Simulink.Variant
    Condition: 'Recip == 1'


variantOp =

Simulink.Variant
    Condition: 'Recip == 0'


Recip =

     1

Чтобы сгенерировать HDL-код, запустите эту команду:

makehdl('hdlcoder_variant_subsystem_design/DUT')

Файл HDL с именем Recip.vhd сгенерирован, потому что код сгенерирован для Recip Подсистема, которая активна во время генерации кода.

Модели - ссылки: создайте проект модели Используя меньшие разделы

ID инструкции

2.4.4

Серьезность

Рекомендуемый

Описание

Моделирование большого проекта иерархически может увеличить время генерации кода. Если вы задаете генерацию отчетов, таких как отчет трассируемости, время генерации кода может далее значительно увеличиться. Чтобы избежать таких проблем производительности, рекомендуется, чтобы вы разделили свой проект в меньшие разделы. Используйте блок Model, чтобы объединить модель, которая состоит из меньших разделов. Это также включает инкрементную генерацию кода. Можно сгенерировать HDL-код для родительской модели или модели, на которую ссылаются. Видеть сгенерированный HDL-код, в hdlsrc папка, папка создается для родительской модели с отдельной подпапкой для модели, на которую ссылаются.

При генерации испытательного стенда HDL, если испытательный стенд состоит из блоков, которые действуют со временем непрерывной выборки, можно преобразовать DUT в модель, на которую ссылаются. Это преобразование позволяет DUT запуститься на фиксированном шаге, дискретном шаге расчета. Чтобы узнать больше, смотрите, Преобразуют Подсистему DUT в Модель - ссылку для Испытательных стендов с Непрерывными Блоками.

Для примера откройте модель hdlcoder_divide_parentmodel.slx. Когда вы дважды кликаете Подсистему DUT, вы видите блок Model, это ссылается на модель hdlcoder_divide_referencedmodel.

load_system('hdlcoder_divide_parentmodel')
set_param('hdlcoder_divide_parentmodel', 'SimulationCommand', 'Update')
open_system('hdlcoder_divide_parentmodel/DUT')

Чтобы видеть модель, на которую ссылаются, дважды кликните блок Model:

open_system('hdlcoder_divide_parentmodel/DUT/Model')

Чтобы сгенерировать HDL-код, введите эту команду:

makehdl('hdlcoder_divide_parentmodel/DUT')

Для получения дополнительной информации см., что Модель Ссылается для генерации HDL-кода.

Блокируйте настройки Enabled и Triggered подсистем

ID инструкции

2.4.5

Серьезность

Обязательный

Описание

Triggered Subsystem является подсистемой, которая получает управляющий сигнал через блок Trigger. Triggered Subsystem выполняется для одного цикла каждый раз, когда триггерное событие имеет место. Когда вы генерируете HDL-код для инициированной подсистемы:

  • Не используйте блок Triggered Subsystem в качестве DUT. Поместите Triggered Subsystem в другом блоке Subsystem и используйте тот Subsystem в качестве DUT.

  • Убедитесь, что начальным условием Triggered Subsystem должен быть нуль.

  • Можно добавить единичные задержки в выходные сигналы Triggered Subsystem. Единичные задержки препятствуют тому, чтобы генератор кода вставил дополнительные обходные регистры в HDL-код.

  • Убедитесь, что установка Use trigger signal as clock не приводит к синхронизации несоответствий, когда вы симулируете испытательный стенд, чтобы проверить сгенерированный код. Чтобы узнать больше, смотрите Используя Инициированные Подсистемы для генерации HDL-кода.

Для других настроек при конфигурировании блока Triggered Subsystem для генерации HDL-кода смотрите генерацию HDL-кода (Simulink) на странице Triggered Subsystem.

Enabled Subsystem является подсистемой, которая получает управляющий сигнал через блок Enable. Enabled Subsystem выполняется в каждом шаге симуляции, где управляющий сигнал имеет положительное значение. Когда вы генерируете HDL-код для Enabled Subsystem:

  • Не используйте блок Enabled Subsystem в качестве DUT. Поместите Enabled Subsystem в другом блоке Subsystem и используйте тот Subsystem в качестве DUT.

  • Убедитесь, что начальным условием Enabled Subsystem является нуль.

  • Можно добавить единичные задержки в выходные сигналы Enabled Subsystem. Единичные задержки препятствуют тому, чтобы генератор кода вставил дополнительные обходные регистры в HDL-код.

  • Можно добавить блок State Control в Synchronous режим в Enabled Subsystem. Блок State Control преобразует блок Enabled Subsystem в блок Enabled Synchronous Subsystem. Этот блок генерирует более эффективный и благоприятный для оборудования HDL-код. Чтобы узнать больше, смотрите Синхронное Поведение Подсистемы с Блоком Госконтроля.

Для других настроек при конфигурировании блока Enabled Subsystem для генерации HDL-кода смотрите генерацию HDL-кода (Simulink) на странице Enabled Subsystem.

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

Функции

Параметры конфигурации Simulink

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте