0
私はいくつかのユーザー定義データ型(すべてのパックド構造体)を持っています。これらのデータ型の中で最大のビット幅を決定し、このサイズのフラットな配列を作成したいと思います。systemverilogで合成可能なデータ型の最大ビット幅を見つける
私の最初の試みは、ユニオンを使用し、そのサイズを見つけることでした。しかし、私はアルテラ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;