首页 > 解决方案 > 为什么 SystemVerilog 中的 Streaming-Operator 会颠倒字节顺序?

问题描述

我模拟了以下示例:

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

但是,这对我来说似乎很奇怪,因为字节顺序是相反的,因为我希望 LSB 位于 data_byte[0] 的索引 0 处,而 MSB 位于 data_byte[1] 的索引 7 处。为什么会这样?根据文档(Cadence Help),情况并非如此。

标签: system-verilog

解决方案


如IEEE 1800-2017 LRM 的第6.24.3 节比特流转换[0]中所定义,解包动态数组的元素被认为是左索引,流从左到右>>索引。为了得到你想要的结果,写

data_bytes = { << byte {j}};

这会反转流,但将各个字节保持从右到左的顺序。


推荐阅读