В этом примере подчеркивается использование опции no memory map, когда вы генерируете компонент SystemC™/TLM из модели Simulink ® с помощью цели tlmgenerator для Simulink Coder или Embedded Coder™.
В Simulink каждый вход или выход блока связан точкой-точкой с другим блоком. В SystemC/TLM каждый компонент взаимодействует через разъем TLM. Этот сокет обрабатывает все входящие и исходящие сообщения, форматированные в транзакциях TLM. Поскольку каждая система обрабатывает коммуникацию по-разному, мы должны задать коммуникационный интерфейс для компонента SystemC/TLM, когда он генерируется из модели Simulink. В зависимости от предполагаемого использования этого компонента SystemC/TLM, этот коммуникационный интерфейс может потребовать создания карты памяти (или адреса) для каждого ввода/вывода в компоненте. Эта карта памяти может быть простой или подробной.
No памяти map опции генерирует компонент TLM только с одним регистром чтения и одной записи без какого-либо адреса. Входы модели Simulink привязаны к регистру записи, а выходы - к регистру чтения. При создании с помощью этой опции сгенерированный компонент TLM может использоваться в виртуальной платформе (VP) как автономный компонент в испытательный стенд, как прямая связанная совместная обработка модуля, или может быть присоединен к каналу связи с помощью адаптера.
В данном примере мы используем модель Simulink конечной импульсной характеристики в качестве базиса генерации SystemC/TLM.
Требования для запуска этого примера:
SystemC 2.3.1 (включает библиотеку TLM)
Примечание. Пример включает процедуру генерации кода. Simulink не позволяет вам создавать программы в области установки MATLAB. При необходимости перед началом сборки перейдите в рабочую директорию, которая отсутствует в области установки MATLAB.
Чтобы открыть модель конечной импульсной характеристики без карты памяти, нажмите кнопку «Открыть модель».
Следующая модель откроется в Simulink.
В диалоговом окне Параметров конфигурации выберите вид генератора TLM на левой панели. На вкладке TLM Mapping, в разделе Socket Mapping, выберите One combined TLM socket для входных данных, выходных данных и управления. В разделе Комбинированный разъем TLM выберите No памяти map, как показано на следующем изображении.
Установите оставшиеся опции генерации TLM в соответствии с вашими настройками (или оставьте значения по умолчанию такими, какие они есть) и нажмите OK, чтобы применить эти настройки и выйти из диалогового окна Параметров конфигурации.
В окне модели щелкните правой кнопкой мыши по блоку DualFilter и выберите C/C + + код > Generate Code для этой Подсистемы в контекстном меню, чтобы запустить генерацию TLM-компонента. Также можно выполнить следующую команду в командном окне MATLAB:
>> slbuild('tlmgdemo_nomem/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 8.3743s
Откройте следующий файл в редакторе MATLAB:
Найдите следующие строки кода. Эти линии представляют входные и выходные определения конечной импульсной характеристики при генерации в виде компонента TLM без карты памяти.
Чтобы предоставить набор входов сгенерированному компоненту TLM, инициатор TLM должен отправить транзакцию записи TLM без адреса и с полезной нагрузкой, содержащей базовый DualFilter_combined_IN_BANK_T типа.
Чтобы получить набор выходов из сгенерированного компонента TLM, инициатор TLM должен отправить считанную транзакцию TLM без адреса и с полезной нагрузкой, содержащей базовый DualFilter_combined_OUT_BANK_T типа.