我研究了IEEE如何定义其库。当我打开stdlogic library时,我看到一些被定义为常数的真值表。我不知道真值表是如何运作的。请解释如何使用真值表返回结果。这是我发现的" AND"门:
TYPE stdlogic_table IS ARRAY(std_ulogic, std_ulogic) OF std_ulogic;
-- truth table for "and" function
CONSTANT and_table : stdlogic_table := (
-- ----------------------------------------------------
-- | U X 0 1 Z W L H - | |
-- ----------------------------------------------------
( 'U', 'U', '0', 'U', 'U', 'U', '0', 'U', 'U' ), -- | U |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), -- | X |
( '0', '0', '0', '0', '0', '0', '0', '0', '0' ), -- | 0 |
( 'U', 'X', '0', '1', 'X', 'X', '0', '1', 'X' ), -- | 1 |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), -- | Z |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), -- | W |
( '0', '0', '0', '0', '0', '0', '0', '0', '0' ), -- | L |
( 'U', 'X', '0', '1', 'X', 'X', '0', '1', 'X' ), -- | H |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ) -- | - |
);
FUNCTION "and" ( l : std_ulogic; r : std_ulogic ) RETURN UX01 IS
BEGIN
RETURN (and_table(l, r));
END "and";
" UX01"定义为
SUBTYPE UX01 IS resolved std_ulogic RANGE 'U' TO 'Z';
我不知道关键词"如何解决"用来。 "解析"被定义为库中的函数
FUNCTION resolved (s: std_ulogic_vector) RETURN std_ulogic;
我用谷歌搜索真相表的功能一段时间,但没有运气找到解释。请解释表格如何评估输入。非常感谢
答案 0 :(得分:2)
AND表充满你显示的声明是一个二维数组,由std_ulogic(枚举)值索引。 AND函数有一个左右参数(l和r),用于索引表中的结果。
该表显示为2D数组,使其可供用户读取,列注释枚举值索引和行注释枚举值索引的交集表示逻辑AND操作的结果。
分辨率函数有点复杂,涉及标准或各种解释性文本的高级阅读。
分辨率功能用于解析'信号上有多个驱动程序。各种驱动程序值被组织为一个长度等于驱动程序数量的向量,其中第一个驱动程序值被解析后#39;针对默认驱动程序(在这种情况下,请参阅std_logic_1164的包体,result
的默认值为' Z'),每个连续的驱动程序通过解析表查找累积的{{ 1}}。
目的是确定已解决的'具有多个驱动器的信号的信号值,在这种情况下使用MVL9(具有9级的多级逻辑)作为IEEE标准(IEEE Std 1164,现在是VHDL标准的一部分。它是该语言的一部分(和不像Guy Sirton表示只是一个电气工程问题。)
在详细说明期间设置分辨率,它是模拟的功能。
驱动相同信号的任何两个并发语句都需要解析。即使只有一个驱动程序也会出现分辨率(违反此默认值' Z')。如果您不使用已解决的类型,则会收到错误消息。如果你使用已解决的类型,你将获得一个分辨率值,并且不会被保护以防止多个驱动程序连接到相同的信号,或许你不应该这样做。
<强>附录强>
还有一个问题。要浏览2D数组,我想我们会使用 数组索引。像(1,2)=第1行,第2列。使用和_table(U,1)如何 匹配第1行,第4列或第1列第4行? - Hong Pan 1小时前
问题和答案格式没有针对&#39;另外一个问题进行设置。
索引是std_ulogic类型,而不是数字类型。枚举类型具有可以表示为数字类型的位置值。对于std_ulogic枚举值,第一个值是&#39; U&#39;接下来是&#39; X&#39;,...到&#39; - &#39;。要查找std_ulogic位置值,您可以使用&#39; POS属性,其中result
将返回std_ulogic'POS(l)
的索引位置值。您可以使用&#39; VAL属性将表示位置值的通用整数转换为std_ulogic值。
约定使用索引值l
和l
来表示预定义二元运算符的左右操作数。 r
提供了两个索引l AND r
和l
。
r
您不允许使用接口列表FUNCTION "and" ( l : std_ulogic; r : std_ulogic ) RETURN UX01 IS
BEGIN
RETURN (and_table(l, r));
END "and";
指定预定义的运算符。 AND(l,r)
是第二个维度,指定行,而l
指定列。并且在这些情况下并不重要,表格切换两个索引的工作方式相同。
请注意,返回值是std_ulogic的子类型(UX01),并且只能在表中找到这四个值。
所有这一切都可以由知识渊博的VHDL用户从您在示例中提供的信息中辨别出来。它说明需要一个关于语言或访问标准的良好文本(IEEE Std 1076-2008),其中可以找到所有答案。