Можно следовать этим рекомендациям, чтобы узнать, как использовать различные типы подсистем в проекте и моделировать алгоритм иерархически. Каждое руководство имеет уровень серьезности, который указывает на уровень податливостей. Для получения дополнительной информации см. HDL-руководства по моделированию уровней серьезности.
2.4.1
Очень рекомендуем
Виртуальная подсистема является Subsystem, которая не является условно выполненным Subsystem или Atomic Subsystem. По умолчанию обычный Subsystem блок, который вы добавляете в Simulink® модель является виртуальной подсистемой. Невиртуальные типы подсистем включают Atomic Subsystem, модель-ссылку, Variant Subsystem и вариант модель. Узнать об этих типах подсистем можно в предыдущих разделах.
Чтобы определить, является ли подсистема виртуальной, можно использовать get_param
функция с параметром IsSubsystemVirtual
. Для примера:
get_param('sfir_fixed/symmetric_fir', 'IsSubsystemVirtual')
2.4.2
Рекомендуется
Можно задать DUT как Atomic Subsystem. Чтобы задать Subsystem как Atomic Subsystem, в Параметры блоков диалоговом окне этого Subsystem выберите Treat as atomic unit.
Используйте атомарные и виртуальные подсистемы, чтобы сгенерировать одну HDL- файла для идентичных образцов подсистем, которые вы используете на более низких уровнях иерархии. Дополнительные сведения см. в разделе Генерация переиспользуемого кода для подсистем.
Чтобы включить совместное использование ресурсов в модуль подсистемы, укажите все подсистемы, которые вы хотите использовать в качестве подсистем. Для получения дополнительной информации см. Общие факторы по совместному использованию подсистем.
Идентификатор руководства
2.4.3
Серьезность
Обязательный
Описание
Блок Variant Subsystem, Variant Model является шаблоном, предварительно сконфигурированным таким образом, чтобы содержать два блока Subsystem для использования в качестве вариантов Подсистемы Variant. Во время симуляции управление вариантом решает, какой из двух блоков Subsystem является активным. Поэтому можно использовать Подсистему вариантов для создания двух различных строений или поведения подсистемы, а затем задать активное строение во время симуляции.
Вы не можете использовать Подсистему Вариантов в качестве DUT. Чтобы сгенерировать код, поместите Подсистему Вариантов в Подсистему, которую вы хотите использовать в качестве DUT. Имя файла и образец сгенерированного кода уникальны для активного строения, выбранной во время генерации кода.
Вы не можете совместно использовать несколько блоков Подсистемы Вариантов с помощью оптимизации Подсистемы Вариантов.
Необходимо убедиться, что при проверке функциональности сгенерированного кода активный вариант, который вы использовали при симуляции модели, аналогичен активному варианту, который вы использовали для генерации HDL-кода.
Для получения примера откройте модель hdlcoder_variant_subsystem_design.slx
. Если вы открываете DUT Subsystem, вы видите блок Variant Subsystem, Divide
. Подсистема Вариантов имеет две различные подсистемы, Recip
и Op
. Если вы открываете диалоговое окно Параметров блоков для 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
Подсистема, которая активна во время генерации кода.
Идентификатор руководства
2.4.4
Серьезность
Рекомендуется
Описание
Моделирование большого проекта иерархически может увеличить время генерации кода. Если вы задаете генерацию отчетов, таких как отчет о трассируемости, время генерации кода может значительно увеличиться. Чтобы избежать таких проблем с эффективностью, рекомендуется разбить проект на меньшие разделы. Используйте блок Model, чтобы унифицировать модель, которая состоит из небольших разделов. Это также включает инкрементальную генерацию кода. Можно сгенерировать HDL-код для родительской модели или модели-ссылки. Чтобы увидеть сгенерированный HDL-код, в hdlsrc
папка, папка создается для родительской модели с отдельной подпапкой для модели-ссылки.
При генерации испытательного стенда HDL, если испытательный стенд состоит из блоков, которые работают с непрерывным шагом расчета, можно преобразовать DUT в ссылочную модель. Это преобразование позволяет DUT запускаться в фиксированном шаге дискретного шага расчета. Дополнительные сведения см. в разделе Преобразование подсистемы DUT в Модели-ссылке для тестов с непрерывными блоками.
Для получения примера откройте модель hdlcoder_divide_parentmodel.slx
. Когда вы дважды кликаете DUT Subsystem, вы видите блок 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-кода».
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-кода» на странице 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-кода» на странице Enabled Subsystem.