为什么SystemVerilog中的Streaming-Operator反转字节顺序?

时间:2018-10-12 13:37:55

标签: system-verilog

我模拟了以下示例:

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帮助),情况并非如此。

1 个答案:

答案 0 :(得分:1)

如IEEE 1800-2017 LRM的 6.24.3比特流转换部分中所定义,未打包的动态数组的class User(): # placeholder def __init__(self, userId): self.userId = userId # (*) @classmethod def createUser(cls, userId): if not isValid(userId): # isValid may or may not be part of the class return False else: return cls(userId) # ... other methods 元素被视为左索引,而流{ {1}}从左到右索引。要获得所需的结果,请写

[0]

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