Контейнеры устройства хранения данных

Введение

При кодировании с API для написанных пользователем S-функций фиксированной точки важно иметь в виду различие между размером контейнера устройства хранения данных, размером слова контейнера устройства хранения данных, и сигнализировать о размере слова. Разделы, которые следуют, обсуждают контейнеры, используемые API, чтобы сохранить сигналы в симуляции и генерации кода.

Контейнеры устройства хранения данных в симуляции

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

Категории контейнера устройства хранения данных

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

Контейнеры устройства хранения данных фиксированной точки

Контейнерная категория

Сигнал
Размер слова

Контейнерный размер слова

Контейнерный размер

FXP_STORAGE_INT8 (со знаком)
FXP_STORAGE_UINT8 (без знака)

1 - 8 битов

8 битов

1 байт

FXP_STORAGE_INT16 (со знаком)
FXP_STORAGE_UINT16 (без знака)

9 - 16 битов

16 битов

2 байта

FXP_STORAGE_INT32 (со знаком)
FXP_STORAGE_UINT32 (без знака)

17 - 32 бита

32 бита

4 байта

FXP_STORAGE_OTHER_SINGLE_WORD

33 к размеру слова long тип данных

Длина long тип данных

Длина long тип данных

FXP_STORAGE_MULTIWORD

Больше, чем размер слова long тип данных к 128 битам

Множители длины long тип данных к 128 битам

Множители длины long тип данных к 128 битам

Когда количество битов в размере слова сигнала меньше размера контейнера, биты размера слова всегда хранятся в наименее значимых битах контейнера. Остающиеся контейнерные биты должны быть расширенным знаком:

  • Если тип данных без знака, биты расширения знака должны быть очищены, чтобы обнулить.

  • Если тип данных подписывается, биты расширения знака должны быть установлены в один для строго отрицательных чисел и очищены, чтобы обнулить в противном случае.

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

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

Сигнал и размеры слова контейнера устройства хранения данных возвращены ssGetDataTypeFxpWordLength и ssGetDataTypeFxpContainWordLen функции, соответственно. Размер контейнера устройства хранения данных возвращен ssGetDataTypeStorageContainerSize функция. Контейнерная категория возвращена ssGetDataTypeStorageContainCat функция, который в дополнение к тем в приведенной выше таблице, может также возвратить следующие значения.

Другие контейнеры устройства хранения данных

Контейнерная категория

Описание

FXP_STORAGE_UNKNOWN

Возвращенный, если категория контейнера устройства хранения данных неизвестна

FXP_STORAGE_SINGLE

Контейнерный тип для Simulink® single

FXP_STORAGE_DOUBLE

Контейнерный тип для double Simulink

FXP_STORAGE_SCALEDDOUBLE

Контейнерный тип для типа данных, который был заменен с Scaled double

Контейнеры устройства хранения данных в примере симуляции

sfix24_En10 тип данных перебрасывается парой слов длина 24, но на самом деле хранится в 32 битах в процессе моделирования. Для этого сигнала,

  • ssGetDataTypeStorageContainCat возвращает FXP_STORAGE_INT32.

  • ssGetDataTypeStorageContainerSize или sizeof( ) возвращает 4, который является размером контейнера устройства хранения данных в байтах.

  • ssGetDataTypeFxpContainWordLen возвращает 32, который является размером слова контейнера устройства хранения данных в битах.

  • ssGetDataTypeFxpWordLength возвращает 24, который является размером слова типа данных в битах.

Контейнеры устройства хранения данных в генерации кода

Контейнеры устройства хранения данных, используемые этим API для генерации кода, являются не всегда тем же самым как используемыми для симуляции. Во время генерации кода всегда используется нативный тип данных C. Типы данных с плавающей точкой сохранены в double C или float. Типы данных с фиксированной точкой считаются в C подписанным и char без знака, short, int, или long.

Эмуляция

Поскольку это ценно для быстрого прототипирования и HIL-тестирования, эмуляция меньших сигналов в больших контейнерах поддерживается в генерации кода. Например, 29-битный сигнал поддерживается в генерации кода, если существует тип данных C, доступный, который имеет по крайней мере 32 бита. Правила для размещения меньшего сигнала в больший контейнер, и для контакта с дополнительными контейнерными битами, являются тем же самым в генерации кода что касается симуляции.

Если меньший сигнал эмулирован в большем контейнере устройства хранения данных в симуляции, он не обязательно эмулирован в генерации кода. Например, 24-битный сигнал эмулирован в 32-битном контейнере устройства хранения данных в симуляции. Однако некоторые микросхемы DSP имеют нативную поддержку 24-битных количеств. На такой цели компилятор C может задать int или long быть точно 24 бита. В этом случае 24-битный сигнал сохранен в 32-битном контейнере в симуляции, и в 24-битном контейнере в генерации кода.

С другой стороны сигнал, который не был эмулирован в симуляции, может должен быть быть эмулирован в генерации кода. Например, некоторые микросхемы DSP имеют минимальную поддержку целых чисел. На таких микросхемах, char, short, int, и long может все быть задан к 32 битам. В этом случае необходимо эмулировать 8-и 16-битные типы данных с фиксированной точкой в генерации кода.

Контейнер устройства хранения данных функции TLC

Поскольку отображение контейнеров устройства хранения данных в симуляции к контейнерам устройства хранения данных в генерации кода не является непосредственным, функции Компилятора выходного языка (TLC) для контейнеров устройства хранения данных отличаются от тех в симуляции:

  • FixPt_DataTypeNativeType

  • FixPt_DataTypeStorageDouble

  • FixPt_DataTypeStorageSingle

  • FixPt_DataTypeStorageScaledDouble

  • FixPt_DataTypeStorageSInt

  • FixPt_DataTypeStorageUInt

  • FixPt_DataTypeStorageSLong

  • FixPt_DataTypeStorageULong

  • FixPt_DataTypeStorageSShort

  • FixPt_DataTypeStorageUShort

  • FixPt_DataTypeStorageMultiword

Первая из этих функций TLC, FixPt_DataTypeNativeType, самый близкий аналог ssGetDataTypeStorageContainCat в симуляции. FixPt_DataTypeNativeType возвращает строку TLC, которая задает тип контейнера устройства хранения данных, и продукт Simulink Coder™ автоматически вставляет typedef это сопоставляет строку с нативным типом данных C в сгенерированном коде.

Например, рассмотрите фиксированный тип данных, который сохранен в FXP_STORAGE_INT8 в симуляции. FixPt_DataTypeNativeType возвратит int8_T. int8_T будет typdef'd к char, short, int, или long в сгенерированном коде, в зависимости от того, что подходит для целевого компилятора.

Остающиеся упомянутые выше функции TLC возвращают TRUE или FALSE в зависимости от того, используется ли конкретный стандартный тип данных C, чтобы содержать данный указанный в API тип данных. Обратите внимание на то, что эти функции не обязательно дают взаимоисключающие ответы для данного указанного типа данных, вследствие того, что типы данных C могут потенциально перекрыться в размере. В C,

sizeof (char) ≤ sizeof (короткий) ≤ sizeof (int) ≤ sizeof (долго).

Один или несколько из этих типов данных C может быть, и очень часто, тот же размер.