В этом примере показано, как сконфигурировать модель 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.
Чтобы открыть модель конечной импульсной характеристики, нажмите кнопку «Открыть модель».
A. Откройте диалоговое окно Параметров конфигурации, выбрав Симуляцию > Model Параметров конфигурации в окне модели.
б. В диалоговом окне Параметров конфигурации выберите вид Генерации кода на левой панели.
c. В разделе Системный целевой файл, нажмите Browse, чтобы выбрать цель генератора TLM. Можно выбрать tlmgenerator_grt.tlc для использования Simulink Coder или tlmgenerator_ert.tlc для использования Embedded Coder для генерации HDL-кода. В данном примере выберите tlmgenerator_grt.tlc.
В диалоговом окне Параметров конфигурации выберите вид генератора TLM на левой панели.
Представление генератора TLM имеет пять вкладок:
TLM- Отображения
Обработка TLM
Тайминг TLM
TLM Testbench
Компиляция TLM
Вам нужно будет задать различные опции генератора на каждой панели.
На вкладке TLM Mapping, Socket Mapping позволяет вам выбрать количество сокетов для входных данных, выходных данных и управления. Выберите опцию Три отдельных разъема TLM для входных данных, выходных данных и управления.
Опции TLM Socket позволяют вам задать три различные карты памяти для вашего сгенерированного компонента TLM.
В данном примере выберите для сокетов входных и выходных данных следующее:
Автоматическая карта памяти для сокетов входных и выходных данных
Индивидуальные смещения входного и выходного адресов для каждого сокета данных. Эта опция генерирует компонент с одним регистром чтения на выход модели и одним регистром записи на вход модели с отдельными адресами. Каждый вход модели Simulink привязан к его соответствующему регистру записи, и каждый выход связан с его соответствующим регистром чтения.
Другие опции карты памяти, которые вы можете принять:
Нет карты памяти: Эта опция генерирует компонент TLM с только одним регистром чтения и одной записи без какого-либо адреса. Входы модели Simulink привязаны к регистру записи, а выходы - к регистру чтения.
[Автоматически сгенерированная карта памяти с] Single input and output address offsets: Эта опция генерирует компонент TLM только с одним регистром чтения и одной записи с одним адресом каждый. Входы модели Simulink привязаны к регистру записи, а выходы - к регистру чтения.
Когда вы генерируете компонент с картой памяти, можно добавить команду и регистр состояния, тестовый и установленный регистр и настраиваемый параметр регистры.
В данном примере выберите для сокета Control TLM:
Включите команду и регистр состояния в карту памяти. Регистр команд и состояний позволяет вам записать команду и считать состояние во время симуляции SystemC; для примера, ручной буферизации или состояния буфера.
Включите настраиваемый параметр регистры в карту памяти. Настраиваемые параметры регистры позволяют вам читать или записывать настраиваемый параметр значения.
Хотя в этом примере не используется, регистр теста и набора может использоваться как мьютекс, когда несколько инициаторов получают доступ к компоненту во время симуляции SystemC.
На панели Генерация TLM выберите вкладку Обработка TLM. Опции Обработка алгоритмов и Обработка Интерфейсов позволяют вам задать различные поведения буферизации и обработки для вашего сгенерированного компонента TLM.
Опции выполнения алгоритма:
SystemC Thread: Алгоритм шаговой функции выполняется в собственном независимом потоке SystemC.
Функция обратного вызова: Алгоритм шаговой функции выполняется в функции обратного вызова из интерфейса.
Периодический поток SystemC: Алгоритм шаговой функции выполняется в собственное время периодический независимый поток SystemC.
Тайминг шаговой функции определяется значением в поле Algorithm step function timing (ns). Тайминг алгоритма подсчитывается как ожидание () в потоке.
В данном примере выберите SystemC Thread и введите 100 в поле для синхронизации функции шага алгоритма.
Опции обработки интерфейсов:
Создайте порт запроса прерывания на сгенерированном компоненте TLM: Эта опция создает порт прерывания (сигнал типа, bool >), который запускается каждый раз, когда набор входов обрабатывается.
В данном примере выберите или введите следующие варианты:
Выберите Создать порт запроса прерывания на сгенерированном компоненте TLM.
Выберите вкладку TLM Timing. Раздел Interface Timing позволяет вам задать синхронизацию входного/выходного интерфейса компонента и потока обработки.
В данном примере входа и выхода подсчитываются как задержки ожидания () в интерфейсе. Установите значение времени 5ns для каждой из транзакций тайминга интерфейса входных данных, тайминга интерфейса выходных данных и тайминга интерфейса управления.
Выберите вкладку 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 ®.
Выберите вкладку 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 для тега пользователя.
Выберите Отчет на левой панели. В данном примере выберите Создать отчет генерации кода и Открыть отчет автоматически. Эти опции генерируют html-отчет во время генерации компонента. Отчет генерации кода содержит подробную информацию о содержимом каждого сгенерированного файла.
Нажмите кнопку ОК, чтобы применить эти настройки и выйти из диалогового окна Параметры конфигурации.
В окне модели щелкните правой кнопкой мыши по блоку 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
Откройте сгенерированные файлы в веб-браузере MATLAB, нажав на ссылки в сгенерированном отчете или в редакторе MATLAB (сгенерированные файлы и отчет находятся в вашей текущей рабочей директории):
DualFilter_VP/DualFilter_intro_tlm_doc/html/DualFilter_codegen_rpt.html
DualFilter_VP/DualFilter_intro_tlm/include/DualFilter_intro_tlm_def.h
DualFilter_VP/DualFilter_intro_tlm/include/DualFilter_intro_tlm.h
DualFilter_VP/DualFilter_intro_tlm/src/DualFilter_intro_tlm.cpp
DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb.h
DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb.cpp
DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb_main.cpp
A. Откройте диалоговое окно Model Параметры Конфигурации путем выбора симуляция > Параметры Конфигурации в окне модели.
б. В диалоговом окне Параметров конфигурации выберите TLM Generator view, а затем перейдите на вкладку TLM Testbench.
c. На панели TLM Testbench нажмите «Проверить компонент», чтобы запустить сгенерированный testbench.
Также можно выполнить следующую команду в командном окне MATLAB:
verifyTlmgDemoModel('intro')
Этот шаг проверки выполняет следующие действия:
Создает сгенерированный код.
Запускает Simulink, чтобы захватить входной стимул и ожидаемые результаты.
Преобразует данные Simulink в векторы TLM.
Запускает отдельный исполняемый файл SystemC/TLM испытательного стенда.
Преобразует результаты TLM обратно в данные Simulink.
Выполняет сравнение данных.
Генерирует окно рисунка для всех сигналов, которые имели данные mis-compares.
Опция для генерации испытательного стенда позволяет вам увидеть, как потоки инициатора испытательного стенда взаимодействуют и синхронизируются с целевым объектом. Найдите результат сравнения в конце журнала и проверьте, что сравнение данных успешно.
### Comparing expected vs. actual results. Data successfully compared for signal tlmg_out1. Data successfully compared for signal tlmg_out2. ### Component verification completed
На этом пример начала работы с генератором TLM.