Systemverilog赋值 - 逻辑数组到字节数组

时间:2014-01-01 17:21:12

标签: system-verilog

我正在尝试将logic l_data[31:0];分配给byte data[];

data = l_data;不是合法的SystemVerilog分配。怎么办呢?

1 个答案:

答案 0 :(得分:5)

使用比特流强制转换(IEEE Std 1800-2012 LRM的第6.24.3节)。您需要为强制转换创建一个typedef,但最好还是对所有变量声明使用typedef。

typedef byte unsigned dynamic_byte_array_t[];
typedef logic fixed_logic_array_t[31:0];

dynamic_byte_array_t data;
fixed_logic_array_t l_data;

data = dynamic_byte_array_t'(l_data);

几点说明:

  1. 使用byte时要小心,默认情况下会签名。
  2. 我为所有类型的基本名称添加_t后缀
  3. 我建议使用比我在这里使用的更有意义的类型名称。
  4. 比特流强制转换有一个特定的顺序来从左到右移动位。如果需要更复杂的位排序,请使用流操作符(第11.4.14节)