【Verilog HDL】命名的规则研究

Verilog命名规范参考资料

1. 什么可以被命名?

  • 模块的名称
  • 模块实例的名称
  • 各种数据类型的名称

这些名称我们称之为标识符,标识符的命名规则不再强调,与C语言类似,字母、数字、下划线(_)和美元符号($),开头只能是字母或者下划线。

2. 命名的方式是怎样的?

  • 模块的名称
    • 见名知义
    • 符合命名规范
  • 模块实例的名称
    通常情况下,可能会多次使用模块的实例,命名的时候通常类似于:
    ff0,ff1,ff2,ff3,ff4……
  • 各种数据类型的名称
    没什么好说的,见名知义,符合命名规范即可

3. 标识符的范围

就目前的知识结构来说,我对于范围的理解是这样的

  • 模块与模块实例的名称是全局的,全局的名称都不能重复
  • 数据类型的名称是局部的,不同的模块内可以重复,并且对于同一个信号源,不同子模块内建议使用一样的命名
  • 一个模块内,所有标识符的名字,都不允许相同

4. 层次命名

先举一个例子,对于如下层次结构

根层 sti
m1 模块SR_latch的实例
变量q,qbar,set,reset
n1 模块nand的实例
n2 模块nand的实例
信号 Q,Qbar,S,R

标识符的层次名为:

  • sti
    • sti.q
    • sti.qbar
    • sti.set
    • sti.reset
    • sti.m1
      • sti.m1. Q
      • sti.m1.Qbar
      • sti.m1.S
      • sti.m1.R
    • sti.n1
    • sti.n2

其实就最后两个看起来比较特别,并且是令人费解的,按理说不应该是

  • sti.m1.n1
  • sti.m1.n2

不应该是这样才对嘛?为什么没有m1?

先不要慌,我们先来解释一下,为什么要使用层次命名,意义何在?

  1. 层次命名是为了在访问设计中的某个标识符的时候,能够唯一地识别这个标识符
  2. 对于具备全局属性的标识符——模块和模块实例的名称来说,显然不是使用层次名的原因。
  3. 对于具备局部属性,可以在不同子模块中重复命名的标识符——变量或者信号的名称来说,在全局设计中,它不具备唯一性,因此访问的时候可能会出现问题,所以引入了层次名的概念,以便于能够在全局设计的任意位置中,能够唯一地访问这些标识符

所以

  • sti.n1
  • sti.n2

这两个层次名的原因也就得到了解释,因为n1,n2在全局中是唯一的

发布了21 篇原创文章 · 获赞 6 · 访问量 3027

猜你喜欢

转载自blog.csdn.net/weixin_42929607/article/details/104381232