Эти инструкции иллюстрируют, как смоделировать ваш проект для генерации готового к HDL кода от блоков в Библиотеке Logic and Bit Operations. Библиотека содержит блоки, которые выполняют логические и битовые операции, битное сокращение и конкатенацию. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований соответствия. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию 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 | Когда вход является типом данных со знаком, знаковый бит сохраняется, и другой сдвиг битов направо. | |
Переключите блок 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: 0B.bin
ans =
'0010'C = bitsra(A, 2)
C =
-2
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 4
FractionLength: 0C.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')
2.2.3
Строго рекомендуемый
Для Выдерживают сравнение С Постоянным, Выдерживают сравнение С Нулем и блоками Оператора отношения, можно задать uint8 или boolean как Output data type. Чтобы сгенерировать эффективный HDL-код для моделей, которые содержат эти блоки, задайте boolean как Output data type, потому что HDL-код должен соединить только LSB.
Для блока Relational Operator убедитесь, что оба входных параметров имеют совпадающий тип данных. Используя различные типы данных для входных параметров может привести к непреднамеренному усечению битов, таких как знаковый бит, который может привести к несоответствиям симуляции после генерации HDL-кода.
Проверять, используют ли блоки Оператора отношения в вашей модели тот же тип входных данных, и используют boolean в качестве типа выходных данных, осуществляют Проверку проверки модели HDL на использование блока Relational Operator.