Несвоевременная симуляция системы C/TLM

В этом примере подчеркивается использование временного режима 'Timed', когда вы генерируете компонент 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 ® или компилятору Visual Studio ® в пути к Windows ®

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

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

Чтобы открыть модель TLM несвоевременного тестирования, нажмите кнопку «Открыть модель».

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

2. Проверьте опции целевого строения генератора TLM

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

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

В окне модели щелкните правой кнопкой мыши по блоку DualFilter и выберите C/C + + код > Generate Code для этой Подсистемы в контекстном меню, чтобы запустить генерацию TLM-компонента и testbench. Также можно выполнить следующую команду в командном окне 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

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

Откройте сгенерированный исходный код testbench в веб-браузере MATLAB, нажав на DualFilter _ lttb _ tlm _ tb.cpp в сгенерированном отчете или в редакторе MATLAB:

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

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

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

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

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

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

  >> verifyTlmgDemoModel('lttb')

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

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

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

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

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

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

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

  • сгенерировать окно рисунка для любых сигналов, которые имели данные mis-compares

Для просмотра документации необходимо авторизоваться на сайте