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