gpt4 book ai didi

verilog - 处理 SystemVerilog 包中的参数化

转载 作者:行者123 更新时间:2023-12-02 09:03:59 30 4
gpt4 key购买 nike

SystemVerilog 添加了包来为公共(public)代码段(函数、类型、常量等)提供命名空间。但由于包没有实例化,因此无法参数化,因此处理参数化成员是有问题的。在实践中,我发现这相当有限,因为我的自定义类型经常有一些参数指定字段宽度等。

我通常通过使用具有默认值的参数来处理这个问题,并且只是了解我需要返回更改某些应用程序的包源代码,这对我来说似乎非常错误。但我还没有找到一种方法来更干净地处理这个问题。例如:

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 的一个非常强大的补充,可以实现更安全的代码重用,但这个限制非常严重。

最佳答案

您可以使用参数化宏来命名具有特定宽度的类型:

`define SIMPLE_STRUCT(NAME) \
simple_struct_t_``NAME``

`define SIMPLE_STRUCT_DEF(NAME, ADDR_MSB, DATA_MSB) \
typedef struct { \
logic [ADDR_MSB``:0] address; \
logic [DATA_MSB:0] data; \
} `SIMPLE_STRUCT(NAME)

然后,在代码中的某个位置,您可以定义所需的结构:

`SIMPLE_STRUCT_DEF(narrow, 7, 31)
`SIMPLE_STRUCT_DEF(wide, 15, 63)

然后,在您需要的地方使用它,仅使用名称:

`SIMPLE_STRUCT(narrow) narrow1, narrow2;
narrow1.data = 0;
narrow2 = narrow1;
...

关于verilog - 处理 SystemVerilog 包中的参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895246/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com