Этот пример подсвечивает использование 'Синхронизированного' режима синхронизации, когда вы генерируете компонент SystemC™/TLM из модели Simulink® использование цели tlmgenerator или для Simulink® Coder™ или для Embedded Coder®.
В моделях Simulink® перемещением данных между источниками и приемниками управляют частоты дискретизации сигнала и централизованный решатель синхронизации. В моделях SystemC/TLM взаимодействиями между приемниками данных и источниками управляют ядро симуляции SystemC и усовершенствования времени через SC_THREADs, совместно дающий к управлению другому потоку через wait
вызовы.
Для синхронизированных симуляций SystemC/TLM модель придерживается аннотируемых задержек коммуникационных интерфейсов и обработки. Для свободно синхронизированных симуляций модель не позволяет потокам "запускаться вперед" вовремя и таким образом, нет никакой идеи "местного времени", которое отличается, чем чувство времени некоторого другого потока. Вместо этого инициаторы сразу синхронизируются с возвращенными задержками от транзакций TLM и обычно выполняют ненулевой синхронизированный, ожидает для того, чтобы выполнить циклы опроса и синхронизацию по требованию. Время симуляции будет совершенствоваться в свободно синхронизированной модели, чтобы отразить коммуникацию, обработку и опрос задержек системы. Цель модели, в дополнение к соответствующей синхронизации перемещения данных как с несинхронизированной системой, состоит в том, чтобы иметь функционально правильную симуляцию с быстрые тактовые стенкой времена выполнения. Эта скорость допускает разработку программного обеспечения псевдореального времени на архитектурной модели SystemC/TLM.
Для этого примера мы используем модель Simulink КИХ-фильтра как базис генерации SystemC/TLM.
Продукты, требуемые запускать эту демонстрацию:
SystemC 2.3.1 (включает библиотеку TLM),
Для верификации кода сделайте и совместимый компилятор GNU, gcc, в вашем пути на Linux® или Визуальном компиляторе Studio® в вашем пути на Windows®
Примечание: пример включает процедуру сборки генерации кода. Simulink не разрешает вам создавать программы в области установки MATLAB. При необходимости превратитесь в рабочую директорию, которая не находится в области установки MATLAB до запуска никакой сборки.
Чтобы открыть TLM свободно синхронизированная модель испытательного стенда, нажмите кнопку Open Model.
Следующая модель открывается в Simulink.
В Панели инструментов Simulink выберите Model Settings из вкладки Modeling. В диалоговом окне Configuration Parameters выберите представление TLM Generator, и затем вкладка TLM Testbench просматривает и рассматривает настройки испытательного стенда как показано в следующем изображении. Установите многословный флажок сообщения испытательного стенда, чтобы видеть полный журнал взаимодействия инициатора/цели в симуляции SystemC/TLM. Поскольку это будет тысячами линий, при желании отменяют выбор опции, чтобы получить краткий журнал симуляции SystemC/TLM.
В окне модели щелкните правой кнопкой по блоку DualFilter и выберите C/C ++ Code> Generate Code для этой Подсистемы в контекстном меню, чтобы запустить компонент TLM и генерацию испытательного стенда. Или можно выполнить следующую команду в окне команды MATLAB:
>> slbuild('tlmgdemo_lttb/DualFilter')
Генерация завершается, когда следующее сообщение появляется в окне команды MATLAB:
### Starting Simulink Coder build procedure for model: DualFilter ### Successful completion of Simulink Coder build procedure for model: DualFilter Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================== DualFilter Code generated Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 7.1436s
Откройте сгенерированный исходный код испытательного стенда в веб-браузере MATLAB путем нажатия на 'DualFilter_lttb_tlm_tb.cpp' в сгенерированном отчете или в редакторе MATLAB:
Спецификация 'С синхронизацией' результатов в испытательном стенде, дающем компоненту TLM команду запускаться в синхронизированном режиме посредством специального интерфейса конфигурирования, mw_backdoorcfg_IF
. Как код указывает, выбор синхронизации режима является динамическим и может быть изменен в ходе симуляции. Поскольку этим выбором является просто построение симуляции, он не запрограммирован посредством "парадной двери" транзакция TLM.
Кроме того, как код указывает, испытательный стенд должен установить локальный объект помощника с правильным режимом синхронизации для того, чтобы гарантировать, что его инициатор распараллеливает, используют соответствующую синхронизацию в вызовах транзакции TLM.
Реализация свободно синхронизированного класса синхронизации, mw_syncfunctimed_tb
, в mw_support_tb.cpp
файл показывает детали различных вызовов синхронизации, используемых потоками инициатора и транзакциями TLM. В отличие от несинхронизированных симуляций, вызовы используют, ожидает ненулевых времен, но, как с несинхронизированными симуляциями, никаким задержкам "местного времени" не позволяют накопиться.
В Configuration Parameters
диалоговое окно, войдите в TLM Testbench
диалоговое окно параметра конфигурации и нажатие Verify TLM Component
кнопка, чтобы запустить сгенерированный испытательный стенд в свободно синхронизированном режиме синхронизации или в окне команды MATLAB выполняется:
>> verifyTlmgDemoModel('lttb')
Это действие будет:
создайте сгенерированный код
запустите Simulink, чтобы получить входной стимул и ожидаемые результаты
преобразуйте данные Simulink в векторы TLM
запустите автономный исполняемый файл испытательного стенда SystemC/TLM
преобразуйте результаты TLM назад в данные Simulink
выполните сравнение данных
сгенерируйте Окно рисунка для любых сигналов, которые имели данные, неправильный выдерживает сравнение