前面咱们多次提到了网络(net)信号类型,但网络(net)类型到底具体包含哪些类型呢?下面我们就拿表1具体说明一下。
表1:网络(net)类型汇总
网络(net)信号类型共包含以上列出的12种类型,其中我们最常用的就只是wire类型了。但我们还是具体看看每个类型吧~
-wire and tri 网络
wire和 tri 用于连接各个基本单元。wire 和 tri 类型的语法和功能完全相同,verilog标准提供这两个名称是为了区分在不同模型中的用途。wire类型可用于由单门或连续赋值驱动的网络,tri类型可用于由多个驱动器驱动的网络。
一个wire或一个tri网络中的多个相同强度信号源产生的逻辑冲突会导致 x(未知)值。假定两个驱动器的强度相同,下表2列出的真值表用于解决wire和tri的多重驱动问题。
表2:wire和tri网络的真值表
- Wired 网络
Wired 网络类型有 wor、wand、trior 和 triand这4种,用于模拟有线逻辑配置。Wired 网络使用不同的真值表来解决多个驱动器驱动同一网络时产生的冲突。wor 和 trior 创建有线或配置,以便当任何一个驱动器为 1 时,网络的结果值为 1。Wand和Triand创建有线和配置,以便当任何驱动器为0时,网络的值为0。
网络类型 wor 和 trior 的语法和功能应完全相同。网络类型 wand 和 triand 的语法和功能应完全相同。同样,表3和表4给出了Wired nets的真值表,假定两个驱动器的强度相同。
表3:wor和trior网络的真值表
表4:wand 和 triand网络的真值表
- Trireg 网络
Trireg网络类型存储一个值,用于模拟电荷存储节点。Trireg可以处于两种状态之一:
1,驱动状态
当Trireg网络的至少一个驱动器的值为 1、0 或 x 时,该值传播到Trireg网络,成为Trireg网络的驱动值。
2,电容状态
当Trireg网络的所有驱动器都处于高阻抗值(z)时,Trireg网络保留其最后的驱动值,也就是说高阻抗值不会从驱动器传播到Trireg网络。
电容状态下的Trireg网络强度可以是small, medium, 或者 large,具体取决于Trireg网络声明中指定的强度大小。Trireg网络在驱动状态下的强度可以是supply, strong, pull, 或weak,具体取决于驱动器的强度。
下图1显示了一个原理图,其中包括一个medium强度的Trireg网络、其驱动器和模拟结果。
图1:Trireg网络及其驱动器的模拟值
a) 在模拟时间0时,信号wire a和信号wire b的值均为1。1值以很强的强度通过信号wire c 和2个nmos 开关传播到Trireg网络d。
b) 模拟时间10时,信号wire a的值变为0,断开信号wire c与和门的连接。当信号wire c不再与和门连接时,信号wire c 的值变为 HiZ。信号wire b的值仍为1,因此信号wire c仍通过nmos2开关与Trireg网络d相连。HiZ 值不会从信号wire c 传播到Trireg网络d。相反,Trireg网络d 进入电容状态,以medium强度存储其最后驱动值 1。
电容网络是两个或两个以上Trireg网络之间的连接。在Trireg网络处于电容状态的电容网络中,逻辑值和强度值可在Trireg网络之间传播。下图2显示了一个电容网络,其中一些Trireg网络节点的逻辑值会改变其他大小相同或更小的Trireg网络节点的逻辑值。
图2:Trireg电容网络的模拟结果
在图2中,trireg_la 网络的电容强度较大,trireg_me1 和 trireg_me2 中等,trireg_sm 较小。模拟仿真的时序结果描述如下:
a) 在模拟时间0时,信号wire a和信号wire b的值为1。信号wire c将1的值注入trireg_la和trireg_sm;信号wire d 将1的值注入trireg_me1 和trireg_me2。
b) 在模拟时间10时,信号wire b的值变为0,使trireg_sm和trireg_me2与它们的驱动器断开。这些trireg网络进入电容状态,并存储其最后驱动值1。
c) 在模拟时间20时,信号wire c驱动trireg_la 的值为0。
d) 在模拟时间30时,信号wire d向trireg_me1驱动一个0值。
e) 在模拟时间40时,信号wire a的值变为0,使 trireg_la和 trireg_me1与它们的驱动器断开。这些trireg网络进入电容状态并存储 0 值。
f) 在模拟时间50,信号wire b的值变为1。b线的值变化将 trireg_sm与trireg_la连接起来;这些trireg网络的大小不同,存储的值也不同。这种连接使较小的trireg网络存储较大trireg网络的值,而trireg_sm现在存储的值为0。信号wire b中值的变化也将 trireg_me1与 trireg_me2连接起来;这些trireg网络的大小相同,但存储的值不同。该连接使 trireg_me1和trireg_me2的值都变为x 。
在电容网络中,电荷强度从较大的trireg网络传播到较小的trireg网络。图3显示了一个电容网络及其模拟结果。
图3:Trireg电容网络的电荷共享的模拟结果
在图3 中,trireg_la 的电容强度较大,而 trireg_sm 的电容强度较小。模拟结果说明如下:
a) 在模拟时间 0 时,信号wire a、信号wire b 和信号wire c 的值均为 1,信号wire a 驱动一个强 1 进入 trireg_la 和 trireg_sm。
b) 在模拟时间 10 时,信号wire b 的值变为 0,断开了 trireg_la 和 trireg_sm 与信号wire a 的连接。由于trireg _la 和trireg _sm 通过 tranif1_2 保持连接,因此两个trireg共享trireg_la 的大电荷。
c) 在模拟时间 20 时,信号wire c 的值变为 0,从而断开 trireg_sm 与 trireg_la 的连接。trireg_sm 不再共享 trireg_la 的大量电荷,而是存储少量电荷。
d) 模拟时间 30 时,信号wire c 的值变为 1,将两个trireg连接起来。这些trireg现在共享相同的电荷。
e) 模拟时间 40 时,信号wire c 的值再次变为 0,断开 trireg_sm 与 trireg_la 的连接。trireg_sm 再次不再共享 trireg_la 的大电荷,而是存储小电荷。
Trireg网络可以无限期地保持其电荷,也可以随着时间的推移而衰减电荷。电荷衰减的模拟时间已在verilog标准的trireg网络延迟部分内容中指定。
-tri0 and tri1 网络
tri0 和 tri1 网络模拟带有电阻下拉(pulldown)和电阻上拉(pullup)的器件单元。tri0 网相当于拉力强度(pull strength)持续为 0 的wire网络。tri1 网相当于拉力强度(pull strength)连续为 1 的wire网络。
当没有驱动单元驱动tri0网络时,其值为0。当没有驱动单元驱动tri1网络时,其值为1。当 tri0 或 tri1 网络上有驱动单元时,驱动单元与网络上隐含的拉力强度值相结合,确定网络的值。
表5和表6是在tri0和tri1网络上模拟强度为强拉的多个驱动因素的真值表。
表5:tri0网络真值表
表6:tri1网络真值表
- uwire网络
当网络声明为uwire后,则约束了该网络只能有一个驱动源,用于对只允许单驱动的网络进行建模,如果连接多于一个驱动时将会报错。将 uwire 网络的任何位连接到一个以上的驱动器都是错误的,将uwire网络连接到双向传递开关的双向终端是也错误的。
- supply 网络
supply0和supply1 网络可用于为电路中的电源建模,且这些网络应具有电源强度。
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!