Systemverilog 中的参数传递
Parameter passing in Systemverilog
在以下 Systemverilog 代码片段中:
xxx_model # (.inst_name({inst_name,".ce_0"})) ce_0 (
...
..
);
这部分我看不懂inst_name({inst_name,".ce_0"})
。
请帮助我理解。
来自您的代码片段:
- xxx_model 是一个参数化模块,它采用名为 inst_name.
的字符串类型参数
- 您正在实例化此模块,ce_0 是实例的名称。
- 您正在传递值 {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.
在以下 Systemverilog 代码片段中:
xxx_model # (.inst_name({inst_name,".ce_0"})) ce_0 (
...
..
);
这部分我看不懂inst_name({inst_name,".ce_0"})
。
请帮助我理解。
来自您的代码片段:
- xxx_model 是一个参数化模块,它采用名为 inst_name. 的字符串类型参数
- 您正在实例化此模块,ce_0 是实例的名称。
- 您正在传递值 {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.