将一种类型的数组转换为另一种类型 - 系统verilog

时间:2018-03-21 19:03:44

标签: verilog system-verilog

我希望将一种类型的数组转换为另一种类型。

举个例子,我们假设我们有一个byte类型的数组,并且想要一个类型为logic [5:0]的新数组。

我在尝试丢失数据时遇到困难。

谢谢,

乔治

2 个答案:

答案 0 :(得分:1)

如果要将一种类型的数组转换为另一种类型的数组,如果它们具有完全相同的总位数,则可以通过比特流转换轻松实现。动态大小的数组需要调整大小以具有确切的位数。

一个60字节的数组可以转换为80个6位的数组,因为它们都包含480位。

typedef logic [7:0] array_8_60_t[60];
typedef logic [5:0] array_6_80_t[60];
array_8_60_t a1;
array_6_80_t a2;

...
a2 = array_6_80_t'(a1);

如果目标数组(a2)的位数多于所需位数,或者您有一些特殊的格式,则需要查看流式运算符,或者还原为foreach循环;

答案 1 :(得分:1)

可以使用强制转换(')操作转换数据类型。

对于您的示例,您可以执行以下操作:

typedef byte byte_arr_t[];
byte_arr_t byte_arr;

typedef logic logic_arr_t[5:0];
logic_arr_t logic_arr;

logic_arr = logic_arr_t'(byte_arr);

记住你还必须知道数组及其元素的大小,否则数据可能会丢失。