В этом примере показано, как сконфигурировать модель Simulink®, чтобы сгенерировать компонент SystemC™/TLM с помощью цели tlmgenerator или в Simulink Coder или в Embedded Coder™.
В данном примере мы используем модель Simulink КИХ-фильтра как основание генерации SystemC/TLM.
Требования, чтобы запустить этот пример:
MATLAB
Simulink
Simulink Coder
HDL Verifier
SystemC 2.3.1 (включает библиотеку TLM),
Для верификации кода сделайте и совместимый компилятор GNU, gcc, в вашем пути на Linux® или Визуальном компиляторе Studio® в вашем пути на Windows®
Примечание: пример включает процедуру сборки генерации кода. Simulink не разрешает вам создавать программы в области установки MATLAB. При необходимости превратитесь в рабочую директорию, которая не находится в области установки MATLAB до запуска никакой сборки.
Откройте модель FIR Filter или, в окне команды MATLAB, выполните следующее:
>> openTlmgDemoModel('intro');
Следующая модель открывается в Simulink.
a. Откройте диалоговое окно Configuration Parameters путем выбора Simulation> Model Configuration Parameters в окне модели.
b. В диалоговом окне Configuration Parameters выберите представление Code Generation в левой панели.
c. Под Системным конечным файлом нажмите Browse, чтобы выбрать цель генератора TLM. Можно выбрать tlmgenerator_grt.tlc, чтобы использовать Simulink Coder или tlmgenerator_ert.tlc, чтобы использовать Embedded Coder в генерации HDL-кода. В данном примере выберите tlmgenerator_grt.tlc.
В диалоговом окне Configuration Parameters выберите представление TLM Generator в левой панели.
Представление TLM Generator имеет пять вкладок:
Отображение TLM
Обработка TLM
Синхронизация TLM
Испытательный стенд TLM
Компиляция TLM
Необходимо будет установить различные опции генератора в каждой панели.
Во вкладке TLM Mapping Отображение Сокета позволяет вам выбирать количество сокетов для входных данных, выходных данных и управления. Выберите опцию, Три отдельных сокета TLM для входных данных, выходных данных и управления.
Опции Сокета TLM позволяют вам задавать три различных карты распределения памяти для своего сгенерированного компонента TLM.
В данном примере выберите следующее для сокетов входных и выходных данных:
Автоматически сгенерированная карта распределения памяти для сокетов входных и выходных данных
Отдельный адрес ввода и вывода возмещает для каждого сокета данных. Эта опция генерирует компонент TLM с одним регистром чтения на выход модели и одним регистром записи на вход модели с отдельными адресами. Каждый вход модели Simulink связан со своим соответствующим регистром записи, и каждый выход связан со своим соответствующим регистром чтения.
Другие возможности карты распределения памяти, которые можно рассмотреть:
Никакая карта распределения памяти: Эта опция генерирует компонент TLM только с одним чтением и одним регистром записи без любого адреса. Входные параметры модели Simulink связаны с регистром записи, и выходные параметры связаны с регистром чтения.
[Автоматически сгенерированная карта распределения памяти с] Одно смещения адреса ввода и вывода: Эта опция генерирует компонент TLM только с одним чтением и один регистр записи с одним адресом каждый. Входные параметры модели Simulink связаны с регистром записи, и выходные параметры связаны с регистром чтения.
Когда вы генерируете компонент с картой распределения памяти, можно добавить команду и регистр состояния, тест и установить регистр и регистры настраиваемого параметра.
В данном примере выберите следующее для Управления Сокет TLM:
Включайте команду и регистр состояния в карте распределения памяти. Команда и регистр состояния позволяют вам писать команду и читать состояние во время симуляции SystemC; например, буферизация руководства или буферное состояние.
Включайте регистры настраиваемого параметра в карту распределения памяти. Регистры настраиваемого параметра позволяют вам читать или писать значения настраиваемого параметра.
Несмотря на то, что не используемый в этом примере, тест и регистр набора могут использоваться в качестве взаимного исключения, когда несколько инициаторов получают доступ к компоненту во время симуляции SystemC.
В панели Генерации TLM выберите вкладку TLM Processing. Обработка Алгоритма и опции обработки Интерфейса позволяют вам задавать различную буферизацию и обработку поведений для вашего сгенерированного компонента TLM.
Опции осуществления алгоритма:
Поток SystemC: алгоритм ступенчатой функции выполняется в его собственном независимом потоке SystemC.
Функция обратного вызова: алгоритм ступенчатой функции выполняется в функции обратного вызова, названной от интерфейса.
Периодический Поток SystemC: алгоритм ступенчатой функции выполняется в его собственное время периодический независимый поток SystemC.
Синхронизация ступенчатой функции определяется значением в ступенчатой функции Алгоритма, синхронизирующей (нс) поле. Синхронизация алгоритма считается с ожиданием () в потоке.
В данном примере выберите SystemC Thread и войдите 100 в поле для синхронизации ступенчатой функции Алгоритма.
Опции обработки интерфейса:
Создайте порт запроса на прерывание на сгенерированном компоненте TLM: Эта опция создает порт прерывания (введите сигнал, bool>), который инициирован каждый раз, когда набор входа был обработан.
В данном примере выберите или введите следующий выбор:
Выберите Create порт запроса на прерывание на сгенерированном компоненте TLM.
Выберите вкладку TLM Timing. Раздел Interface Timing позволяет вам задавать синхронизацию интерфейса ввода-вывода компонента и обработку потока.
В данном примере задержки ввода и вывода считаются с ожиданием () в интерфейсе. Установите временную стоимость 5 нс для каждой из транзакций Синхронизации Интерфейса Входных данных, Синхронизации Взаимодействия через интерфейс Выходных данных и Синхронизации Интерфейса Управления.
Выберите вкладку TLM Testbench. Цель Генератора TLM может сгенерировать автономный испытательный стенд SystemC/TLM вместе с компонентом TLM, чтобы проверить сгенерированный алгоритм в контексте пары инициатора/цели TLM. Представление TLM Testbench предоставляет возможности во время выполнения для того, когда код испытательного стенда сгенерирован и выполнен.
С опциями Испытательного стенда TLM вы можете:
Примите решение видеть многословные сообщения, отраженные к командному окну во время выполнения SystemC/TLM включая транзакцию TLM и сообщения синхронизации.
Укажите, что испытательный стенд должен выполниться с или не синхронизируя аннотации.
Укажите, управляет ли инициатор движущимися наборами данных ввода и вывода между регистрами и буферами или выполняет ли компонент перемещения автоматически.
В данном примере выберите испытательный стенд Generate С синхронизацией для режима синхронизации Времени выполнения, и Автоматический и для режима инициирования Входного буфера и для режима инициирования Буфера вывода.
После того, как генерация кода успешно произошла для и испытательного стенда компонента, кнопка Verify TLM Component становится активированной. Проверьте, что Компонент TLM выполняет следующее:
Сборки использование сгенерированного кода делают и сгенерированные make-файлы.
Запуски Simulink, чтобы получить входной стимул и ожидаемые результаты.
Преобразует данные Simulink в векторы TLM.
Запускает автономный исполняемый файл испытательного стенда SystemC/TLM.
Преобразует результаты TLM назад в данные Simulink.
Выполняет сравнение данных.
Генерирует Окно рисунка для любых сигналов, которые имели данные, неправильный выдерживает сравнение.
Компиляция сгенерированных файлов принимает, что присутствие делает и совместимый компилятор GNU, gcc, в вашем пути на Linux® или Визуальном компиляторе Studio® в вашем пути на Windows®.
Выберите вкладку TLM Compilation. Эта панель предоставляет возможности управлять генерацией make-файлов, используемых, чтобы скомпилировать сгенерированный код.
Параметры компилятора:
SystemC и TLM включают опции пути к библиотеке, позволяют вам задавать, где make-файлы могут найти SystemC и установки TLM. Значения по умолчанию позволяют вам использовать переменные окружения так, чтобы обновления вашего SystemC или установки TLM не требовали обновления ваших моделей Simulink. Можно настроить среду до вызова MATLAB или использовать MATLAB setenv команда.
В данном примере это значения переменной окружения, которые были протестированы со стандартными установками OSCI, расположенными в / инструментах:
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
В данном примере введите введение для пользовательского тега.
Выберите Report в левой панели. В данном примере выберите, автоматически создают отчет генерации кода и Открытый отчет. Эти опции генерируют отчет HTML во время генерации компонента. Отчет Генерации кода детализирует содержимое каждого сгенерированного файла.
Нажмите ОК, чтобы применить эти настройки и выйти из диалогового окна Configuration Parameters.
В окне модели щелкните правой кнопкой по блоку DualFilter и выберите C/C ++ Code> Generate Code для этой Подсистемы в контекстном меню, чтобы запустить генерацию компонента TLM.
В качестве альтернативы можно выполнить следующую команду в окне команды MATLAB:
>> buildTlmgDemoModel('intro');
Во время выполнения вам предложат выбрать настраиваемые параметры. Выпадающий список каждого коэффициента позволяет вам выбирать класс памяти переменной. Опции Класса памяти:
Встроенный - встроенные параметры не являются настраиваемыми.
Переменные SimulinkGlobal - The SimulinkGlobal являются настраиваемыми.
ExportedGlobal, ImportedExtern и ImportedExternPointer не поддержаны моделью TLM Generation.
Опция Глобальная переменная Simulink была выбрана для этого примера. Нажмите Build. Генерация TLM завершается, когда вы видите, что следующее сообщение появляется в окне команды MATLAB:
### Starting Simulink Coder build procedure for model: DualFilter ### Successful completion of Simulink Coder build procedure for model: DualFilter
Откройте сгенерированные файлы в веб-браузере 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 Configuration Parameters путем выбора Simulation> Configuration Parameters в окне модели.
b. В диалоговом окне Configuration Parameters выберите представление TLM Generator, и затем выберите вкладку TLM Testbench.
c. В панели Испытательного стенда TLM нажмите Verify TLM Component, чтобы запустить сгенерированный испытательный стенд.
В качестве альтернативы можно выполнить следующую команду в окне команды MATLAB:
>> verifyTlmgDemoModel('intro')
Это проверяет, что шаг выполняет следующие действия:
Создает сгенерированный код.
Запуски Simulink, чтобы получить входной стимул и ожидаемые результаты.
Преобразует данные Simulink в векторы TLM.
Запускает автономный исполняемый файл испытательного стенда SystemC/TLM.
Преобразует результаты TLM назад в данные Simulink.
Выполняет сравнение данных.
Генерирует Окно рисунка для любых сигналов, которые имели данные, неправильный выдерживает сравнение.
Опция, чтобы сгенерировать испытательный стенд позволяет вам, чтобы видеть, как потоки инициатора испытательного стенда взаимодействуют и синхронизируются с целью. Ищите результат сравнения в конце журнала и проверьте, что нет никаких данных miscompare.
### Starting component verification ### Checking available compiler. ### Building testbench and TLM component. Microsoft (R) Program Maintenance Utility Version 12.00.21005.1 Copyright (C) Microsoft Corporation. All rights reserved. nmake.exe /nologo /f makefile.mk all-am OPT_CXXFLAGS="/O2 /MT /D _NDEBUG" OPT_LDFLAGS="" cd ..\DualFilter_intro_tlm && nmake.exe /nologo /f makefile.mk all-am cd ..\DualFilter && nmake.exe /nologo /f makefile.mk all-am cl.exe /c /O2 /MT /D _NDEBUG /Fd".\obj\DualFilter.pdb" /D "RT" /D "USE_RTMODEL" /D "WIN64" /D "_LIB" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /I ".\include" /I ".\utils" /nologo /FD /EHsc /W3 /TP /wd4244 /wd4267 /vmg /Foobj\DualFilter.obj src\DualFilter.cpp DualFilter.cpp cl.exe /c /O2 /MT /D _NDEBUG /Fd".\obj\DualFilter.pdb" /D "RT" /D "USE_RTMODEL" /D "WIN64" /D "_LIB" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /I ".\include" /I ".\utils" /nologo /FD /EHsc /W3 /TP /wd4244 /wd4267 /vmg /Foobj\DualFilter_data.obj src\DualFilter_data.cpp DualFilter_data.cpp lib.exe /nologo /subsystem:console /out:lib\DualFilter.lib obj\DualFilter.obj obj\DualFilter_data.obj -- Build DualFilter.lib completed -- cl.exe /c /O2 /MT /D _NDEBUG /Fd".\obj\DualFilter_intro_tlm.pdb" /D "RT" /D "USE_RTMODEL" /D "WIN64" /D "_LIB" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /I ".\include" /I "..\DualFilter\include" /I "..\DualFilter\utils" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /D SC_INCLUDE_DYNAMIC_PROCESSES /nologo /FD /EHsc /W3 /TP /wd4244 /wd4267 /vmg /Foobj\DualFilter_intro_tlm.obj src\DualFilter_intro_tlm.cpp DualFilter_intro_tlm.cpp lib.exe /nologo /subsystem:console /out:lib\DualFilter_intro_tlm.lib obj\DualFilter_intro_tlm.obj -- Build DualFilter_intro_tlm.lib completed -- cl.exe /c /O2 /MT /D _NDEBUG /Fd".\obj\DualFilter_intro_tlm_tb.pdb" /D "RT" /D "USE_RTMODEL" /D "WIN64" /D "_CONSOLE" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /I ".\include" /I "..\DualFilter_intro_tlm\include" /I "..\DualFilter\include" /I "..\DualFilter\utils" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /I "T:\28\jchevali.Bhdlverifier.j565286\matlab\extern\include" /D SC_INCLUDE_DYNAMIC_PROCESSES /D TLMG_CURR_VERBOSITY=tlmgPrintTerse /nologo /FD /EHsc /W3 /TP /wd4244 /wd4267 /vmg /Foobj\mw_support_tb.obj src\mw_support_tb.cpp mw_support_tb.cpp cl.exe /c /O2 /MT /D _NDEBUG /Fd".\obj\DualFilter_intro_tlm_tb.pdb" /D "RT" /D "USE_RTMODEL" /D "WIN64" /D "_CONSOLE" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /I ".\include" /I "..\DualFilter_intro_tlm\include" /I "..\DualFilter\include" /I "..\DualFilter\utils" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /I "T:\28\jchevali.Bhdlverifier.j565286\matlab\extern\include" /D SC_INCLUDE_DYNAMIC_PROCESSES /D TLMG_CURR_VERBOSITY=tlmgPrintTerse /nologo /FD /EHsc /W3 /TP /wd4244 /wd4267 /vmg /Foobj\DualFilter_intro_tlm_tb.obj src\DualFilter_intro_tlm_tb.cpp DualFilter_intro_tlm_tb.cpp cl.exe /c /O2 /MT /D _NDEBUG /Fd".\obj\DualFilter_intro_tlm_tb.pdb" /D "RT" /D "USE_RTMODEL" /D "WIN64" /D "_CONSOLE" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /I ".\include" /I "..\DualFilter_intro_tlm\include" /I "..\DualFilter\include" /I "..\DualFilter\utils" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /I "I:\share\apps\HDLTools\OpenSource\SystemC\systemc\include" /I "T:\28\jchevali.Bhdlverifier.j565286\matlab\extern\include" /D SC_INCLUDE_DYNAMIC_PROCESSES /D TLMG_CURR_VERBOSITY=tlmgPrintTerse /nologo /FD /EHsc /W3 /TP /wd4244 /wd4267 /vmg /Foobj\DualFilter_intro_tlm_tb_main.obj src\DualFilter_intro_tlm_tb_main.cpp DualFilter_intro_tlm_tb_main.cpp link.exe obj\mw_support_tb.obj obj\DualFilter_intro_tlm_tb.obj obj\DualFilter_intro_tlm_tb_main.obj /LIBPATH:"I:\share\apps\HDLTools\OpenSource\SystemC\systemc\lib\win64" /LIBPATH:"T:\28\jchevali.Bhdlverifier.j565286\matlab\extern\lib\win64\microsoft" /nologo /INCREMENTAL /SUBSYSTEM:CONSOLE /MACHINE:X64 ..\DualFilter_intro_tlm\lib\DualFilter_intro_tlm.lib ..\DualFilter\lib\DualFilter.lib "systemc-vs-12.0.lib" libmat.lib libmx.lib libeng.lib /PDB:".\obj\DualFilter_intro_tlm_tb.pdb" /out:DualFilter_intro_tlm_tb.exe -- Build DualFilter_intro_tlm_tb.exe completed -- ### Running Simulink simulation to capture inputs and expected outputs. ### Executing TLM testbench to generate actual outputs. SystemC 2.3.1-Accellera --- Dec 4 2015 16:22:19 Copyright (c) 1996-2014 by all Contributors, ALL RIGHTS RESERVED [ 0 s] (singleInitiatorThread) ## found input field tlmg_in1 at tlmg_tlminvec fieldnum 0 [ 0 s] (singleInitiatorThread) ## found input field tlmg_in2 at tlmg_tlminvec fieldnum 1 [ 0 s] (singleInitiatorThread) ## found output field tlmg_out1 at tlmg_tlminvec fieldnum 2 [ 0 s] (singleInitiatorThread) ## found output field tlmg_out2 at tlmg_tlminvec fieldnum 3 [ 0 s] (singleInitiatorThread) ## setup 2 input data fields, 2 output data fields ## STARTING SIMULATION [ 0 s] (singleInitiatorThread) ## Start of vectors from MAT file. Will display '.' for every 100 vectors played. [ 14020 ns] (singleInitiatorThread) . [ 28020 ns] (singleInitiatorThread) . [ 42020 ns] (singleInitiatorThread) . [ 56020 ns] (singleInitiatorThread) . [ 70020 ns] (singleInitiatorThread) . [ 70165 ns] (singleInitiatorThread) ## end of data...Terminating initiator thread. [ 70165 ns] (singleInitiatorThread) ############################################# ## END OF VECTORS. PLAYED 501 VECTORS. ## ## DATA MISCOMPARES : 0 ## ## TRANSPORT ERRORS : NO ## ## MAT FILE WRITE ERRORS: NO ## ############################################# [ 70165 ns] (singleInitiatorThread) ## Wrote results MAT file. ## SIMULATION HAS ENDED ### Comparing expected vs. actual results. Data successfully compared for signal tlmg_out1. Data successfully compared for signal tlmg_out2. ### Component verification completed
Это завершает Начало работы с примером Генератора TLM.