VHDL:为什么不'Z'='X'

时间:2017-01-17 20:50:03

标签: signals vhdl logical-operators

在VHDL中,为什么:

NOT 'Z' = 'X' 

其中Z为高阻抗且X未知(参见下面的std_logic信号类型)。

上下文:这仅适用于VHDL。我得到了一个考试问题,其中一个'Z'信号是通过一个逆变器发出的,这就产生了'X'。我不明白为什么会这样,为什么答案根本就不是'Z'。

'U': uninitialized. (signal hasn't been set yet)
'X': unknown (impossible to determine this value/result)
'0': logic 0
'1': logic 1
'Z': High Impedance (signal source when that source makes no effective contribution to the resolved value of the signal)
'W': Weak unknown signal (can't tell if it should be 0 or 1)
'L': Weak signal that should probably go to 0
'H': Weak signal that should probably go to 1
'-': Don't care 

1 个答案:

答案 0 :(得分:3)

(我本来是这个评论,但我不能)在你所说的内容中,如果逆变器(或任何组件)的输入是'Z'(驱动高阻抗),您对输出的期望是什么?结果必须属于std_logic信号的定义值集。

如果没有对变频器的输入驱动值(即,只有一个信号驱动输入,并且它是'Z'),模拟器将无法解析输入值,从而导致未知输出('X')。

修改

正如user1155120在链接的文档中指出的那样,行为是由于std_logic_1164-body中声明的“not_table”而发生的,该状态指出了以下映射:

-- truth table for "not" function
  constant not_table : stdlogic_1d :=
    --  -------------------------------------------------
    --  |   U    X    0    1    Z    W    L    H    -   |
    --  -------------------------------------------------
          ('U', 'X', '1', '0', 'X', 'X', '1', '0', 'X');