VHDL:ieee std_logic库中的真值表

时间:2014-07-20 23:57:08

标签: vhdl

我研究了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;

我用谷歌搜索真相表的功能一段时间,但没有运气找到解释。请解释表格如何评估输入。非常感谢

1 个答案:

答案 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值。

约定使用索引值ll来表示预定义二元运算符的左右操作数r提供了两个索引l AND rl

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),其中可以找到所有答案。