Можно следовать этим инструкциям, чтобы изучить, как использовать различные типы подсистем в проекте и смоделировать алгоритм иерархически. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований податливости. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.
2.4.1
Строго рекомендуемый
Виртуальной подсистемой является Subsystem, который не является условно выполняемым Subsystem или Atomic Subsystem. По умолчанию регулярный блок Subsystem, который вы добавляете в свою модель Simulink®, является виртуальной подсистемой.
Если вы используете DUT неверхнего уровня в качестве виртуальной подсистемы, преобразование в модель - ссылку может изменить семантику подсистемы, потому что последовательность выполнения модели, на которую ссылаются, эквивалентна Atomic Subsystem. Чтобы сохранить семантику подсистемы, задайте DUT как невиртуальную подсистему перед генерацией HDL-кода и верификацией. Невиртуальные типы подсистемы включают Атомарную подсистему, модель - ссылку, Различную Подсистему и различную модель. Можно узнать об этих типах подсистемы в предыдущих разделах.
Чтобы определить, является ли подсистема виртуальной, можно использовать get_param
функция параметром IsSubsystemVirtual
. Например:
get_param('sfir_fixed/symmetric_fir', 'IsSubsystemVirtual')
2.4.2
Рекомендуемый
Можно задать DUT как Atomic Subsystem. Чтобы задать Subsystem как Atomic Subsystem, в диалоговом окне Block Parameters что Subsystem, выбирают Treat as atomic unit. Используйте атомарные подсистемы, чтобы сгенерировать один файл HDL для идентичных экземпляров подсистем, которые вы используете на более низких уровнях иерархии. Чтобы узнать больше, смотрите, Генерируют Повторно используемый код для Атомарных подсистем.
Чтобы включить разделение ресурсов на модуле подсистемы, задайте все подсистемы, которые вы хотите совместно использовать как атомарные подсистемы. Чтобы узнать больше, смотрите Общие Факторы для Совместного использования Подсистем.
ID инструкции
2.4.3
Серьезность
Обязательный
Описание
Различный блок Subsystem является шаблоном, предварительно сконфигурированным, чтобы содержать два блока 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-кода.
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.