在 Verilog HDL 中,有多个名称空间,其中两个是全局名称空间,其余的是局部名称空间。
全局名称空间包括定义和文本宏:
定义名称空间(definitions name space)统一了所有module和primitive的定义。一旦一个名称被用于定义module或primitive,该名称就不得再用于声明另一个module或primitive。
文本宏名称空间(text macro name space)也是全局性的,文本宏名称的引入和使用都以 ` 字符为前导。文本宏名称在构成设计单元描述的输入文件集中按出现的线性顺序定义。对于输入文件的其余部分,同一名称的后续定义将覆盖前面的定义。
局部名称空间包括块(block)、模块(module)、生成块(generate block)、端口(port)、指定块(specify block)和属性(attribute)。名称一旦在块名称空间、模块名称空间、端口名称空间、生成块名称空间或指定块名称空间中定义,就不得在该空间中再次定义(类型相同或不同)。
块名称空间由命名块、函数和任务结构体引入。它统一了命名块、函数、任务、参数、命名事件和变量声明类型的定义。变量类型声明包括 reg、integer、time、real 和 realtime 声明。
模块名称空间由module和primitive构造引入。它统一了函数、任务、命名块、模块实例、生成块、参数、命名事件、genvars、网络声明类型和变量声明类型的定义。网络声明类型包括 wire、wor、wand、tri、trior、triand、tri0、tri1、trireg、uwire、supply0 和 supply1。
generate 结构体引入了生成块名称空间。它统一了函数、任务、命名块、模块实例、生成块、局部参数、命名事件、genvars、网络声明类型和变量声明类型的定义。
端口名称空间由模块(module)、基元(primitive)、函数(function)和任务(task)构造引入。它提供了一种在两个不同名称空间中的两个对象之间从结构上定义连接的方法。连接可以是单向的(input或output),也可以是双向的(inout)。端口名称空间与模块和块名称空间重叠。从本质上讲,端口名称空间指定了不同名称空间中名称之间的连接类型。端口类型的声明包括input, output和inout。在端口名称空间中引入的端口名称可以通过声明与端口名称相同的变量或线网在模块名称空间中重新引入。
指定块名称空间则由指定结构体引入。
属性名空间由附加在语言元素上的 (* 和 *) 结构包围。属性名只能在属性名空间中定义和使用,任何其他类型的名称都不能在该名称空间中定义。
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!