如果
localparam
类型的 struct
有默认初始值,是否仍需要初始化器?
例如
typedef struct {
int a = 1;
} my_struct;
localparam my_struct m;
SystemVerilog 语法/语义需要对任何
localparam
声明进行声明赋值,或在模块头外部(即模块主体内部)进行 parameter
声明。
您的代码在 3 个主要 Verilog 模拟器上生成语法错误。 来自 IEEE Std 1800-2017,第 6.20.1 节 参数声明语法:
从 a 中省略constant_param_expression 是合法的 param_assignment 或 type_assignment 中的 data_type 仅在 参数_端口_列表。
ModelSim (Intel) 支持此技巧。
//define:
typedef struct {
bit PARAM1 = 1;
bit PARAM2 = 0;
}PARAMETERS_t;
function automatic some PARAMETERS_INIT();
automatic PARAMETERS_t P;
return P;
endfunction
//example to use in module declaration:
localparam PARAMETERS_t SOME_PARAMETERS = PARAMETERS_INIT();
//example to watch data in ModelSim waveforms:
const PARAMETERS_t CSOME_PARAMETERS = SOME_PARAMETERS;