Арифметика сдвига

Переключите биты или двоичную точку сигнала

Библиотека

Логика и битовые операции

Описание

Поддерживаемые операции сдвига

Блок Shift Arithmetic может переключить биты или двоичную точку входного сигнала или обоих.

Например, переключая двоичную точку на входе типа данных sfix(8), двумя местами направо и оставленный, дает эти десятичные значения.

Операция сдвигаДвоичное значениеДесятичное значение

Никакой сдвиг (исходный номер)

11001.011

–6.625

Сдвиг двоичной точки прямо двумя местами

1100101.1

–26.5

Сдвиг двоичной точки оставлен двумя местами

110.01011

–1.65625

Этот блок выполняет арифметические сдвиги разряда на числах со знаком. Поэтому блок перерабатывает старший значащий бит для каждого сдвига разряда. При сдвиге битов на входе типа данных sfix(8), двумя местами направо и оставленный, дает эти десятичные значения.

Операция сдвигаДвоичное значениеДесятичное значение

Никакой сдвиг (исходный номер)

11001.011

–6.625

Сдвиг разряда прямо двумя местами

11110.010

–1.75

Сдвиг разряда оставлен двумя местами

00101.100

5.5

Поддержка типов данных

Блок поддерживает входные сигналы следующих типов данных:

Входной сигналПоддерживаемые типы данных
u
  • Плавающая точка

  • Встроенное целое число

  • Фиксированная точка

s
  • Плавающая точка

  • Встроенное целое число

  • Целое число фиксированной точки

Следующие правила определяют тип выходных данных:

Тип данных Входа uТип выходных данных
Плавающая точкаТо же самое как вход u
Встроенная целочисленная или фиксированная точка
  • Знак u

  • Размер слова u

  • Наклон u * 2^(max(binary points to shift))

  • Смещение u * 2^(max(binary points to shift – bits to shift)), для сдвигов разряда, где направление является двунаправленным или правильным

  • Смещение u * 2^(max(binary points to shift + bits to shift)), для сдвигов разряда, где направление оставляют

Параметры блоков поддерживают следующие типы данных:

ПараметрПоддерживаемые типы данных
Bits to shift: Number
  • Встроенное целое число

  • Целое число фиксированной точки

Binary points to shift
  • Встроенное целое число

  • Целое число фиксированной точки

Для получения дополнительной информации смотрите Типы данных, Поддержанные Simulink в документации Simulink®.

Параметры

Bits to shift: Source

Задайте, ввести ли биты, чтобы переключить на диалоговом окне или наследовать значения от входного порта.

Bits to shift: Direction

Задайте направление, в котором можно переключить биты: левый, правильный, или двунаправленный.

Bits to shift: Number

Задайте скаляр, вектор или массив значений сдвига разряда. Этот параметр доступен, когда Bits to shift: Source является Dialog.

Если направление...Затем...
Left или RightИспользуйте положительные целые числа, чтобы задать сдвиги разряда.
BidirectionalИспользуйте положительные целые числа для сдвигов вправо и отрицательные целые числа для сдвигов влево.
Binary points to shift

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

Diagnostic for out-of-range shift value

Задайте, произвести ли предупреждение или ошибку во время симуляции, когда блок содержит значение сдвига из области значений. Опции включают:

  • Программное обеспечение None — Simulink не принимает мер.

  • Программное обеспечение Warning — Simulink выводит предупреждение и продолжает симуляцию.

  • Программное обеспечение Error — Simulink отключает симуляцию и отображает ошибку

Для получения дополнительной информации смотрите Результаты Симуляции и Режима Accelerator для Значений Сдвига разряда Из области значений.

Check for out-of-range 'Bits to shift' in generated code

Установите этот флажок, чтобы включать условные операторы в сгенерированный код, которые защищают от значений сдвига разряда из области значений. Этот флажок доступен, когда Bits to shift: Source является Input port.

Для получения дополнительной информации смотрите Генерацию кода для Значений Сдвига разряда Из области значений.

Сдвиги разряда из области значений

Определение сдвига разряда из области значений

Предположим, что WL является входным размером слова. Теневые области в следующей схеме показывают значения сдвига разряда из области значений для левых и правых сдвигов.

Точно так же теневые области в следующей схеме показывают значения сдвига разряда из области значений для двунаправленных сдвигов.

Диагностика для сдвигов разряда из области значений отвечает можно следующим образом, в зависимости от режима работы:

РежимДиагностика для значения сдвига из области значений
'none'ПредупреждениеОшибка
СимуляцияНе сообщайте ни о каком предупреждении или ошибке.Сообщите о предупреждении, но продолжите симуляцию.Сообщите об ошибке и симуляции остановки.
Режимы Accelerator и генерация кодаНе имеет никакого эффекта.

Симуляция и результаты режима Accelerator для значений сдвига разряда из области значений

Предположим, что U является входом, WL является входным размером слова, и Y является вывод. Вывод для значения сдвига разряда из области значений для сдвигов влево следующие:

Точно так же вывод для значения сдвига разряда из области значений для сдвигов вправо следующие:

Для двунаправленных сдвигов вывод для значения сдвига разряда из области значений следующие:

Генерация кода для значений сдвига разряда из области значений

Для сгенерированного кода метод для обработки сдвигов разряда из области значений зависит от установки Check for out-of-range 'Bits to shift' in generated code.

Установка флажкаСгенерированный кодРезультаты симуляции по сравнению со сгенерированным кодом

Выбранный

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

Симуляция и Режим Accelerator заканчиваются те соответствия из генерации кода.

Очищенный

Не защищает от значений сдвига разряда из области значений.

  • Для значений в области значений, симуляции и Режима Accelerator заканчивается те соответствия из генерации кода.

  • Для значений из области значений результатами генерации кода является конкретный компилятор.

Для сдвигов вправо на отрицательных входных параметрах со знаком большинство компиляторов C использует арифметический сдвиг вместо логического сдвига. Сгенерированный код для блока Shift Arithmetic зависит от этого поведения компилятора.

Примеры

Блок Вывод для правильных сдвигов разряда

Следующая модель сравнивает поведение правильных сдвигов разряда с помощью диалогового окна по сравнению с входным портом блока.

Ключевые настройки параметров блоков блоков Константа:

БлокПараметрУстановка
Constant и Constant1Constant value124
Output data typeint8
Dynamic bit shiftConstant value2
Output data typeInherit: Inherit from 'Constant value'

Ключевые настройки параметров блоков блоков Арифметики Сдвига:

БлокПараметрУстановка
Bit shift from dialogBits to shift: SourceDialog
Bits to shift: DirectionRight
Bits to shift: Number2
Bit shift from inputBits to shift: SourceInput port
Bits to shift: DirectionRight

Главный блок Shift Arithmetic берет вход 124, который соответствует 01111100 в двоичном формате. Сдвиг количества битов два места направо производит 00011111 в двоичном формате. Поэтому блок выходные параметры 31.

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

Блок Вывод для сдвигов двоичной точки

Следующая модель показывает эффект сдвигов двоичной точки.

Ключевые настройки параметров блоков блоков Константа:

БлокПараметрУстановка
Constant и Constant1Constant value124
Output data typeint8

Ключевые настройки параметров блоков блоков Арифметики Сдвига:

БлокПараметрУстановка
Shift binary point 3 places to the rightBits to shift: SourceDialog
Bits to shift: DirectionBidirectional
Bits to shift: Number0
Binary points to shift: Number3
Shift binary point 3 places to the leftBits to shift: SourceDialog
Bits to shift: DirectionBidirectional
Bits to shift: Number0
Binary points to shift: Number–3

Главный блок Shift Arithmetic берет вход 124, который соответствует 01111100 в двоичном формате. Сдвиг двоичной точки три места направо производит 01111100000 в двоичном формате. Поэтому главный блок выходные параметры 995.

Нижний блок Shift Arithmetic также берет вход 124. Сдвиг двоичной точки три места налево производит 01111.100 в двоичном формате. Поэтому нижний слой камня выходные параметры 15.5.

Характеристики

Типы данных

Дважды | один | основывают целое число | фиксированная точка

'SampleTime'

Наследованный от управления блоком

Прямое сквозное соединение

Да

Многомерные сигналы

Нет

Сигналы переменного размера

Нет

Обнаружение пересечения нулем

Нет

Генерация кода

Да

Представлено до R2006a