Сгенерируйте нативный код С полуточности из моделей Simulink

Некоторые встроенные аппаратные цели исходно поддерживают специальные типы для половины точности, такие как _Float16 и _fp16 типы данных для ARM® компиляторы. Можно сгенерировать нативный код С полуточности для встроенных аппаратных целей, которые исходно поддерживают половину точности типы данных с плавающей точкой. Процесс, чтобы сгенерировать нативную половину кода С следующие:

  • Укажите новое аппаратное целевое устройство, которое исходно поддерживает половину точности с помощью target пакет.

  • Настройте Simulink® модель для нативной половины генерации кода с новым целевым компьютером.

  • Сконфигурируйте набор инструментальных средств модели Simulink и настройте компилятор для половины точности.

  • Сгенерируйте нативную половину кода типа.

Fixed-Point Designer™ включает предварительно сконфигурированные реализации языка для компиляторов Armclang и GCC. Для других аппаратных целей можно задать пользовательскую реализацию языка на основе спецификаций оборудования.

Сгенерируйте нативный код С полуточности для ARM Cortex-A с компилятором Armclang

В этом примере, Коре ARM®- Процессор используется в качестве аппаратной цели. Модель сконфигурирована, чтобы использовать эту цель ARM и набор инструментальных средств компилятора Armclang. Обратитесь к документации разработчика ARM для получения дальнейшей информации относительно использования типа данных полуточности на этом оборудовании. См. Компилятор Руки armclang Справочник: полуточность типы данных с плавающей точкой.

Укажите целевой компьютер

Используйте target.create функция, чтобы создать цель процессора ARM Cortex-A, которая совместима с половиной точности.

arm_half = target.create('Processor', ...
'Manufacturer', "ARM Compatible", ...
'Name', 'ARM Cortex-A Half-Precision');

Добавьте реализацию языка. 32-битной версии Лязга для ARM включили половину точности по умолчанию. Использование target.get получать целевой объект из внутренней базы данных.

li = target.get('LanguageImplementation',"Clang ARM 32-bit");

Замените реализацию языка по умолчанию для Коры ARM с Armclang.

arm_half.LanguageImplementations = li;

Используйте target.add функция, чтобы добавить целевой объект во внутреннюю базу данных.

target.add(arm_half);

Открытая модель полуточности

Откройте модель, для которой вы хотите сгенерировать нативный код С полуточности. Модель должна использовать типы данных полуточности и быть сконфигурирована для генерации кода.

model = 'simpleHalfModel';
open_system(model);

Настройте Модель Simulink с Целевым компьютером

Опционально, включите параметр модели, Наследовали выходной тип с плавающей точкой, меньший, чем одинарная точность, чтобы распространить половину точности.

set_param(model,'InheritOutputTypeSmallerThanSingle','on');

Поставьте цель генерации кода к цели ARM, измененной для половины точности.

set_param(model, 'ProdEqTarget', 'on'); 
set_param(model, 'ProdHWDeviceType', 'ARM Compatible->ARM Cortex-A Half-Precision');

Настройте Модель Simulink с Набором инструментальных средств Компилятора Armclang

Укажите набор инструментальных средств компилятора Armclang согласно Setup и Сконфигурируйте Набор инструментальных средств Компилятора Armclang для Генерации кода.

Настройте набор инструментальных средств компилятора Armclang для генерации кода.

set_param(model,'SystemTargetFile','ert.tlc');
set_param(model,'GenCodeOnly','off');
set_param(model,'Toolchain','Armclang Compiler');
set_param(model,'BuildConfiguration','Specify');

Сконфигурируйте компилятор Armclang для пользовательских флагов C.

compilerOptions = get_param(model,'CustomToolchainOptions');
compilerIdx = find(strcmp(compilerOptions,'C Compiler'));

Добавьте флаги полуточности.

appendToCCompilerOptions = ' --target=arm-arm-none-eabi -mcpu=cortex-a75+fp16';
compilerOptions{ compilerIdx + 1 } = strcat( compilerOptions{ compilerIdx + 1 }, appendToCCompilerOptions );

Примените пользовательские опции набора инструментальных средств к модели.

set_param(model, 'CustomToolchainOptions', compilerOptions );

Можно подтвердить эти настройки в панели Code Generation диалогового окна Configuration Parameters.

Code Generation pane after setting up custom Armclang compiler.

Сгенерируйте код

Если модель была настроена для ARM целевой компьютер Cortex-A и набор инструментальных средств компилятора Armclang, можно сгенерировать код С. Можно только запустить исполняемый файл модели на цели ARM или эмуляторе.

Используйте slbuild функционируйте, чтобы создать независимый исполняемый файл для модели.

slbuild(model);

Можно смотреть отчет генерации кода подтвердить, что пользовательский заголовок и определения типа используются.

Screenshot of generated header file.

Сгенерированный код использует нативный тип данных полуточности.

Screenshot of generated C code showing real16_T is used.

Укажите ARM Cortex-A с компилятором GCC

В этом примере процессор ARM Cortex-A используется в качестве аппаратной цели. Модель сконфигурирована, чтобы использовать эту цель ARM и набор инструментальных средств компилятора GCC.

Используйте target.create функция, чтобы создать цель процессора ARM Cortex-A.

arm_half = target.create('Processor', ...
'Manufacturer', "ARM Compatible", ...
'Name', 'ARM Cortex-A Half-Precision');

Добавьте реализацию языка. 32-битной версии GCC для ARM включили половину точности по умолчанию. Используйте target.get функция, чтобы получить целевой объект из внутренней базы данных.

li = target.get('LanguageImplementation',"GNU GCC ARM 32-bit");

Замените реализацию языка по умолчанию для Коры ARM с Armclang.

arm_half.LanguageImplementations = li;

Используйте target.add функция, чтобы добавить целевой объект во внутреннюю базу данных.

target.add(arm_half);

Укажите целевой компьютер ARM с пользовательской реализацией языка

В этом примере вы создаете новую пользовательскую реализацию языка с половиной точности для совместимой цели ARM.

Используйте target.create функционируйте, чтобы скопировать реализацию языка Коры совместимого ARM ARM.

languageImplementation = target.create('LanguageImplementation','Name','ARM with half',...
'Copy','ARM Compatible-ARM Cortex');

Укажите пользовательскую половину информации и предназначайтесь для определенных заголовков, как дано вашей документацией целевого компьютера. Для получения дополнительной информации смотрите Регистр Новые Аппаратные устройства.

customHalf = target.create('FloatingPointDataType','Name','BCM2711 Half Type', ...
'TypeName','float16_T','LiteralSuffix','f16','Size',16, ...
'SystemIncludes',"arm_fp16.h,arm_neon.h");
languageImplementation.DataTypes.NonStandardDataTypes = customHalf;

Предоставьте информацию о своем целевом процессоре.

% Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC
pi4a72 = target.create('Processor','Manufacturer','Broadcom','Name','BCM2711');

Добавьте пользовательскую половину реализации языка точности.

pi4a72.LanguageImplementations = languageImplementation;

Используйте target.add функция, чтобы добавить целевой объект во внутреннюю базу данных.

target.add(pi4a72);

Укажите другие аппаратные цели для половины точности

Этот пример использует Renesas® RH850, чтобы показать вам, как настроить цели не-ARM для половины точности.

Используйте target.create функция, чтобы создать целевой процессор.

prh850 = target.create('Processor', ...
'Manufacturer', 'Renesas', ...
'Name', 'Renesas-RH850 With Half', ...
'Copy', 'Renesas-RH850');

Добавьте реализацию языка.

li = target.create('LanguageImplementation',...
'Name', 'Renesas-RH850 with Half', ...
'Copy', 'Renesas-RH850');

Предоставьте дополнительную информацию пользовательская реализация полуточности для этого оборудования.

customHalf = target.create('FloatingPointDataType', 'Name', 'Renesas Half Type');
customHalf.TypeName = '__fp16';
customHalf.Size = 16;
customHalf.LiteralSuffix = '';
customHalf.SystemIncludes = '';

Добавьте пользовательский тип данных полуточности.

li.DataTypes.NonStandardDataTypes = customHalf;
prh850.LanguageImplementations = li;

Используйте target.add функция, чтобы добавить целевой объект во внутреннюю базу данных.

target.add(prh850);

Смотрите также

| | | |

Похожие темы

Внешние веб-сайты