Почему потоковый оператор в SystemVerilog меняет порядок байтов? - PullRequest
0 голосов
/ 12 октября 2018

Я смоделировал следующий пример:

shortint j;
byte unsigned data_bytes[];

j = 16'b1111_0000_1001_0000;
data_bytes = { >>{j}};
`uvm_info(get_type_name(), $sformatf("j data_bytes: %b_%b", data_bytes[1], data_bytes[0]), UVM_LOW)

Результат:

UVM_INFO Initiator.sv(84) @ 0: uvm_test_top.sv_initiator [Initiator] j data_bytes: 10010000_11110000

Тем не менее, это кажется мне странным, поскольку порядок следования байтов обратный, как я ожидаю, младший битбыть с индексом 0 data_byte [0] и MSB с индексом 7 data_byte [1].Почему это происходит?Согласно документации (справка Cadence), это не должно иметь место.

1 Ответ

0 голосов
/ 12 октября 2018

Как определено в разделе 6.24.3 Приведение битового потока LRM IEEE 1800-2017, элемент [0] распакованного динамического массива считается левым индексом, и потоковая передача >> идетот слева направо индексы.Чтобы получить желаемые результаты, напишите

data_bytes = { << byte {j}};

Это перевернет поток, но сохранит отдельные байты в порядке справа налево.

...