首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog模块顺序

Verilog模块顺序
EN

Stack Overflow用户
提问于 2014-05-03 04:01:05
回答 3查看 2K关注 0票数 2

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

致以敬意,

EN

回答 3

Stack Overflow用户

发布于 2014-05-03 04:21:53

这可能依赖于编译器,但如果您使用的是支持SystemVerilog的工具(目前大多数商业工具都支持),则以任何顺序定义模块在语法上应该是正确的,甚至可以在单独的文件中定义。

有关更多信息,请参阅IEEE Std 1800-2012,第3.12节。

请注意,在编译之后,还有另一个步骤,称为精化。在这一点上,所有的模块描述应该已经被正确编译。从SystemVerilog LRM:

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

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

细化是将构成设计的组件绑定在一起的过程。这些组件可以包括模块实例、程序实例、接口实例、检查器实例、原语实例以及设计层次结构的顶层。细化发生在解析源代码之后和模拟之前;它涉及扩展实例、计算参数值、解析分层名称、建立网络连接以及总体上准备用于模拟的设计。

票数 2
EN

Stack Overflow用户

发布于 2014-05-04 05:39:35

简而言之,您可以在Verilog中向前引用模块;这种情况一直都是这样,并且不依赖于工具(换句话说,您可以按任何一种顺序执行)。如果您使用库和配置,可能会有一些复杂的情况,但通常,您可以假设您可以在定义模块之前将其实例化。

在大多数Verilog中,你必须在引用之前声明一些东西。也有一些例外,包括任务和函数调用、隐式连接、跨模块/分层引用和模块名称。在这些情况下,该工具等待直到精化才能找到被引用的对象。不幸的是,在LRM中没有对这一点做出明确的解释。这就是Verilog-XL是如何做到这一点的,从那以后,每个人都这样做了。

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

票数 1
EN

Stack Overflow用户

发布于 2014-05-04 10:04:14

根据Verilog LRM中定义的规则,模块、函数和任务是在声明之前唯一可以引用的东西。SystemVerilog将接口和程序添加到该列表中。Verilog还隐式声明了net,这使您在声明net之前看起来像是在引用它,但我强烈建议不要使用compile指令``default_nettype none来使用该功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23436038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档