System verilog 传入Systemverilog的参数

System verilog 传入Systemverilog的参数,system-verilog,System Verilog,在以下Systemverilog代码段中: xxx_model # (.inst_name({inst_name,".ce_0"})) ce_0 ( ... .. ); 我无法理解这部分inst\u name({inst\u name,.ce\u 0})。 请帮助我理解。从您的代码片段: xxx_model # (.inst_name({inst_name,".ce_0"})) ce_0 ( ... .. ); xxx_模型是一个参数化模块,它采用名为inst_name的字符串类

在以下Systemverilog代码段中:

xxx_model #    (.inst_name({inst_name,".ce_0"})) ce_0 (
...
..
);
我无法理解这部分
inst\u name({inst\u name,.ce\u 0})

请帮助我理解。

从您的代码片段:

xxx_model #    (.inst_name({inst_name,".ce_0"})) ce_0 (
...
..
);
  • xxx_模型是一个参数化模块,它采用名为inst_name的字符串类型参数
  • 您正在实例化此模块,ce\u 0是实例的名称
  • 您正在传递值{inst_name,.ce_0”}作为参数的值
  • 在本文中,Systemverilog将花括号解释为连接运算符此行中的inst_name可能是从上层传递的参数。对于inst_name的值,请查找封装模块的实例化(模块层次结构中向上一步的模块)

    由于此处以嵌套/递归方式使用inst_name,因此代码段中的模式似乎表明,您的代码可能将inst_name作为层次结构中所有模块的参数。其目的是将实例的层次名称作为字符串参数进行反射


    使用此递归参数传递方案,如果您的模块层次结构是foo->bar->frop->zoo,则层次结构zoo中最下面的实例中的参数inst\u name将具有值{inst\u name,.zoo}。在这里,从上面传递的inst\u name将递归地计算为“foo.bar.frop**,因此实例化中inst\u name的值将是foo.bar.frop.zoo

    我可以准确地声明如下inst\u name=“foo.bar.frop”?或inst\u name=“foo.bar.frop”**";你不想那样做。使用参数的想法是使代码通用,以便相同的参数化模块也可以在其他层次结构中使用。