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情况类似,不再赘述。
更多资讯,请关注个人公众号:芯光灿烂