Можно задать заменяющие записи кода для сложения или вычитания типов данных с фиксированной точкой, таким образом, что они совпадают с относительным наклоном и смещают значения (равный наклон и обнуляют сетевое смещение) через входные параметры оператора, и вывести. Эти записи позволяют вам игнорировать наклон и значения смещения при отображении относительного наклона и значений смещения к заменяющей функции для сложения или вычитания.
Этот пример создает заменяющую запись кода для сложения типов данных с фиксированной точкой. Наклоны должны быть равными, и сетевое смещение должно быть нулем через входные параметры оператора и вывести. Пример задает функцию, сопоставляющую программно. В качестве альтернативы можно также использовать Code Replacement Tool, чтобы задать то же отображение.
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hTable = crl_table_fixed_slopeseq_netbiaszero
В теле функции составьте таблицу путем вызова функционального RTW.TflTable
.
hTable = RTW.TflTable;
Создайте запись для отображения оператора с вызовом RTW.TflCOperationEntryGenerator
функция, которая обеспечивает доступ к параметрам фиксированной точки SlopesMustBeTheSame
и MustHaveZeroNetBias
.
op_entry = RTW.TflCOperationEntryGenerator;
Установите параметры записи оператора с вызовом setTflCOperationEntryParameters
функция. Параметры задают тип операции как сложение, режим насыщения как насыщение прочь, округляя режимы, столь же незаданные, и имя заменяющей функции как u16_add_SameSlopeZeroBias
. Параметры SlopesMustBeTheSame
и MustHaveZeroNetBias
должен быть установлен в true
чтобы указать, что наклоны должны быть равными и сетевое смещение должно быть нулем через сложение (или вычитание) входных параметров и вывести.
setTflCOperationEntryParameters(op_entry, ... 'Key', 'RTW_OP_ADD', ... 'Priority', 90, ... 'SaturationMode', 'RTW_WRAP_ON_OVERFLOW', ... 'RoundingModes', {'RTW_ROUND_UNSPECIFIED'}, ... 'SlopesMustBeTheSame', true, ... 'MustHaveZeroNetBias', true, ... 'ImplementationName', 'u16_add_SameSlopeZeroBias', ... 'ImplementationHeaderFile', 'u16_add_SameSlopeZeroBias.h', ... 'ImplementationSourceFile', 'u16_add_SameSlopeZeroBias.c');
Создайте концептуальные аргументы y1
, u1
, и u2
. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы createAndAddConceptualArg
функция, чтобы создать и добавить аргумент с одним вызовом функции. Каждый аргумент задан как 16 битов и без знака. Каждый аргумент указывает, что заменяющая обработка запросов кода не проверяет на точное совпадение наклону сайта вызова и смещает значения.
createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16); createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ... 'Name', 'u1', ... 'IOType', 'RTW_IO_INPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16); createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ... 'Name', 'u2', ... 'IOType', 'RTW_IO_INPUT', ... 'CheckSlope', false, ... 'CheckBias', false, ... 'IsSigned', false, ... 'WordLength', 16);
Создайте аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызовы createAndSetCImplementationReturn
и createAndAddImplementationArg
функции, чтобы создать и добавить аргументы реализации в запись. Аргументы реализации должны описать основные типы числовых данных (не типы данных с фиксированной точкой). В этом случае выходные аргументы и входные параметры составляют 16 битов и без знака (uint16
).
createAndSetCImplementationReturn(op_entry, 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'IsSigned', false, ... 'WordLength', 16, ... 'FractionLength', 0); createAndAddImplementationArg(op_entry, 'RTW.TflArgNumeric',... 'Name', 'u1', ... 'IOType', 'RTW_IO_INPUT', ... 'IsSigned', false, ... 'WordLength', 16, ... 'FractionLength', 0); createAndAddImplementationArg(op_entry, 'RTW.TflArgNumeric',... 'Name', 'u2', ... 'IOType', 'RTW_IO_INPUT', ... 'IsSigned', false, ... 'WordLength', 16, ... 'FractionLength', 0);
Добавьте запись в заменяющую таблицу кода с вызовом addEntry
функция.
addEntry(hTable, op_entry);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Протестировать этот пример:
Укажите заменяющее отображение кода.
Создайте модель.
Для этой модели:
Установите Inport 1 Data type на fixdt(0,16,13)
.
Установите Inport 2 Data type на fixdt(0,16,13)
.
В блоке Add:
Проверьте, что Output data type установлен в свое значение по умолчанию, Inherit via internal rule
.
Установите Integer rounding mode на Zero
.
Сконфигурируйте модель со следующими настройками:
На панели Solver выберите фиксированный шаг, дискретный решатель.
На панели Code Generation выберите ERT-based system target file.
На Code Generation> панель Interface, выберите заменяющую библиотеку кода, которая содержит вашу запись операции сложения.
Сгенерируйте код и отчет генерации кода.
Рассмотрите замены кода.