什么是目的std_logic
枚举类型?
'U': uninitialized. This signal hasn't been set yet.
'X': unknown. Impossible to determine this value/result.
'0': logic 0
'1': logic 1
'Z': High Impedance
'W': Weak 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.
STD_LOGIC基本上是一个单一的导线或位。 你可以对他们使用逻辑运算符(与,或,异或等)。 当模拟设计,我相信我只看到“X”,“0”或“1”。 显然,你想“0”或“1”。 一个“X”表示的值是未知的(可能没有连接到任何或有毛刺的信号)。 另外,std_logic_vector可用于需要多于1个比特宽的信号。 我不知道这是否回答您的问题...
所述std_logic
类型是由IEEE-1164标准为单个线或位的精确代表介绍。 VHDL语言本身并没有提供一个单比特类型,它是强大到足以代表“真实”的逻辑。 即,为了表示在现代可编程逻辑器件modelable和可合成逻辑的所有可能的状态。
早在VHDL的历史,不同的开发人员基本上是创作自己的版本std_logic
出来,需要代表真实世界的信号。 IEEE-1164在努力提高的由不同的开发对于不同的体系结构编写的代码的互操作性引入该标准化逻辑类型。
维基百科的文章为标准提供了一个简洁的描述:
http://en.wikipedia.org/wiki/IEEE_1164
除了已经提供的答案,我认为这是值得一提的是STD_LOGIC所谓的解析式,这意味着有一个优先信号。 例如,1和0具有较高优先级,以H或L因此,如果一个信号是具有L驱动并且同时如图1所示,输出将是高(逻辑1),因为1具有比L.更高的优先级
碰巧的是,为了您列出的值,你的问题是优先的顺序,一个需要注意的是,有些值具有相同的优先级,因此,如果你有这两个信号,促使他们没有明确的“赢家”所以结果是下一个‘未知’状态(‘X’或‘W’)向上的层次结构中,一个简单的例子是,如果一个信号与一个‘H’和一个‘L’驱动,其结果将是“ W”。
对于STD_LOGIC分辨率表看起来是这样的:
-- ---------------------------------------------------------
-- | U X 0 1 Z W L H - | |
-- ---------------------------------------------------------
( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |
( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |
( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - |
std_logic
的分辨率功能
不仅std_logic
有更多有用的状态,除了1
和0
,它也有一个定义分辨率功能。
分辨率功能是VHDL语言的概念。 它是被关联到一个类型的函数,并且它确定当类型的多个值被应用到单个信号会发生什么。 语法是:
SUBTYPE std_logic IS resolved std_ulogic;
其中std_ulogic
是未解决的(并因此更是有用的)版本std_logic
。
具体而言,这意味着好东西就像0
和1
导致X
:
library ieee;
use ieee.std_logic_1164.all;
entity std_logic_tb is
end std_logic_tb;
architecture behav of std_logic_tb is
signal s0 : std_logic;
begin
s0 <= '0';
s0 <= '1';
process
begin
wait for 1 ns;
assert s0 = 'X';
wait;
end process;
end behav;
这使得直观的感觉,因为我们了解X
是,其中多个不兼容的值被应用到单个导线的状态。
std_logic
也知道如何根据存在于一个LRM表解决所有其他可能的一对输入信号。
bit
在另一方面,没有解析功能,并且如果我们用它在上面的例子中,它会导致模拟误差在0.34 GHDL。
可能的值std_logic
是一个很好的选择,因为它们是由标准IEEE 1164和处理许多常见的使用情况。
我观察到在Xilinx公司的模拟器ISIM此行为:
- “U” - 是不明确将其默认值设置所有信号的默认状态。 我建议设置为每个信号的默认值。
- “X” - 当信号由两个或多个驱动器具有不同值的驱动被分配
- “Z” - 是明确高Z状态。 请记住,这只能在硬件中实现与支持三态元素。 我建议使用此仅用于IO引脚,因为这些资源是在面料罕见。
- “0”和“1”是正常的状态。
- 我从来没有见过任何其他国家,我不希望他们申请的FPGA。
这是不可能的审查ISIM变量,但我认为适用同样的规则。