Этот пример подсвечивает использование автоматически сгенерированной карты распределения памяти с отдельной опцией адреса, когда вы генерируете компонент SystemC™/TLM из модели Simulink® использование цели tlmgenerator или для Simulink Coder или для Embedded Coder™.
В Simulink каждый ввод или вывод компонента связан "точка-точка" с другим компонентом. В SystemC/TLM каждый компонент связывается через сокет TLM. Этот сокет обрабатывает все поступление и исходящую коммуникацию, отформатированную в транзакциях TLM. Поскольку каждая система обрабатывает коммуникацию по-другому, мы должны задать коммуникационный интерфейс для компонента SystemC/TLM, когда это сгенерировано из модели Simulink. В зависимости от надлежащего использования этого компонента SystemC/TLM этот коммуникационный интерфейс мог потребовать создания карты распределения памяти (или адрес) для каждого ввода/вывода в компоненте. Эта карта распределения памяти может быть простой или подробной.
Автоматически сгенерированная карта распределения памяти с отдельной опцией адреса генерирует компонент TLM с одним регистром чтения на выход модели и регистром записи на вход модели с отдельными адресами. Каждый вход модели Simulink связан со своим соответствующим регистром записи, и каждый выход связан со своим соответствующим регистром чтения. Когда создано с этой опцией, сгенерированный компонент TLM мог использоваться в виртуальной платформе (VP) в качестве автономного компонента в испытательном стенде, или это могло быть присоединено к каналу связи.
Для этого примера мы используем модель Simulink КИХ-фильтра как базис генерации SystemC/TLM.
Требования, чтобы запустить этот пример:
SystemC 2.3.1 (включает библиотеку TLM),
Примечание: пример включает процедуру сборки генерации кода. Simulink не разрешает вам создавать программы в области установки MATLAB. При необходимости превратитесь в рабочую директорию, которая не находится в области установки MATLAB до запуска никакой сборки.
Чтобы открыть модель FIR Filter с автоматически сгенерированной картой распределения памяти с отдельным адресом, нажмите кнопку Open Model.
Следующая модель открывается в Simulink.
В диалоговом окне Configuration Parameters выберите представление TLM Generation в левой панели. Во вкладке TLM Mapping, при Отображении Сокета, избранное То объединенный сокет TLM для входных данных, выходных данных и управления. Под Объединенным Сокетом TLM выберите карту распределения памяти Auto-generated и Отдельные смещения адреса ввода и вывода, как показано в следующем изображении.
Установите остающиеся опции Генерации TLM согласно своим настройкам (или оставьте значения по умолчанию, как они), и нажмите ОК, чтобы применить эти настройки и выйти из диалогового окна Configuration Parameters.
В окне модели щелкните правой кнопкой по блоку DualFilter и выберите C/C ++ Code> Generate Code для этой Подсистемы в контекстном меню, чтобы запустить генерацию компонента 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:
Найдите следующие строки кода. Эти линии представляют определения ввода и вывода КИХ-Фильтра, когда сгенерировано как компонент 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.