Несинхронизированная Симуляция SystemC/TLM

Этот пример подсвечивает использование 'Несинхронизированного' режима синхронизации, когда вы генерируете компонент SystemC™/TLM из модели Simulink® использование цели tlmgenerator или для Simulink® Coder™ или для Embedded Coder®.

В моделях Simulink® перемещением данных между источниками и приемниками управляют частоты дискретизации сигнала и централизованный решатель синхронизации. В моделях SystemC/TLM взаимодействиями между приемниками данных и источниками управляют ядро симуляции SystemC и усовершенствования времени через SC_THREADs, совместно дающий к управлению другому потоку через wait вызовы.

Для несинхронизированных симуляций SystemC/TLM модель игнорирует аннотируемые задержки коммуникационных интерфейсов и обработки. В таких моделях цель только, чтобы иметь симуляцию, которая приводит к правильным результатам путем гарантирования, что инициаторы и цели могут успешно синхронизировать перемещение данных. Нет никакой попытки оценить эффективность развернутой системы. Никакое время симуляции не должно протекать, в то время как в несинхронизированной симуляции, потому что синхронизация является полностью базирующимся событием.

Для этого примера мы используем модель Simulink КИХ-фильтра как базис генерации SystemC/TLM.

Продукты, требуемые запускать эту демонстрацию:

  • SystemC 2.3.1 (включает библиотеку TLM),

  • Для верификации кода сделайте и совместимый компилятор GNU, gcc, в вашем пути на Linux® или Визуальном компиляторе Studio® в вашем пути на Windows®

Примечание: пример включает процедуру сборки генерации кода. Simulink не разрешает вам создавать программы в области установки MATLAB. При необходимости превратитесь в рабочую директорию, которая не находится в области установки MATLAB до запуска никакой сборки.

1. Откройте предварительно сконфигурированную модель

Чтобы открыть несинхронизированную модель испытательного стенда TLM, нажмите кнопку Open Model.

Следующая модель открывается в Simulink.

2. Рассмотрите целевые параметры конфигурации генератора TLM

В Панели инструментов Simulink выберите Model Settings из вкладки Modeling. В диалоговом окне Configuration Parameters выберите представление TLM Generator и вкладку TLM Testbench и рассмотрите настройки испытательного стенда как показано в следующем изображении. Установите многословный флажок сообщения испытательного стенда, чтобы видеть полный журнал взаимодействия инициатора/цели в симуляции SystemC/TLM. Поскольку это будет тысячами линий, при желании отменяют выбор опции, чтобы получить краткий журнал симуляции SystemC/TLM.

3. Создайте модель

В окне модели щелкните правой кнопкой по блоку DualFilter и выберите C/C ++ Code> Generate Code для этой Подсистемы в контекстном меню, чтобы запустить компонент TLM и генерацию испытательного стенда. Или можно выполнить следующую команду в окне команды MATLAB:

  >> slbuild('tlmgdemo_uttb/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 19.054s

4. Откройте сгенерированные файлы

Откройте сгенерированный исходный код испытательного стенда в веб-браузере MATLAB путем нажатия на 'DualFilter_uttb_tlm_tb.cpp' в сгенерированном отчете или в редакторе MATLAB:

5. Рассмотрите сгенерированный код

Спецификация, 'Не синхронизируя' результаты в испытательном стенде, дающем компоненту TLM команду запускаться в несинхронизированном режиме посредством специального интерфейса конфигурирования, mw_backdoorcfg_IF. Как код указывает, выбор синхронизации режима является динамическим и может быть изменен в ходе симуляции. Поскольку этим выбором является просто построение симуляции, он не запрограммирован посредством "парадной двери" транзакция TLM.

Кроме того, как код указывает, испытательный стенд должен установить локальный объект помощника с правильным режимом синхронизации для того, чтобы гарантировать, что его инициатор распараллеливает, используют соответствующую синхронизацию в вызовах транзакции TLM.

Реализация несинхронизированного класса синхронизации, mw_syncuntimed_tb, в mw_support_tb.cpp файл показывает детали различных вызовов синхронизации, используемых потоками инициатора и транзакциями TLM. Как ранее утверждено, вызовы используют, ожидает SC_ZERO_TIME, и никаким задержкам не позволяют накопиться.

6. Проверьте сгенерированный код

В Configuration Parameters диалоговое окно, войдите в TLM Testbench диалоговое окно параметра конфигурации и нажатие Verify TLM Component кнопка, чтобы запустить сгенерированный испытательный стенд в несинхронизированном режиме синхронизации или в окне команды MATLAB выполняется:

  >> verifyTlmgDemoModel('uttb')

Это действие будет:

  • создайте сгенерированный код

  • запустите Simulink, чтобы получить входной стимул и ожидаемые результаты

  • преобразуйте данные Simulink в векторы TLM

  • запустите автономный исполняемый файл испытательного стенда SystemC/TLM

  • преобразуйте результаты TLM назад в данные Simulink

  • выполните сравнение данных

  • сгенерируйте Окно рисунка для любых сигналов, которые имели данные, неправильный выдерживает сравнение