Использование блоков в логике и библиотеке битовых операций

Эти инструкции иллюстрируют, как смоделировать ваш проект для генерации готового к HDL кода от блоков в Библиотеке Logic and Bit Operations. Библиотека содержит блоки, которые выполняют логические и битовые операции, битное сокращение и конкатенацию. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований соответствия. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.

Логические и арифметические операции сдвига разряда

ID инструкции

2.2.1

Серьезность

Информативный

Описание

Можно использовать блоки Simulink®, чтобы выполнить операции сдвига бита. Блоки могут выполнить логический и арифметический сдвиг разряда. Оставленный логический и арифметический сдвиг разряда приводит к тем же результатам, но правильный логический сдвиг и арифметический сдвиг действуют по-другому, как проиллюстрировано в этой таблице.

Блок/Имя функцииПараметр/ОперацияЭквивалентный код VerilogЭквивалентный код VHDLКомментарии
Сдвиг разрядаShift Left Logical<<<sll (sll и SHIFT_LEFT являются тем же самым в VHDL.Этот режим является режимом по умолчанию для блока. Операция сдвига влево не сохраняет знаковый бит. Если вход использует тип данных со знаком и имеет положительное значение, операция сдвига влево переключает 0 в пустой бит на LSB (Младший значащий Бит) сторона.
Shift Right Logical>>srlЭтот режим не сохраняет знаковый бит. Если вход использует тип данных со знаком и имеет положительное значение, операция сдвига вправо переключает 0 в пустой бит на MSB (Старший значащий Бит) сторона.
Shift Right Arithmetic>>>SHIFT_RIGHTКогда вход является типом данных со знаком, знаковый бит сохраняется, и другой сдвиг битов направо.
Переключите блок Arithmetic функция bitshiftПоложительная арифметика права значения/сдвига>>>SHIFT_RIGHTКогда вход является типом данных со знаком, знаковый бит сохраняется, и другой сдвиг битов направо.
Отрицательная величина / сдвиг оставила арифметику<<<sllЭтот режим не сохраняет знаковый бит. Если вход использует тип данных со знаком и имеет положительное значение, операция сдвига влево переключает 0 в пустой бит на стороне LSB. Этот режим не проверяет потери значимости и переполнение.
Функция bitsllНи один/логический сдвиг влево<<<sllЭтот режим не сохраняет знаковый бит. Сгенерированный HDL-код совпадает со сгенерированным HDL-кодом режима Shift Left Logical блока Bit Shift.
Функция bitsrlНи одно/логическое правильное не отсеивает>>srlЭтот режим не сохраняет знаковый бит. Сгенерированный HDL-код совпадает со сгенерированным HDL-кодом режима Shift Right Logical блока Bit Shift.
Функция bitsraНи одна/арифметика сдвиг вправо>>>SHIFT_RIGHTКогда вход является типом данных со знаком, знаковый бит сохраняется, и другой сдвиг битов направо. Сгенерированный HDL-код совпадает со сгенерированным HDL-кодом режима Shift Right Arithmetic блока Bit Shift.

Различие между логическим сдвигом и арифметическим сдвигом - сохраняется ли знаковый бит. Для типов данных со знаком этот бит является MSB. В логическом сдвиге вправо знаковый бит переключен направо, и нуль входит в сторону MSB. В арифметическом сдвиге вправо MSB (знаковый бит) сохраняется во время операции сдвига. Например, этот код иллюстрирует различие между функциями.

A = fi([], 1, 4, 0, 'bin','1011');
B = bitsrl(A, 2)
B = 

     2

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 4
        FractionLength: 0
B.bin
ans =

    '0010'
C = bitsra(A, 2)
C = 

    -2

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 4
        FractionLength: 0
C.bin
ans =

    '1110'

Использование логического оператора, побитового оператора и бита уменьшает блоки

ID инструкции

2.2.2

Серьезность

Информативный

Описание

Чтобы изучить, как можно использовать логические и битовые операции, откройте модель hdlcoder_logical_bitwise_operations.slx.

load_system('hdlcoder_logical_bitwise_operations')
sim('hdlcoder_logical_bitwise_operations')
open_system('hdlcoder_logical_bitwise_operations')

Для одноразрядных операций, которые используют Boolean или типы данных ufix1, используйте блок Logical Operator. Чтобы просмотреть операцию как логический символ схемы, в диалоговом окне Block Parameters блока, задают форму Значка как Distinctive. Вы можете также входные векторы, которые имеют Boolean или типы данных ufix1 к блоку.

Примечание: Boolean и ufix1 являются различными типами данных. Смешивание этих типов данных в той же модели или использование их взаимозаменяемо не рекомендуются. Для получения дополнительной информации смотрите Факторы Типа данных Simulink.

Для примера использования блока откройте Подсистему Logical Operations.

open_system('hdlcoder_logical_bitwise_operations/Logical Operations')

Для битовых операций на двух или больше битах, которые используют целое число или типы данных с фиксированной точкой, используйте блок Bitwise Operator. Для примера дважды кликните Подсистему Bitwise Operations.

open_system('hdlcoder_logical_bitwise_operations/Bitwise Operations')

Чтобы выполнить поразрядную операцию сокращения на векторе, который использует Boolean или ufix1 и возвращает 1-битное значение, используйте блок Bit Reduce. Для примера дважды кликните Подсистему Reduction Operations.

open_system('hdlcoder_logical_bitwise_operations/Reduction Operations')

Блок MATLAB function в Подсистеме преобразовывает 8-битный вектор в вектор 8 1-битные элементы ufix1.

open_system('hdlcoder_logical_bitwise_operations/Reduction Operations/convert bin2vec')

Используйте булев тип данных для, выдерживают сравнение с блоками постоянного и оператора отношения

ID инструкции

2.2.3

Серьезность

Строго рекомендуемый

Описание

Для Выдерживают сравнение С Постоянным, Выдерживают сравнение С Нулем и блоками Оператора отношения, можно задать uint8 или boolean как Output data type. Чтобы сгенерировать эффективный HDL-код для моделей, которые содержат эти блоки, задайте boolean как Output data type, потому что HDL-код должен соединить только LSB.

Для блока Relational Operator убедитесь, что оба входных параметров имеют совпадающий тип данных. Используя различные типы данных для входных параметров может привести к непреднамеренному усечению битов, таких как знаковый бит, который может привести к несоответствиям симуляции после генерации HDL-кода.

Проверять, используют ли блоки Оператора отношения в вашей модели тот же тип входных данных, и используют boolean в качестве типа выходных данных, осуществляют Проверку проверки модели HDL на использование блока Relational Operator.

Смотрите также

Функции

Блоки

Похожие темы