微信公众号:FPGA动力联盟
博主微信号:fpga_start
微信公众号原文链接:理解Verilog的四值逻辑
在《数字电路》或《数字电子技术》教材里,通常说数字电路的理论基础是“二值(0或1)”逻辑的布尔代数。但是我们在学习verilog时,接触的都是“四值”逻辑,分别为:
-
0:逻辑低电平,条件为假
-
1:逻辑高电平,条件为真
-
z:高阻态,浮动
-
x:未知逻辑电平
值“0”和“1”不难理解。如下图1所示为5V的TTL电平,当输出电压高于VOH时,认为输出是逻辑值“1”;当输出电压低于VOL时,认为输出为逻辑值“0”;当输入电压高于VIH时,认为输入是逻辑值“1”;当输入电压低于VIL时,认为输入为逻辑值“0”;
图1:TTL电平及逻辑值判断
那么这些“V”的高低之间的区域算什么呢?在真实电路之中,这些区域的电平既可能被认为是“0”,也可能被认为是“1”,也就是不确定值。
在verilog语言的仿真里,不存在这种模棱两可的东西,于是“x”这个第三者出现了,标记信号为未知状态。
未知逻辑电平“x”出现主要有两种可能。第一个就是触发器不满足时钟采样的时序要求,时钟沿采集到信号的边沿;另一个就是信号未被“赋初值”。
未知逻辑电平“x”只在电路仿真中存在,但是高阻态“z”却是在电路系统中真实存在的一种电平状态。
高阻态是数字电路里常见的术语,指的是电路的一种输出状态,它既不是高电平,也不是低电平。
如果高阻态输出到下一级电路,则对下级电路无任何影响,和没接一样。此时我们如果用万用表测量高阻态输出的电压时,既可能是高也可能是低电平,由它后面接的电路而定。
进行电路分析时,高阻态可当做开路处理。我们可以把它看做输入/输出电阻非常大,极限状态就是悬空(开路)。也就是说,理论上高阻态不是悬空,它是对地或电源电阻极大的状态。而在实际应用中,它与管脚悬空几乎是一样的。
举个例子:当门电路的输出上拉晶体管导通而下拉晶体管截止时,输出为高电平。反之,上拉晶体管截止而下拉晶体管导通就是低电平。但是当上拉和下拉晶体管都截止时,输出端就相当于悬空(没有电流流动),其电平随外部电平高低而定,即该门电路放弃对输出端电路的控制。
输出高阻态可以利用名字叫“三态门”的器件实现,其符号和真值表如下图2所示:
图2:三态门电气符号与真值表
高阻一般都会在输入/输出管脚处使用,例如FPGA的IOBUF就包含一个典型的三态门,如下图3所示:
图3:FPGA的IOBUF
今天的博文就到这里了,有问题请给博主公众号留言,谢谢!