Можно следовать этим инструкциям, чтобы изучить, как использовать различные типы подсистем в проекте и смоделировать алгоритм иерархически. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований соответствия. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.
2.4.1
Строго рекомендуемый
Виртуальной подсистемой является Подсистема, которая не является условно выполняемой Подсистемой или Атомарной подсистемой. По умолчанию регулярный блок Subsystem, который вы добавляете в свою модель Simulink®, является виртуальной подсистемой.
Если вы используете DUT неверхнего уровня в качестве виртуальной подсистемы, преобразование в модель - ссылку может изменить семантику подсистемы, потому что последовательность выполнения модели, на которую ссылаются, эквивалентна Атомарной подсистеме. Чтобы сохранить семантику подсистемы, задайте DUT как невиртуальную подсистему перед генерацией HDL-кода и верификацией. Невиртуальные типы подсистемы включают Атомарную подсистему, модель - ссылку, Различную Подсистему и различную модель. Можно узнать об этих типах подсистемы в предыдущих разделах.
Чтобы определить, является ли подсистема виртуальной, можно использовать функцию get_param
с параметром IsSubsystemVirtual
. Например:
get_param('sfir_fixed/symmetric_fir', 'IsSubsystemVirtual')
2.4.2
Рекомендуемый
Можно задать DUT как Атомарную подсистему. Чтобы задать Подсистему как Атомарную подсистему, в диалоговом окне Block Parameters той Подсистемы, выбирают 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
Обязательный
Инициированная Подсистема является подсистемой, которая получает управляющий сигнал через блок Trigger. Инициированная Подсистема выполняется для одного цикла каждый раз, когда триггерное событие имеет место. Когда вы генерируете HDL-код для инициированной подсистемы:
Не используйте Инициированный блок Subsystem в качестве DUT. Поместите Инициированную Подсистему в другом блоке Subsystem и используйте ту Подсистему в качестве DUT.
Убедитесь, что начальное условие Инициированной Подсистемы должно быть нулем.
Можно добавить единичные задержки в выходные сигналы Инициированной Подсистемы. Единичные задержки препятствуют тому, чтобы генератор кода вставил дополнительные обходные регистры в HDL-код.
Убедитесь, что установка Use trigger signal as clock не приводит к синхронизации несоответствий, когда вы моделируете испытательный стенд, чтобы проверить сгенерированный код. Чтобы узнать больше, смотрите Триггер Использования Как Часы в Инициированных Подсистемах.
Для других настроек при конфигурировании Инициированного блока Subsystem для генерации HDL-кода смотрите Инициированную Подсистему.
Enabled Подсистема является подсистемой, которая получает управляющий сигнал через блок Enable. Enabled Подсистема выполняется на каждом шаге симуляции, где управляющий сигнал имеет положительное значение. Когда вы генерируете HDL-код для Enabled Подсистемы:
Не используйте Enabled блок Subsystem в качестве DUT. Поместите Enabled Подсистему в другом блоке Subsystem и используйте ту Подсистему в качестве DUT.
Убедитесь, что начальное условие Enabled Подсистемы является нулем.
Можно добавить единичные задержки в выходные сигналы Enabled Подсистемы. Единичные задержки препятствуют тому, чтобы генератор кода вставил дополнительные обходные регистры в HDL-код.
Можно добавить блок State Control в режиме Synchronous
в Enabled Подсистеме. Блок State Control преобразовывает Enabled блок Subsystem в Enabled Синхронный блок Subsystem. Этот блок генерирует более эффективный и благоприятный для оборудования HDL-код. Чтобы узнать больше, смотрите Синхронное Поведение Подсистемы с Блоком Госконтроля.
Для других настроек при конфигурировании Enabled блока Subsystem для генерации HDL-кода смотрите Enabled Подсистему.