Verilog模块顺序

问题描述 投票:2回答:3

门级Verilog文件的语法是否正确,子模块是在自己的模块之后定义还是应该在之前定义?根据Verilog规则,这有什么关系吗?

请教。

verilog
3个回答
2
投票

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

请看 IEEE标准1800-2012更多信息请参见第3.12节。

请注意,在编译之后,还有一个步骤叫做 阐述。 这时,所有的模块描述应该已经被正确编译了。从SystemVerilog LRM。

编译 是读取SystemVerilog源代码,解密加密代码,并分析源代码的语法和语义错误的过程。实现可以一次或多次执行编译。实现可以将编译结果保存在专有的中间格式中,也可以将编译结果直接传递到阐述阶段。并非所有的语法和语义都可以在编译过程中进行检查。有些检查只能在阐述阶段或在完成阐述阶段进行。

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

阐述 是将构成设计的组件绑定在一起的过程。 这些组件可以包括模块实例、程序实例、接口实例、检查器实例、基元实例和设计层次结构的最高层。阐释发生在解析源码之后,仿真之前;它包括扩展实例、计算参数值、解析层次结构名称、建立网状连接,以及总体上为仿真准备设计。


1
投票

简而言之,你可以在Verilog中正向引用模块;这一直都是如此,而且不依赖于工具(换句话说,你可以在 要么 order)。如果你使用库和配置,可能会有一些复杂的情况,但是,一般来说,你可以假设你可以在定义一个模块之前实例化它。

在大多数Verilog中,您必须在引用之前声明一些东西。有一些例外,包括任务和函数调用、隐式线、跨模块hierarchical引用和模块名称。在这些情况下,工具会等到阐述时才会找到引用的对象。遗憾的是,LRM中并没有对其中的很多内容做出明确的解释。这就是Verilog-XL的做法,此后其他人都是这样做的。

注意,这与 "门级 "文件无关。


1
投票

根据Verilog LRM中定义的规则,模块、函数和任务是唯一可以在声明之前被引用的东西。SystemVerilog在这个列表中增加了接口和程序。Verilog也有隐式声明的网,这使得你在声明网之前就引用了它,但我强烈建议不要使用这个功能,使用编译指令 ``default_nettype none.

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