exponenta event banner

Несвоевременное моделирование SystemC/TLM

В этом примере показано использование режима синхронизации «Untimed» при создании компонента SystemC™/TLM из модели Simulink ® с использованием tlmgenerator target для Simulink ® Coder™ или Embedded Coder ®.

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

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

В этом примере используется модель Simulink фильтра FIR в качестве основы для генерации SystemC/TLM.

Продукты, необходимые для запуска этой демонстрации:

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

  • Для проверки кода сделайте и совместимый GNU-компилятор, gcc, в вашем пути в Linux ® или компилятор Visual Studio ® в вашем пути в Windows ®

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

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

Чтобы открыть модель TLM untimed testbench, нажмите кнопку Open Model.

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

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

На панели инструментов Simulink выберите «Параметры модели» на вкладке «Моделирование». В диалоговом окне Configuration Parameters выберите вид TLM Generator и вкладку TLM Testbench и просмотрите настройки testbench, как показано на следующем рисунке. Установите флажок подробного сообщения testbench для просмотра полного журнала взаимодействия инициатора/цели в моделировании SystemC/TLM. Поскольку это будет тысячи строк, при необходимости отмените выбор опции для получения terse log моделирования SystemC/TLM.

3. Построение модели

В окне модели щелкните правой кнопкой мыши по блоку DireFilter и выберите «C/C + + Code > Generate Code for this Subsystem» в контекстном меню, чтобы запустить создание TLM-компонента и testbench. Также в окне команд 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 16.515s

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

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

5. Просмотр созданного кода

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

Кроме того, как указывает код, testbench должен установить локальный вспомогательный объект с правильным режимом синхронизации, чтобы гарантировать, что его потоки инициатора используют правильную синхронизацию в вызовах транзакций 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

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

  • создать окно «Рисунок» для любых сигналов, для которых неверно сравниваются данные