RTL基本知識:線網類型知多少
Verilog中常用的線網類型如下表所示:
關鍵詞 |
說明 |
wire |
連線 |
wand |
線與 |
wor |
線或 |
tri |
三態線網 |
triand |
三態線與 |
trior |
三態線或 |
tri0 |
三態下拉線網 |
tri1 |
三態上拉線網 |
trireg |
三態寄存器 |
supply0 |
用於對“地”建模 |
supply1 |
用於對“電源”建模 |
uwire |
連線,用於避免多驅動 |
1 wire和tri
wire和tri功能和使用方法完全一樣,都用來連接電路元件,主要區別可能僅在書寫上不同,同時使用tri可以增加程序的可讀性,表示該線網為有三態功能。當有多個不同值的驅動同時驅動線網時,此時wire和tri聲明的線網為不定態(unknown)。下表為wire和tri在多驅動時的邏輯真值表:
wire/tri |
0 |
1 |
X |
Z |
0 |
0 |
X |
X |
0 |
1 |
X |
1 |
X |
1 |
X |
X |
X |
X |
X |
Z |
0 |
1 |
X |
Z |
2 wand/triand
wand和triand的區別與wire和tri類似。當有過個不同值的驅動同時驅動線網時,此時wand和triand聲明的線網為不定態(unknown)。下表為wand和triand在多驅動時的邏輯真值表:
wand/triand |
0 |
1 |
X |
Z |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
X |
1 |
X |
0 |
X |
X |
X |
Z |
0 |
1 |
X |
Z |
3 wor和trior
wor和trior區別與wire和tri類似。當有過個不同值的驅動同時驅動線網時,此時wor和trior聲明的線網為不定態(unknown)。下表為wor和trior在多驅動時的邏輯真值表:
wor/trior |
0 |
1 |
X |
Z |
0 |
0 |
1 |
X |
0 |
1 |
1 |
1 |
1 |
1 |
X |
X |
1 |
X |
X |
Z |
1 |
X |
Z |
4 tri0和tri1
該類線網當沒有任何驅動時,其值為pulldown或者pullup,即下拉或者上拉,此時的信號強度為Pull(Pu0或者Pu1),且這種強度不用在線網聲明時顯式指出,其模擬的電路結構類似下圖:
下表為tri0和tri1在多驅動時的邏輯真值表:
tri0 |
0 |
1 |
X |
Z |
0 |
0 |
X |
X |
0 |
1 |
X |
1 |
X |
1 |
X |
X |
X |
X |
X |
Z |
0 |
1 |
X |
0 |
tri1 |
0 |
1 |
X |
Z |
0 |
0 |
X |
X |
0 |
1 |
X |
1 |
X |
1 |
X |
X |
X |
X |
X |
Z |
0 |
1 |
X |
1 |
5 supply0和supply1
supply0和supply1用來模擬電路中的電源地,其信號強度為supply(Su)。
6 uwire
當線網聲明為uwire後,該類型的線網約束了該線網只能有一個驅動源,如果連接多於一個驅動時將會報錯。所以uwire類型的線網不能用於雙向端口之類的具有雙向數據流向特征的語句中。
7 trireg
trireg用於存儲數值,其功能類似於寄存器,常用於電容節點的建模.當該線網的驅動源都為高阻態時,線網上現實的狀態為最後一次線網上保存的值 (0,1,x),該線網的缺省態為不定態,這裏需要註意的是該線網的強度只能是small(Sm),medium(Me),large(La)三種,該強度指定一般在線網聲明時進行,默認強度為medium.
仿真結果如下:
源程序如下:
在時刻0,nmos1和nmos2全部打開,強度St1的信號復制給了cap1和cap2,此時cap1和cap2中存儲的值為St1;
在時刻10,nmos1關閉,St1不能驅動到cap1中,此時cap1中的值為最後一次存儲的值1,高電平1的強度為聲明時指定的large1(La1)。因為nmos2是打開,所以cap1和cap2是連通的,此時cap1和cap2的強度都為La1;
在時刻20,nmos1和nmos2全部關閉,此時cap1為聲明時指定的La1,cap2為聲明時指定的Sm1;
在時刻30,nmos2打開,cap1和cap2連通,此時cap1和cap2的強度都為La1;
時刻40情況與時刻30情況類似,不再贅述。
更多資訊,請關註個人公眾號:芯光燦爛
RTL基本知識:線網類型知多少