以不同模块类型命名的 Verilog 模块实例

问题描述 投票:0回答:1

我对 Verilog 有点陌生,并且继承了别人创建的项目。它使用了我不理解其意图的模块实例化技术。基本上创建了两种不同的模块类型。在其中一个模块实例化中,另一种类型的名称用作实例名称。我将提供一个简化的代码示例:

module bidirectional_filter #(
    parameter SIZE = 4,
    parameter MAX = 5'd10 //min 2, max 32!
)(
    input wire clk,
    input wire res,
    input wire sync, // sync period
    input wire [(SIZE-1):0]in,
    output reg [(SIZE-1):0]out
);
    // do bidirectional filter stuff
endmodule

module unidirectional_filter #(
    parameter SIZE = 4,
    parameter MAX = 5'd10 //min 2, max 32!
)(
    input wire clk,
    input wire res,
    input wire sync, // sync period
    input wire [(SIZE-1):0]in,
    output reg [(SIZE-1):0]out
);
    // do unidirectional filter stuff
endmodule

module m_top #(
    parameter IN_FREQ_HZ = 25000000
)(
    // IO list
);
    // do stuff
    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] )
    );
    // do stuff
endmodule

它会实例化双向过滤器或单向过滤器模块吗?我的直觉告诉我,它只会实例化一个名为“uni Direction_filter”的双向过滤器。

verilog
1个回答
0
投票

模块定义名称和实例名称存在于两个不同的名称空间中。重复使用相同的标识符时不会发生冲突(请参阅 IEEE 1800 SystemVerilog LEM 中的第 3.13 节)。

虽然这是允许的,但我想说,使用与实例名称相同的模块名称是一种非常糟糕的做法。

在没有看到更多代码的情况下,我只能猜测他们为什么想这样做。也许他们的脚本依赖于查看

unidirectional_filter
实例名称,而不管使用哪个模块。

© www.soinside.com 2019 - 2024. All rights reserved.