SystemVerilog 添加了一些包来为通用代码片段(函数、类型、常量等)提供命名空间。但是由于包没有被实例化,它们不能被参数化,所以处理参数化的成员是有问题的。在实践中,我发现这非常有限,因为我的自定义类型通常有一些参数来指示字段宽度等。
我通常通过使用具有默认值的参数来处理这个问题,并且只是理解我需要回去更改某些应用程序的包源代码,这对我来说似乎是非常错误的。但我还没有找到一种更干净地处理这个问题的方法。例如:
package my_pkg;
parameter ADDR_MSB = 7;
parameter DATA_MSB = 31;
typedef struct {
logic [ADDR_MSB:0] address;
logic [DATA_MSB:0] data;
} simple_struct_t;
endpackage
有没有人找到更清洁的方法来处理这个问题?我很想听听它,因为我认为包是 SV 的一个非常强大的补充,可以实现更安全的代码重用,但这个限制非常严重。