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