Verilog模块实例化疑问:用其他模块名做实例名时实际实例化哪个模块?
Verilog模块实例化:模块名与实例名混淆的语法解析
你遇到的代码里,实际会实例化bidirectional_filter模块,你的直觉完全正确——这是一个名为unidirectional_filter的bidirectional_filter模块实例。
语法核心逻辑
Verilog模块实例化的固定语法结构是:
<模块类型名> #(参数配置) <实例标识符> (端口映射);
- 第一个位置的
bidirectional_filter是要实例化的模块类型,直接决定了这个实例的功能逻辑; - 中间的参数列表是给该模块类型传递的定制化参数;
- 后面的
unidirectional_filter只是这个实例的唯一标识符(实例名),仅用于在设计中区分不同实例,和模块本身的功能、类型无关联。
对应代码解析
你提供的顶层模块m_top中的实例化语句:
bidirectional_filter #( .SIZE( 17 ), .MAX( 2000 / 100 ) ) unidirectional_filter ( .clk( clk ), .res( res ), .sync( test_error_sync ), .in( xcheck_filter_in[17 -1:0] ), .out( xcheck_error_filtered[17 -1:0] ) );
完全匹配上述语法规则:
- 模块类型为
bidirectional_filter,因此该实例的逻辑是双向滤波器的功能; - 实例名使用了另一个模块的名称
unidirectional_filter,这只是一种容易引发混淆的不规范命名选择,不会改变模块的实际类型和功能。
内容的提问来源于stack exchange,提问作者katrik
相关产品推荐
相关产品推荐

