Verilog命名規范參考資料
1. 什么可以被命名?
- 模塊的名稱
- 模塊實例的名稱
- 各種數據類型的名稱
這些名稱我們稱之為標識符,標識符的命名規則不再強調,與C語言類似,字母、數字、下劃線(_)和美元符號($),開頭只能是字母或者下劃線。
2. 命名的方式是怎樣的?
- 模塊的名稱
- 見名知義
- 符合命名規范
- 模塊實例的名稱
通常情況下,可能會多次使用模塊的實例,命名的時候通常類似于:
ff0,ff1,ff2,ff3,ff4…… - 各種數據類型的名稱
沒什么好說的,見名知義,符合命名規范即可
3. 標識符的范圍
就目前的知識結構來說,我對于范圍的理解是這樣的
- 模塊與模塊實例的名稱是全局的,全局的名稱都不能重復
- 數據類型的名稱是局部的,不同的模塊內可以重復,并且對于同一個信號源,不同子模塊內建議使用一樣的命名
- 一個模塊內,所有標識符的名字,都不允許相同
4. 層次命名
先舉一個例子,對于如下層次結構
標識符的層次名為:
- 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?
先不要慌,我們先來解釋一下,為什么要使用層次命名,意義何在?
- 層次命名是為了在訪問設計中的某個標識符的時候,能夠唯一地識別這個標識符。
- 對于具備全局屬性的標識符——模塊和模塊實例的名稱來說,顯然不是使用層次名的原因。
- 對于具備局部屬性,可以在不同子模塊中重復命名的標識符——變量或者信號的名稱來說,在全局設計中,它不具備唯一性,因此訪問的時候可能會出現問題,所以引入了層次名的概念,以便于能夠在全局設計的任意位置中,能夠唯一地訪問這些標識符。
所以
- sti.n1
- sti.n2
這兩個層次名的原因也就得到了解釋,因為n1,n2在全局中是唯一的。