system-verilog - 为什么 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),情况并非如此。
解决方案
如IEEE 1800-2017 LRM 的第6.24.3 节比特流转换[0]
中所定义,解包动态数组的元素被认为是左索引,流从左到右>>
索引。为了得到你想要的结果,写
data_bytes = { << byte {j}};
这会反转流,但将各个字节保持从右到左的顺序。
推荐阅读
- python - 删除 Line2D 对象后 Matplotlib 图不更新?
- sql - 在 Google BigQuery SQL 中,如何连接同一个人的字符串行?
- python - 从 wunderground 抓取历史天气数据
- c# - 隐式流向 url 添加哈希前缀
- flutter - Where should setState be called/should it?
- mysql - MySql工作台中没有SYS模式
- c - 定义新类型时需要你有一个别名来编译它?
- go - 无法通过 gorm 读取 postgres 数据库中的写入信息
- c++ - c ++计算两个数组的总和,如果结果偶数则输出布尔值'0',如果奇数则输出'1'
- python - PysimpleGUI 无法读取 sg.WIN_CLOSED 事件中的 inputFields