我想知道在verilog或systemverilog中是否存在标准函数,它将返回打包结构中某个字段的位偏移量 . 例如,请参阅下面使用假设函数$ find_field_offset:
typedef struct packed
{
logic [31:0] field_1,
logic [15:0] field_2,
logic [63:0] field_3
} struct_type;
struct_type the_struct;
int field_1_offset;
assign field_1_offset = $find_field_offset(the_struct.field_1);
谢谢!
4 回答
谢谢你的例子 . 下面是一些迂腐的检查和消息,以确认某些层次结构的所有字段的偏移量和大小 . char_idx是结构中半字节的字符位置,如果从$ writememh或类似字符串中读取为字符串 . 在初始块内调用此taks以确认下游解析将能够正确解释十六进制表示 .
它没有任何变量 . 您只需将值传入该方法,编译器就无法确定您希望在
struct_type
中获得field1
的偏移量 .使用 native SystemVerilog可以做的最好的事情是定义自己的函数,该函数根据枚举参数返回偏移量 . 脱离我的头顶:
您可以使用某些VPI代码执行更多操作,但您需要更改调用函数的方式 .
这可能不是一个好的方便的方式 . 但这是本机SV代码,找出
struct_type
内的偏移量field_1
如果你按照自己喜欢的方式调用函数,因为据我所知,编译器失去了
field1
实际上是什么的上下文 . 我的意思是该函数会看到一个逻辑向量值,但不知道它来自一个结构 .如果您可以将函数调用更改为:
那么从技术上讲,可能会发现
the_struct
的类型为struct_type
并遍历其所有字段以查找名为"field1"
的字段并返回其偏移量 .使用VPI代码的问题在于VPI对象模型的支持因供应商而异 . 您必须足够幸运地使用支持我们在此需要的功能的供应商 .