В следующих разделах описываются проблемы, которые часто возникают при выборе конструкции с фиксированной точкой для использования на встроенном процессоре, например, некоторые общие предположения о целочисленных размерах и операциях, доступных на встроенных процессорах. Эти допущения приводят к проблемам проектирования и правилам проектирования, которые могут быть полезны для конкретной конструкции с фиксированной точкой.
Встраиваемые процессоры обычно характеризуются определенным размером битов. Например, термины «8-битный микро», «32-битный микро» или «16-битный DSP» являются общими. Обычно можно с уверенностью предположить, что процессор преимущественно предназначен для обработки целых чисел заданного размера бита. Целые числа указанного размера бита называются базовым типом данных. Кроме того, процессор обычно обеспечивает некоторую поддержку целых чисел, которые вдвое шире базового типа данных. Целые числа, состоящие из двойных битов, называются типом данных накопителя. Например, 16-разрядный микро имеет 16-разрядный базовый тип данных и 32-разрядный тип данных накопителя.
Хотя встраиваемый процессор может поддерживать другие типы данных, в этом разделе описываются только типы данных базы и накопителя.
Встроенные операции процессора, описанные в этом разделе, ограничены требованиями базовой схемы моделирования. Базовое моделирование использует умножение, сложение, вычитание и задержки. Модели с фиксированной точкой также нуждаются в сдвигах для масштабирования преобразований. Для всех этих операций встроенный процессор должен иметь собственные команды, которые позволяют использовать базовый тип данных в качестве входных данных. Для входов типа накопителя процессор обычно поддерживает сложение, вычитание и задержку (сохранение/извлечение из памяти), но не умножение.
Умножение обычно не поддерживается для входов типа аккумулятора из-за проблем сложности и размера. Трудность умножения состоит в том, что для полной точности выходной сигнал должен быть вдвое больше входных данных. Например, для умножения двух 16-разрядных чисел требуется 32-разрядный выход для полной точности. Необходимость обработки выходных сигналов от операции умножения является одной из причин, по которой встроенные процессоры включают в себя поддержку типа аккумулятора. Однако, если также поддерживается умножение входов типа накопителя, то существует необходимость поддерживать тип данных, который в два раза больше, чем тип накопителя. Чтобы ограничить эту дополнительную сложность, умножение обычно не поддерживается для входов типа аккумулятора.
При моделировании динамических систем с математикой с фиксированной точкой следует учитывать важные правила конструирования.
Лучше всего умножать только входы базового типа данных. Встроенные процессоры обычно обеспечивают команду для умножения входов базового типа, но не для умножения входов аккумуляторного типа. При необходимости можно объединить несколько команд для обработки умножения входов аккумуляторного типа. Однако это может привести к большому, медленному встроенному коду.
При необходимости можно вставлять блоки для преобразования входных данных из типа накопителя в базовый тип перед блоками «Изделие» или «Усиление».
Существует две общие причины, по которым задержка установки должна использовать только номера базового типа:
Единичная задержка по существу сохраняет значение переменной в ОЗУ и, на один шаг позже, извлекает это значение из ОЗУ. Поскольку значение должно находиться в памяти от одного шага времени до следующего, ОЗУ должно быть выделено исключительно переменной и не может использоваться совместно или для других целей. Использование номеров типа аккумулятора вместо базового типа данных удваивает требования к оперативной памяти, что может значительно увеличить стоимость встраиваемой системы.
Единичная задержка обычно подается в блок усиления. Правило построения умножения требует, чтобы на входе (сигнал единичной задержки) использовался базовый тип данных.
За исключением сигналов единичной задержки, большинство сигналов не требуется от одного временного шага к следующему. Это означает, что значения сигналов могут временно храниться в совместно используемой и повторно используемой памяти. Эта совместно используемая и повторно используемая память может быть ОЗУ или просто регистрироваться в ЦП. В любом случае сохранение значения как типа данных накопителя не намного дороже, чем сохранение его как базового типа данных.
Сложение и вычитание могут использовать тип данных накопителя при наличии выравнивания. Типичным обоснованием является уменьшение накопления ошибок из-за округления или переполнения.
Например, общая операция фильтрации представляет собой взвешенную сумму нескольких переменных. Умножение переменной на вес естественным образом производит произведение типа аккумулятора. Перед суммированием каждое произведение может быть преобразовано обратно в базовый тип данных. Этот подход вводит ошибку округления в каждую часть суммы.
Альтернативно, произведения могут быть суммированы с использованием типа данных накопителя, и окончательная сумма может быть преобразована в базовый тип данных. Ошибка округления вводится только в одной точке, и точность обычно лучше. Стоимость выполнения сложения или вычитания с использованием чисел аккумуляторного типа несколько дороже, но при наличии обоснования это обычно стоит стоимости.