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

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

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

ID инструкции

2.2.1

Серьезность

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

Описание

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

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

Используйте булев тип данных в блоках Relational Operator и Compare to Constant

ID инструкции

2.2.3

Серьезность

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

Описание

Для Compare To Constant, Compare To Zero и блоков Relational Operator, можно задать uint8 или boolean как Output data type. Чтобы сгенерировать эффективный HDL-код для моделей, которые содержат эти блоки, задайте boolean как Output data type, потому что HDL-код должен соединить только LSB.

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

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

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

Функции

Блоки

Похожие темы