Начало работы с генератором TLM

В этом примере показано, как сконфигурировать модель Simulink ®, чтобы сгенерировать компонент SystemC™/TLM с помощью цели tlmgenerator для Simulink Coder™ или Embedded Coder™.

В данном примере мы используем модель Simulink конечной импульсной характеристики в качестве базиса генерации SystemC/TLM.

Требования для запуска этого примера:

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

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

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

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

Чтобы открыть модель конечной импульсной характеристики, нажмите кнопку «Открыть модель».

2. Установите целевой объект Simulink Coder в TLM Generator

A. Откройте диалоговое окно Параметров конфигурации, выбрав Симуляцию > Model Параметров конфигурации в окне модели.

б. В диалоговом окне Параметров конфигурации выберите вид Генерации кода на левой панели.

c. В разделе Системный целевой файл, нажмите Browse, чтобы выбрать цель генератора TLM. Можно выбрать tlmgenerator_grt.tlc для использования Simulink Coder или tlmgenerator_ert.tlc для использования Embedded Coder для генерации HDL-кода. В данном примере выберите tlmgenerator_grt.tlc.

3. Откройте представление генератора TLM

В диалоговом окне Параметров конфигурации выберите вид генератора TLM на левой панели.

Представление генератора TLM имеет пять вкладок:

  • TLM- Отображения

  • Обработка TLM

  • Тайминг TLM

  • TLM Testbench

  • Компиляция TLM

Вам нужно будет задать различные опции генератора на каждой панели.

4. Выберите опции отображения TLM

На вкладке TLM Mapping, Socket Mapping позволяет вам выбрать количество сокетов для входных данных, выходных данных и управления. Выберите опцию Три отдельных разъема TLM для входных данных, выходных данных и управления.

Опции TLM Socket позволяют вам задать три различные карты памяти для вашего сгенерированного компонента TLM.

В данном примере выберите для сокетов входных и выходных данных следующее:

  • Автоматическая карта памяти для сокетов входных и выходных данных

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

Другие опции карты памяти, которые вы можете принять:

  • Нет карты памяти: Эта опция генерирует компонент TLM с только одним регистром чтения и одной записи без какого-либо адреса. Входы модели Simulink привязаны к регистру записи, а выходы - к регистру чтения.

  • [Автоматически сгенерированная карта памяти с] Single input and output address offsets: Эта опция генерирует компонент TLM только с одним регистром чтения и одной записи с одним адресом каждый. Входы модели Simulink привязаны к регистру записи, а выходы - к регистру чтения.

Когда вы генерируете компонент с картой памяти, можно добавить команду и регистр состояния, тестовый и установленный регистр и настраиваемый параметр регистры.

В данном примере выберите для сокета Control TLM:

  • Включите команду и регистр состояния в карту памяти. Регистр команд и состояний позволяет вам записать команду и считать состояние во время симуляции SystemC; для примера, ручной буферизации или состояния буфера.

  • Включите настраиваемый параметр регистры в карту памяти. Настраиваемые параметры регистры позволяют вам читать или записывать настраиваемый параметр значения.

Хотя в этом примере не используется, регистр теста и набора может использоваться как мьютекс, когда несколько инициаторов получают доступ к компоненту во время симуляции SystemC.

5. Выберите опции обработки TLM

На панели Генерация TLM выберите вкладку Обработка TLM. Опции Обработка алгоритмов и Обработка Интерфейсов позволяют вам задать различные поведения буферизации и обработки для вашего сгенерированного компонента TLM.

Опции выполнения алгоритма:

  • SystemC Thread: Алгоритм шаговой функции выполняется в собственном независимом потоке SystemC.

  • Функция обратного вызова: Алгоритм шаговой функции выполняется в функции обратного вызова из интерфейса.

  • Периодический поток SystemC: Алгоритм шаговой функции выполняется в собственное время периодический независимый поток SystemC.

Тайминг шаговой функции определяется значением в поле Algorithm step function timing (ns). Тайминг алгоритма подсчитывается как ожидание () в потоке.

В данном примере выберите SystemC Thread и введите 100 в поле для синхронизации функции шага алгоритма.

Опции обработки интерфейсов:

  • Создайте порт запроса прерывания на сгенерированном компоненте TLM: Эта опция создает порт прерывания (сигнал типа, bool >), который запускается каждый раз, когда набор входов обрабатывается.

В данном примере выберите или введите следующие варианты:

  • Выберите Создать порт запроса прерывания на сгенерированном компоненте TLM.

6. Выберите опции TLM Timing

Выберите вкладку TLM Timing. Раздел Interface Timing позволяет вам задать синхронизацию входного/выходного интерфейса компонента и потока обработки.

В данном примере входа и выхода подсчитываются как задержки ожидания () в интерфейсе. Установите значение времени 5ns для каждой из транзакций тайминга интерфейса входных данных, тайминга интерфейса выходных данных и тайминга интерфейса управления.

7. Выберите TLM Testbench View

Выберите вкладку TLM Testbench. Цель генератора TLM может сгенерировать автономный испытательный стенд SystemC/TLM вместе с компонентом TLM, чтобы проверить сгенерированный алгоритм в контексте пары инициатор/цель TLM. Представление TLM Testbench предоставляет опции времени выполнения для того, когда код испытательного стенда генерируется и выполняется.

С помощью опций TLM Testbench можно:

  • Используется для просмотра подробных сообщений, передаваемых в командное окно во время выполнения SystemC/TLM, включая сообщения транзакций TLM и синхронизации.

  • Указать, что испытательный стенд должен выполнять с аннотациями временных параметров или без них.

  • Укажите, управляет ли инициатор движущимися входами входных и выходных наборов данных между регистрами и буферами или компонент выполняет перемещения автоматически.

В данном примере выберите Generate testbench, With timing for Run-time mode и Automatic для обоих режимов запуска входного буфера и Output buffer trigging mode.

После успешной генерации кода для компонента и испытательного стенда кнопка «Проверить компонент TLM» становится включенной. Проверьте, что компонент TLM выполняет следующее:

  • Создает сгенерированный код с помощью make и make-файлов.

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

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

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

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

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

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

Компиляция сгенерированных файлов предполагает наличие make и совместимого GNU-компилятора, gcc, в пути к Linux ® или компилятору Visual Studio ® в пути к Windows ®.

8. Выберите представление компиляции TLM

Выберите вкладку TLM Compilation. Эта панель содержит опции для управления генерацией make-файлов, используемых для компиляции сгенерированного кода.

Опции компилятора:

Путь к библиотеке SystemC и TLM опций позволяют вам указать, где make-файлы могут найти установки SystemC и TLM. Значения по умолчанию позволяют вам использовать переменные окружения, так что обновления установок SystemC или TLM не требуют обновления моделей Simulink. Можно настроить окружение перед вызовом MATLAB или использовать команду MATLAB setenv.

В данном примере это значения переменных окружения, которые были протестированы стандартными установками OSCI, расположенными в/tools:

  • SYSTEMC_INC_PATH=/tools/systemc-2.3.0/include

  • SYSTEMC_LIB_PATH=/tools/systemc-2.3.0/lib-linux64

  • SYSTEMC_LIB_NAME=libsystemc.a (Linux) или systemc.lib (Windows)

  • TLM_INC_PATH=/tools/systemc-2.3.0/include

Набор инструментальных средств:

В Windows эта опция позволяет вам выбрать набор инструментов компилятора, если на одной машине установлено несколько версий Microsoft Visual Studio. В Linux эта опция исправлена на gcc.

Наименование компонента:

Эта опция позволяет добавить собственный тег к имени сгенерированного компонента. Имя сгенерированного компонента создается в соответствии со следующими случаями:

  • Если задан тег пользователя: modelname_usertag_tlm

  • Если поле тега пользователя пустое: modelname_tlm

В данном примере введите intro для тега пользователя.

9. Выбор отчета

Выберите Отчет на левой панели. В данном примере выберите Создать отчет генерации кода и Открыть отчет автоматически. Эти опции генерируют html-отчет во время генерации компонента. Отчет генерации кода содержит подробную информацию о содержимом каждого сгенерированного файла.

10. Сохранение опций генератора TLM

Нажмите кнопку ОК, чтобы применить эти настройки и выйти из диалогового окна Параметры конфигурации.

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

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

Также можно выполнить следующую команду в командном окне MATLAB:

> > slbuild ('tlmgdemo _ intro/DualFilter');

Во время выполнения вам будет предложено выбрать настраиваемые параметры. Выпадающий список каждого коэффициента позволяет вам выбрать класс памяти переменной. Опции класса памяти:

  • Inlined - inlined параметры не настраиваются.

  • SimulinkGlobal - Переменные SimulinkGlobal настраиваются.

ExportedGlobal, ImportedExtern и ImportedExternPointer не поддерживаются моделью генерации TLM.

Для этого примера выбрана опция Simulink Global. Нажмите Build. Генерация TLM завершается, когда в командном окне 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.197s

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

Откройте сгенерированные файлы в веб-браузере MATLAB, нажав на ссылки в сгенерированном отчете или в редакторе MATLAB (сгенерированные файлы и отчет находятся в вашей текущей рабочей директории):

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

A. Откройте диалоговое окно Model Параметры Конфигурации путем выбора симуляция > Параметры Конфигурации в окне модели.

б. В диалоговом окне Параметров конфигурации выберите TLM Generator view, а затем перейдите на вкладку TLM Testbench.

c. На панели TLM Testbench нажмите «Проверить компонент», чтобы запустить сгенерированный testbench.

Также можно выполнить следующую команду в командном окне MATLAB:

  verifyTlmgDemoModel('intro')

Этот шаг проверки выполняет следующие действия:

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

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

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

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

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

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

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

14. Просмотр журнала выполнения

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

### Comparing expected vs. actual results.
Data successfully compared for signal tlmg_out1.
Data successfully compared for signal tlmg_out2.
### Component verification completed

На этом пример начала работы с генератором TLM.