我有许多用户定义的数据类型(所有打包的结构)。我想确定这些数据类型中最大的数据类型的位宽,并创建一个这种大小的平面数组。
我的第一次尝试是使用联合并找到它的大小。但是,我正在编译Altera FPGA,而Quartus不支持SystemVerilog联合。以编程方式执行此操作还有哪些其他选项?我在Quartus中编译的联合代码如下所示。
typedef logic [7:0] uint8_t;
typedef logic [15:0] uint16_t;
typedef logic [31:0] uint32_t;
typedef logic [63:0] uint64_t;
typedef struct packed
{
uint8_t field_1;
uint16_t field_2;
} struct_1_t;
typedef struct packed
{
uint8_t field_1;
uint16_t field_2;
uint32_t field_3;
} struct_2_t;
typedef struct packed
{
uint8_t field_1;
uint16_t field_2;
uint32_t field_3;
uint64_t field_4;
} struct_3_t;
typedef union
{
struct_1_t struct_1;
struct_2_t struct_2;
struct_3_t struct_3;
} all_structs_t;
localparam MAX_STRUCT_SIZE = $bits(all_structs_t);
logic [MAX_STRUCT_SIZE-1:0] the_buffer;
答案 0 :(得分:1)
SystemVerilog没有指定解压缩联合的布局,所以即使综合工具支持它,你所写的内容也无法满足你的期望。
你可以做的是创建一个MAX函数。
<ol class="songlist">
<li><a href="linktoURL">Song Title</a></li>
<li><a href="linktoURL">Song Title</a></li>
<li><a href="linktoURL">Song Title</a></li>
<li><a href="linktoURL">Song Title</a></li>
<li><a href="linktoURL">Song Title</a></li>
</ol>