Смещение битов или двоичная точка сигнала
Логика и битовые операции
Блок 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 |
Встроенная целочисленная или фиксированная точка |
|
Параметры блоков поддерживают следующие типы данных:
Параметр | Поддерживаемые типы данных |
---|---|
Bits to shift: Number |
|
Binary points to shift |
|
Для получения дополнительной информации смотрите Типы данных, Поддержанные Simulink в документации Simulink®.
Задайте, ввести ли биты, чтобы переключить на диалоговом окне или наследовать значения от входного порта.
Задайте направление, в котором можно переключить биты: левый, правильный, или двунаправленный.
Задайте скаляр, вектор или массив значений сдвига разряда. Этот параметр доступен, когда Bits to shift: Source является Dialog
.
Если направление... | Затем... |
---|---|
Left или Right | Используйте положительные целые числа, чтобы задать сдвиги разряда. |
Bidirectional | Используйте положительные целые числа в сдвигах вправо и отрицательные целые числа для сдвигов влево. |
Задайте целое число мест, чтобы переключить двоичную точку входного сигнала. Положительное значение указывает на сдвиг вправо, в то время как отрицательная величина указывает на сдвиг влево.
Задайте, произвести ли предупреждение или ошибку в процессе моделирования, когда блок содержит значение сдвига из области значений. Опции включают:
None
— Программное обеспечение Simulink не принимает мер.
Warning
— Программное обеспечение Simulink выводит предупреждение и продолжает симуляцию.
Error
— Программное обеспечение Simulink отключает симуляцию и отображает ошибку
Для получения дополнительной информации смотрите Результаты Симуляции и Режима Accelerator для Значений Сдвига разряда Из области значений.
Установите этот флажок, чтобы включать условные операторы в сгенерированный код, которые защищают от значений сдвига разряда из области значений. Этот флажок доступен, когда Bits to shift: Source является Input port
.
Для получения дополнительной информации смотрите Генерацию кода для Значений Сдвига разряда Из области значений.
Предположим тот WL
входной размер слова. Теневые области в следующей схеме показывают значения сдвига разряда из области значений для левых и правых сдвигов.
Точно так же теневые области в следующей схеме показывают значения сдвига разряда из области значений для двунаправленных сдвигов.
Диагностика для сдвигов разряда из области значений отвечает можно следующим образом, в зависимости от режима работы:
Режим | Диагностика для значения сдвига из области значений | ||
---|---|---|---|
'none' | Предупреждение | Ошибка | |
Симуляция | Не сообщайте ни о каком предупреждении или ошибке. | Сообщите о предупреждении, но продолжите симуляцию. | Сообщите об ошибке и симуляции остановки. |
Режимы Accelerator и генерация кода | Не оказывает влияния. |
Предположим тот U
вход, WL
входной размер слова и Y
выход. Выход для значения сдвига разряда из области значений для сдвигов влево следующие:
Точно так же выход для значения сдвига разряда из области значений для сдвигов вправо следующие:
Для двунаправленных сдвигов выход для значения сдвига разряда из области значений следующие:
Для сгенерированного кода метод для обработки сдвигов разряда из области значений зависит от установки Check for out-of-range 'Bits to shift' in generated code.
Установка флажка | Сгенерированный код | Результаты симуляции по сравнению со сгенерированным кодом |
---|---|---|
Выбранный | Включает условные операторы, чтобы защитить от значений сдвига разряда из области значений. | Симуляция и Режим Accelerator заканчиваются те соответствия из генерации кода. |
Очищенный | Не защищает от значений сдвига разряда из области значений. |
|
Для сдвигов вправо на отрицательных входных параметрах со знаком большинство компиляторов C использует арифметический сдвиг вместо логического сдвига. Сгенерированный код для блока Shift Arithmetic зависит от этого поведения компилятора.
Следующая модель сравнивает поведение правильных сдвигов разряда с помощью диалогового окна по сравнению с входным портом блока.
Ключевые настройки параметров блоков блоков Константа:
Блок | Параметр | Установка |
---|---|---|
Constant и Constant1 | Constant value | 124
|
Output data type | int8 | |
Dynamic bit shift | Constant value | 2
|
Output data type | Inherit: Inherit from 'Constant value' |
Ключевые настройки параметров блоков блоков Арифметики Сдвига:
Блок | Параметр | Установка |
---|---|---|
Bit shift from dialog | Bits to shift: Source | Dialog |
Bits to shift: Direction | Right | |
Bits to shift: Number | 2
| |
Bit shift from input | Bits to shift: Source | Input port |
Bits to shift: Direction | Right |
Главный блок Shift Arithmetic берет вход 124, который соответствует 01111100 в двоичном формате. Сдвиг количества битов два места направо производит 00011111 в двоичном формате. Поэтому блок выходные параметры 31.
Нижний блок Shift Arithmetic выполняет ту же операцию как главный блок. Однако нижний слой камня получает значение сдвига разряда через входной порт вместо диалогового окна. Путем предоставления этого значения как входного сигнала можно изменить количество битов, чтобы переключить в процессе моделирования.
Следующая модель показывает эффект сдвигов двоичной точки.
Ключевые настройки параметров блоков блоков Константа:
Блок | Параметр | Установка |
---|---|---|
Constant и Constant1 | Constant value | 124
|
Output data type | int8 |
Ключевые настройки параметров блоков блоков Арифметики Сдвига:
Блок | Параметр | Установка |
---|---|---|
Shift binary point 3 places to the right | Bits to shift: Source | Dialog |
Bits to shift: Direction | Bidirectional | |
Bits to shift: Number | 0
| |
Binary points to shift: Number | 3
| |
Shift binary point 3 places to the left | Bits to shift: Source | Dialog |
Bits to shift: Direction | Bidirectional | |
Bits to shift: Number | 0
| |
Binary points to shift: Number | –3
|
Главный блок Shift Arithmetic берет вход 124, который соответствует 01111100 в двоичном формате. Сдвиг двоичной точки три места направо производит 01111100000 в двоичном формате. Поэтому главный блок выходные параметры 995.
Нижний блок Shift Arithmetic также берет вход 124. Сдвиг двоичной точки три места налево производит 01111.100 в двоичном формате. Поэтому нижний слой камня выходные параметры 15.5.
Типы данных | Дважды | один | основывают целое число | фиксированная точка |
'SampleTime' | Наследованный от управления блоком |
Прямое сквозное соединение | Да |
Многомерные сигналы | Нет |
Сигналы переменного размера | Нет |
Обнаружение пересечения нулем | Нет |
Генерация кода | Да |