exponenta event banner

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

В этих руководствах показано, как моделировать дизайн для создания кода, готового к HDL, из блоков в библиотеке логических и битовых операций. Библиотека содержит блоки, выполняющие логические и побитовые операции, сокращение битов и конкатенацию. Каждое руководство имеет уровень серьезности, который указывает уровень соответствия требованиям. Дополнительные сведения см. в разделе Рекомендации по моделированию HDL Уровни серьезности.

Операции логического и арифметического сдвига битов

Идентификатор руководства

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Когда вход представляет собой тип данных со знаком, бит знака сохраняется, а другие биты сдвигаются вправо.
Арифметический блок сдвига bitshift функцияПоложительное значение/сдвиг правой арифметики>>>SHIFT_RIGHTКогда вход представляет собой тип данных со знаком, бит знака сохраняется, а другие биты сдвигаются вправо.
Отрицательное значение/сдвиг левой арифметики<<<sllЭтот режим не сохраняет бит знака. Если вход использует тип данных со знаком и имеет положительное значение, операция сдвига влево сдвигает 0 в пустой бит на стороне LSB. В этом режиме не выполняется проверка недоливов и переливов.
bitsll функцияНет/логическое смещение влево<<<sllЭтот режим не сохраняет бит знака. Сгенерированный код HDL совпадает с кодом Shift Left Logical режим блока Bit Shift.
bitsrl функцияНет/логическое правое отсечение>>srlЭтот режим не сохраняет бит знака. Сгенерированный код HDL совпадает с кодом Shift Right Logical режим блока Bit Shift.
bitsra функцияНет/арифметический сдвиг вправо>>>SHIFT_RIGHTКогда вход представляет собой тип данных со знаком, бит знака сохраняется, а другие биты сдвигаются вправо. Сгенерированный код 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'

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

Идентификатор руководства

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 используйте блок логического оператора. Чтобы просмотреть операцию как символ логической цепи, в диалоговом окне «Параметры блока» задайте форму значка как 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-разрядное значение, используйте блок уменьшения битов. Например, дважды щелкните значок Reduction Operations Подсистема.

open_system('hdlcoder_logical_bitwise_operations/Reduction Operations')

Функциональный блок MATLAB внутри подсистемы преобразует 8-битный вектор в вектор 8 1-битный ufix1 элементы.

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

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

Идентификатор руководства

2.2.3

Серьезность

Очень рекомендуем

Описание

Для блоков «Сравнить с константой», «Сравнить с нулем» и «Реляционный оператор» можно указать uint8 или boolean в качестве типа данных Output. Чтобы создать эффективный код HDL для моделей, содержащих эти блоки, укажите boolean в качестве типа данных Output, поскольку код HDL должен соединять только LSB.

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

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

См. также

Функции

Блоки

Связанные темы