В этом примере показано использование временного режима «Timed» при создании компонента SystemC™/TLM из модели Simulink ® с использованием tlmgenerator target для Simulink ® Coder™ или Embedded Coder ®.
В моделях Simulink ® перемещение данных между источниками и приемниками контролируется частотой дискретизации сигнала и централизованным вычислителем времени. В моделях SystemC/TLM взаимодействие между приемниками данных и источниками контролируется ядром моделирования SystemC, и время продвигается через SC_THREADs, совместно уступая управление другому потоку черезwait вызовы.
Для синхронизированных моделирований SystemC/TLM модель придерживается аннотированных задержек для коммуникационных интерфейсов и обработки. Для симуляций в свободное время модель не позволяет потокам «бежать вперед» во времени, и поэтому нет представления о «локальном времени», которое отличается от ощущения времени какого-либо другого потока. Вместо этого инициаторы немедленно синхронизируются с возвращенными задержками из транзакций TLM и обычно выполняют ненулевые временные ожидания для выполнения циклов опроса и синхронизации по запросу. Время моделирования будет увеличено в модели с несвоевременным отображением задержек связи, обработки и опроса в системе. Цель модели, в дополнение к правильной синхронизации перемещения данных, как в случае несвоевременной системы, состоит в том, чтобы иметь функционально правильное моделирование с быстрым временем выполнения настенных часов. Эта скорость позволяет практически в реальном времени разрабатывать программное обеспечение на архитектурной модели SystemC/TLM.
В этом примере используется модель Simulink фильтра FIR в качестве основы для генерации SystemC/TLM.
Продукты, необходимые для запуска этой демонстрации:
SystemC 2.3.1 (включает библиотеку TLM)
Для проверки кода сделайте и совместимый GNU-компилятор, gcc, в вашем пути в Linux ® или компилятор Visual Studio ® в вашем пути в Windows ®
Примечание.Пример включает процедуру создания кода. Simulink не позволяет создавать программы в области установки MATLAB. При необходимости перед запуском сборки перейдите в рабочую папку, которая отсутствует в области установки MATLAB.
Чтобы открыть модель TLM в свободное время, нажмите кнопку Open Model (Открыть модель).
Следующая модель откроется в Simulink.

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

В окне модели щелкните правой кнопкой мыши по блоку DireFilter и выберите «C/C + + Code > Generate Code for this Subsystem» в контекстном меню, чтобы запустить создание 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
Откройте сгенерированный исходный код testbench в веб-браузере MATLAB, щелкнув «DityFilter _ lttb _ tlm _ tb.cpp» в созданном отчете или в редакторе MATLAB:
Спецификация «With timing» приводит к тому, что testbench предписывает компоненту TLM работать в синхронизированном режиме с помощью специального конфигурационного интерфейса, mw_backdoorcfg_IF. Как показывает код, выбор режима синхронизации является динамическим и может быть изменен в ходе моделирования. Поскольку этот выбор является чисто имитационной конструкцией, он не программируется посредством транзакции TLM «входная дверь».
Кроме того, как указывает код, testbench должен установить локальный вспомогательный объект с правильным режимом синхронизации, чтобы гарантировать, что его потоки инициатора используют правильную синхронизацию в вызовах транзакций 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
выполнить сравнение данных
создать окно «Рисунок» для любых сигналов, для которых неверно сравниваются данные