Эти инструкции иллюстрируют, как смоделировать ваш проект для генерации готового к 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: 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')
2.2.3
Строго рекомендуемый
Для Выдерживают сравнение С Постоянным, Выдерживают сравнение С Нулем и блоками Оператора отношения, можно задать uint8
или boolean
как Output data type. Чтобы сгенерировать эффективный HDL-код для моделей, которые содержат эти блоки, задайте boolean
как Output data type, потому что HDL-код должен соединить только LSB.
Для блока Relational Operator убедитесь, что оба входных параметров имеют совпадающий тип данных. Используя различные типы данных для входных параметров может привести к непреднамеренному усечению битов, таких как знаковый бит, который может привести к несоответствиям симуляции после генерации HDL-кода.
Проверять, используют ли блоки Оператора отношения в вашей модели тот же тип входных данных, и используют boolean
в качестве типа выходных данных, осуществляют Проверку проверки модели HDL на использование блока Relational Operator.