2014-04-12 4 views

ответ

3

для полного объяснения, обратитесь к IEEE Std 1800-2012 § 11.4.14 операторов Streaming (пакет/распаковки)

slice_size определяет размер каждого блока измеряется в битах. Если значение slice_size не указано, значение по умолчанию равно 1. Если указано, это может быть постоянное интегральное выражение или простой тип. Если используется тип, размер блока должен быть числом бит в этом типе. Если используется постоянное интегральное выражение, оно должно быть ошибкой для значения выражения равным нулю или отрицательным.

stream_operator<< или >> определяет порядок, в котором потоковые блоках данных: >> вызывает блоки данных, подлежащие потоковой передача в влево-правильный порядок, в то время как << вызывает блоки данных, подлежащие потоковой передача, в справа - левый заказ. Поведение влево-вправо с использованием >> должно быть проигнорировано с номером slice_size и повторным заказом не выполняется. Прямая налево потоковая передача с использованием << должна изменять порядок блоков в потоке, сохраняя порядок бит в каждом блоке. Для потоковой передачи справа налево с использованием << поток разбивается на блоки с указанным количеством бит, начиная с самого правого бита. Если в результате нарезки последний (самый левый) блок имеет меньше бит, чем размер блока, последний блок имеет размер оставшихся битов; нет отступов или усечений.

В вашем случае {>>byte{24'h060708} создает поток {8'h06, 8'h07, 8'h08}. byteq'() передает поток в байты, но это необязательно, поскольку поток уже соответствует правильному размеру. ans = {>>byte{24'h060708}}; будет иметь тот же результат. Если вы измените stream_operator на <<, поток будет {8'h08, 8'h07, 8'h06}.

4

Оператор >> не является логическим сдвигом в этом контексте, но он называется оператором потока.

операторов Потоковых определяют порядок, в котором потоковые блоках данных: >> вызывает блоки данных, подлежащие потоковые передачу в левом направо порядке, в то время как < < вызывает блоки данных, которые должны передаваться в правой TO- левый заказ.

Рассмотрим следующие строки, например:

$display ("%h", {>>byte{24'h060708}}); 
$display ("%h", {<<byte{24'h060708}}); 

В обоих случаях число 24'h060708 должен быть первым нарезанных в байтах (называемый slice_size). Первый печатает байты слева направо, а второй печатает их справа налево. Для этого, выхода:

060708 
080706 

Теперь в строке ans = byteq'({>>byte{24'h060708}}); вы используете битовый поток литье, который бросает 24'h060708 число нарезанного в байтах, представленных слева направо в byteq, что очередь байт.

Смежные вопросы