В этом примере подчеркивается использование режима синхронизации 'Untimed', когда вы генерируете компонент 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 ® или компилятору Visual Studio ® в пути к Windows ®
Примечание. Пример включает процедуру генерации кода. Simulink не позволяет вам создавать программы в области установки MATLAB. При необходимости перед началом сборки перейдите в рабочую директорию, которая отсутствует в области установки MATLAB.
Чтобы открыть модель TLM untimed testbench, нажмите кнопку Open Model.
Следующая модель откроется в Simulink.
На панели инструментов Simulink выберите Model Settings на вкладке Modeling. В диалоговом окне Параметров конфигурации выберите вид TLM Generator и вкладку TLM Testbench и проверьте настройки testbench как показано на следующем изображении. Установите флажок Подробное сообщение testbench, чтобы увидеть полный журнал взаимодействия инициатор/цель в симуляции SystemC/TLM. Поскольку это будут тысячи линий, при желании отмените выбор опции для получения терсового журнала симуляции SystemC/TLM.
В окне модели щелкните правой кнопкой мыши по блоку DualFilter и выберите C/C + + код > Generate Code для этой Подсистемы в контекстном меню, чтобы запустить генерацию 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
Откройте сгенерированный исходный код testbench в веб-браузере MATLAB, нажав на DualFilter _ uttb _ tlm _ tb.cpp в сгенерированном отчете или в редакторе MATLAB:
Спецификация 'Without timing' результатов в testbench, предписывая компоненту TLM запускаться в несвоевременном режиме с помощью специального строения интерфейса, mw_backdoorcfg_IF
. Как указывает код, выбор режима синхронизации является динамическим и может быть изменен в течение симуляции. Поскольку этот выбор является чисто симуляционной конструкцией, он не программируется с помощью транзакции TLM «передней двери».
Кроме того, как указывает код, testbench должен настройке локальный вспомогательный объект с правильным режимом синхронизации, порядка убедиться, что его инициаторы используют правильную синхронизацию в вызовах транзакций TLM.
Реализация несвоевременного класса синхронизации, mw_syncuntimed_tb
, в mw_support_tb.cpp
В файле показаны подробные сведения о различных вызовах синхронизации, используемых потоками инициатора и транзакциями TLM. Как указывалось выше, вызовы используют ожидания SC_ZERO_TIME, и никакие задержки не допускаются к накоплению.
В Configuration Parameters
диалоговое окно, входите TLM Testbench
диалоговое окно параметра конфигурации и нажмите кнопку Verify TLM Component
кнопка запуска сгенерированного теста в несвоевременном режиме синхронизации или в командном окне MATLAB выполните:
>> verifyTlmgDemoModel('uttb')
Это действие будет:
создайте сгенерированный код
запустите Simulink, чтобы захватить входной стимул и ожидаемые результаты
преобразовать данные Simulink в векторы TLM
запустите отдельный исполняемый файл SystemC/TLM testbench
преобразовать результаты TLM назад в данные Simulink
выполните сравнение данных
сгенерировать окно рисунка для любых сигналов, которые имели данные mis-compares