Verilog模块订单

时间:2014-05-02 20:01:05

标签: verilog

门级Verilog文件的语法是否正确,其中子模块是在拥有模块之后定义的,还是应该在之前定义?根据Verilog规则是否重要?

此致

3 个答案:

答案 0 :(得分:2)

正如工具提到的那样,这可能是编译器依赖的,但是如果你使用的是支持SystemVerilog的工具(现在大多数商业工具都会这样做),那么在任何顺序定义模块,甚至在单独的文件中,都应该在语法上正确。

有关详情,请参阅IEEE Std 1800-2012,第3.12节。

请注意,在编译之后,还有另一个名为详细说明的步骤。此时所有模块描述都应该已正确编译。来自SystemVerilog LRM:

  

编译是读取SystemVerilog源代码,解密加密代码以及分析源代码以获取语法的过程   和语义错误。实现可以在一个或中执行编译   更多传球。实现可以将编译结果保存在   专有中间格式,或者可以通过编译结果   直接进入精化阶段。并非所有语法和语义都可以   在编译过程中检查。有些检查只能进行   在完成细化期间或完成时。

     

SystemVerilog支持单文件和多文件编译   通过使用编译单元(见3.12.1)。

     

精化是   将构成设计的组件绑定在一起的过程。   这些组件可以包括模块实例,程序实例,   接口实例,检查器实例,原始实例和   设计层次结构的顶层。解析后进行详细说明   源代码和模拟前;它涉及扩大   实例化,计算参数值,解析分层   名称,建立网络连接和一般准备   模拟设计。

答案 1 :(得分:1)

简短的回答是你可以在Verilog中转发模块;这一直是这种情况,并且不依赖于工具(换句话说,您可以 顺序执行)。如果使用库和配置可能会有复杂性,但通常,您可以假设您可以在定义模块之前对其进行实例化。

在Verilog的大部分内容中,您必须在引用之前声明一些内容。有一些例外,包括任务和函数调用,隐式连线,跨模块/分层引用和模块名称。在这些情况下,该工具会一直等到详细说明以找到引用的对象。遗憾的是,在LRM中没有明确的解释。这就是Verilog-XL的做法,从那以后其他所有人都做到了。

请注意,这与“门级”文件无关。

答案 2 :(得分:1)

根据Verilog LRM中定义的规则,模块,函数和任务是在声明之前可以引用的唯一内容。 SystemVerilog将接口和程序添加到该列表中。 Verilog还隐式声明了网络,使得它似乎在声明之前引用了网络,但我强烈建议不要使用编译指令``default_nettype none来使用该功能。