我模拟了以下示例:
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帮助),情况并非如此。
答案 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]
这会反转流,但会将各个字节按从右到左的顺序保留。