Systemverilog 中的参数传递

Parameter passing in Systemverilog

在以下 Systemverilog 代码片段中:

xxx_model #    (.inst_name({inst_name,".ce_0"})) ce_0 (
...
..
);

这部分我看不懂inst_name({inst_name,".ce_0"})。 请帮助我理解。

来自您的代码片段:

  1. xxx_model 是一个参数化模块,它采用名为 inst_name.
  2. 的字符串类型参数
  3. 您正在实例化此模块,ce_0 是实例的名称。
  4. 您正在传递值 {inst_name,".ce_0"} 作为参数的值。

在此上下文中,Systemverilog 会将花括号解释为连接运算符。此行中的 inst_name 可能是从上层传递的参数。对于 inst_name 的值,请查找封装模块(模块层次结构中向上一级的模块)的实例化。

由于 inst_name 在这里以 nested/recursive 的方式使用,代码片段中的模式似乎表明您的代码可能有 inst_name 作为层次结构中所有模块的参数。目的是让实例的层次名称的反射可用作字符串参数。

使用这种递归参数传递方案,如果你的模块层次结构是foo->bar->frop->zoo,参数inst_name在最底层层次结构 zoo 中的实例将具有值 {inst_name、“.zoo”}。这里从上面传递的 inst_name 将递归计算为“foo.bar.frop**,因此 inst_name 的值 在实例化中将是 foo.bar.frop.zoo.