Эти инструкции иллюстрируют, как смоделировать ваш проект для генерации готового к HDL кода от блоков в Библиотеке Logic and Bit Operations. Библиотека содержит блоки, которые выполняют логические и битовые операции, битное сокращение и конкатенацию. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований податливости. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.
2.2.1
Информативный
Можно использовать Simulink® блоки, чтобы выполнить операции сдвига бита. Блоки могут выполнить логический и арифметический сдвиг разряда. Оставленный логический и арифметический сдвиг разряда приводит к тем же результатам, но правильный логический сдвиг и арифметический сдвиг действуют по-другому, как проиллюстрировано в этой таблице.
Блок/Имя функции | Параметр/Операция | Эквивалентный код Verilog | Эквивалентный код VHDL | Комментарии |
---|---|---|---|---|
Bit Shift | Shift 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')
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.