如何在不创建虚拟变量的情况下获取 SystemVerilog 中结构字段的宽度?

How to get width of a field of a struct in SystemVerilog without create dummy variable?

如何获取结构中字段的宽度?我尝试使用

$bits(struct_type_name.field_name)

但无法编译。我必须创建一个虚拟变量并在其上应用 $bits()。但是如果我需要很大的宽度,那会产生很多垃圾。

有什么更好的方法吗?

不幸的是,结构类型的 field_name 不是另一种类型或变量。两条建议

  1. 在声明 _field_name_ 时使用 typedef 并使用 $bits(field_name_t)
  2. 在您需要 $bits 的范围内声明一个本地自动变量。它可能会被优化掉,但不会在为 $bits 提取类型信息之前。