В этом примере показано использование автоматически генерируемой карты памяти с отдельным параметром адреса при создании компонента SystemC™/TLM из модели Simulink ® с использованием tlmgenerator target для Simulink Coder или Embedded Coder™.
В Simulink каждый входной или выходной компонент привязан к другому компоненту. В SystemC/TLM каждый компонент взаимодействует через сокет TLM. Этот сокет обрабатывает все входящие и исходящие сообщения, отформатированные внутри транзакций TLM. Поскольку каждая система обрабатывает связь по-разному, мы должны определить коммуникационный интерфейс для компонента SystemC/TLM, когда он генерируется из модели Simulink. В зависимости от предполагаемого использования этого компонента SystemC/TLM, этот коммуникационный интерфейс может потребовать построения карты памяти (или адреса) для каждого входа/выхода в компоненте. Эта карта памяти может быть простой или подробной.
Автоматически генерируемая карта памяти с опцией индивидуального адреса генерирует компонент TLM с одним регистром считывания на выходной сигнал модели и регистром записи на входной сигнал модели с индивидуальными адресами. Каждый вход модели Simulink привязан к соответствующему регистру записи, и каждый выход привязан к соответствующему регистру считывания. При создании с помощью этой опции сгенерированный компонент TLM может использоваться в виртуальной платформе (VP) в качестве автономного компонента на испытательном стенде или может быть присоединен к каналу связи.
В этом примере используется модель Simulink фильтра FIR в качестве основы для генерации SystemC/TLM.
Требования к выполнению этого примера:
SystemC 2.3.1 (включает библиотеку TLM)
Примечание.Пример включает процедуру создания кода. Simulink не позволяет создавать программы в области установки MATLAB. При необходимости перед запуском сборки перейдите в рабочую папку, которая отсутствует в области установки MATLAB.
Чтобы открыть модель FIR-фильтра с автоматически генерируемой картой памяти с отдельным адресом, нажмите кнопку «Открыть модель».
Следующая модель откроется в Simulink.

В диалоговом окне Configuration Parameters выберите представление TLM Generation на левой панели. На вкладке TLM Mapping в разделе Socket Mapping выберите One combined TLM socket для ввода данных, вывода данных и управления. В разделе Комбинированный сокет TLM (Combined TLM Socket) выберите Автоматически сгенерированная карта памяти (Auto-generated memory map) и Отдельные смещения адресов ввода и вывода (Individual input and output address offsets), как показано на следующем

Установите оставшиеся опции генерации TLM в соответствии с вашими предпочтениями (или оставьте значения по умолчанию без изменений) и нажмите кнопку ОК, чтобы применить эти настройки и выйти из диалогового окна Параметры конфигурации (Configuration Parameters).
В окне модели щелкните правой кнопкой мыши по блоку DireFilter и выберите в контекстном меню пункт C/C + + Code > Generate Code for this Subsystem, чтобы начать генерацию компонента TLM. Также в окне команд MATLAB можно выполнить следующую команду:
>> slbuild('tlmgdemo_aimem/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 15.979s
Откройте следующие файлы в редакторе MATLAB:
Найдите следующие строки кода. Эти строки представляют входные и выходные определения фильтра FIR при формировании в качестве компонента TLM с индивидуальной картой памяти адресов.

Чтобы обеспечить набор входных данных для сгенерированного компонента TLM, инициатор TLM должен послать две транзакции записи TLM:
с полезной нагрузкой, содержащей данные типа input_1_REG_T по адресу DualFilter_combined_IN_BANK_ADDR + input_1_REG_ADDR.
с полезной нагрузкой, содержащей данные типа input_2_REG_T по адресу DualFilter_combined_IN_BANK_ADDR + input_2_REG_ADDR.

Для получения набора выходных данных из сгенерированного компонента TLM инициатор TLM должен послать три считанные транзакции TLM:
с полезной нагрузкой, содержащей данные типа output_1_REG_T по адресу DualFilter_combined_OUT_BANK_ADDR + output_1_REG_ADDR.
с полезной нагрузкой, содержащей данные типа output_2_REG_T по адресу DualFilter_combined_OUT_BANK_ADDR + output_2_REG_ADDR.