• VHDL之std_logic_1164


    This packages defines a standard for designers to use in describing the interconnection data types used in vhdl modeling.

    1  std_logic_1164

      1 PACKAGE std_logic_1164 IS
      2 
      3     -------------------------------------------------------------------    
      4     -- logic state system  (unresolved)
      5     -------------------------------------------------------------------    
      6     TYPE std_ulogic IS ( 'U',  -- Uninitialized
      7                          'X',  -- Forcing  Unknown
      8                          '0',  -- Forcing  0
      9                          '1',  -- Forcing  1
     10                          'Z',  -- High Impedance   
     11                          'W',  -- Weak     Unknown
     12                          'L',  -- Weak     0       
     13                          'H',  -- Weak     1       
     14                          '-'   -- Don't care
     15                        );
     16     --------------------------------------------------------------------------    
     17     -- unconstrained array of std_ulogic for use with the resolution function
     18     --------------------------------------------------------------------------    
     19     TYPE std_ulogic_vector IS ARRAY ( NATURAL RANGE <> ) OF std_ulogic;
     20                                     
     21     -------------------------------------------------------------------    
     22     -- resolution function
     23     -------------------------------------------------------------------    
     24     FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic;
     25     
     26     -------------------------------------------------------------------    
     27     -- *** industry standard logic type ***
     28     -------------------------------------------------------------------    
     29     SUBTYPE std_logic IS resolved std_ulogic;
     30 
     31     -----------------------------------------------------------------------    
     32     -- unconstrained array of std_logic for use in declaring signal arrays
     33     -----------------------------------------------------------------------    
     34     TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <>) OF std_logic;
     35 
     36     -----------------------------------------------------------------------------    
     37     -- common subtypes
     38     -----------------------------------------------------------------------------    
     39     SUBTYPE X01     IS resolved std_ulogic RANGE 'X' TO '1'; -- ('X','0','1') 
     40     SUBTYPE X01Z    IS resolved std_ulogic RANGE 'X' TO 'Z'; -- ('X','0','1','Z') 
     41     SUBTYPE UX01    IS resolved std_ulogic RANGE 'U' TO '1'; -- ('U','X','0','1') 
     42     SUBTYPE UX01Z   IS resolved std_ulogic RANGE 'U' TO 'Z'; -- ('U','X','0','1','Z') 
     43 
     44     -------------------------------------------------------------------    
     45     -- overloaded logical operators
     46     -------------------------------------------------------------------    
     47 
     48     FUNCTION "and"  ( l : std_ulogic; r : std_ulogic ) RETURN UX01;
     49     FUNCTION "nand" ( l : std_ulogic; r : std_ulogic ) RETURN UX01;
     50     FUNCTION "or"   ( l : std_ulogic; r : std_ulogic ) RETURN UX01;
     51     FUNCTION "nor"  ( l : std_ulogic; r : std_ulogic ) RETURN UX01;
     52     FUNCTION "xor"  ( l : std_ulogic; r : std_ulogic ) RETURN UX01;
     53     function "xnor" ( l : std_ulogic; r : std_ulogic ) return ux01;
     54     FUNCTION "not"  ( l : std_ulogic                 ) RETURN UX01;
     55     
     56     -----------------------------------------------------------------------    
     57     -- vectorized overloaded logical operators
     58     -----------------------------------------------------------------------    
     59     FUNCTION "and"  ( l, r : std_logic_vector  ) RETURN std_logic_vector;
     60     FUNCTION "and"  ( l, r : std_ulogic_vector ) RETURN std_ulogic_vector;
     61 
     62     FUNCTION "nand" ( l, r : std_logic_vector  ) RETURN std_logic_vector;
     63     FUNCTION "nand" ( l, r : std_ulogic_vector ) RETURN std_ulogic_vector;
     64 
     65     FUNCTION "or"   ( l, r : std_logic_vector  ) RETURN std_logic_vector;
     66     FUNCTION "or"   ( l, r : std_ulogic_vector ) RETURN std_ulogic_vector;
     67 
     68     FUNCTION "nor"  ( l, r : std_logic_vector  ) RETURN std_logic_vector;
     69     FUNCTION "nor"  ( l, r : std_ulogic_vector ) RETURN std_ulogic_vector;
     70 
     71     FUNCTION "xor"  ( l, r : std_logic_vector  ) RETURN std_logic_vector;
     72     FUNCTION "xor"  ( l, r : std_ulogic_vector ) RETURN std_ulogic_vector;
     73 
     74 --  -----------------------------------------------------------------------
     75 --  Note : The declaration and implementation of the "xnor" function is
     76 --  specifically commented until at which time the VHDL language has been
     77 --  officially adopted as containing such a function. At such a point, 
     78 --  the following comments may be removed along with this notice without
     79 --  further "official" ballotting of this std_logic_1164 package. It is
     80 --  the intent of this effort to provide such a function once it becomes
     81 --  available in the VHDL standard.
     82 --  -----------------------------------------------------------------------
     83     function "xnor" ( l, r : std_logic_vector  ) return std_logic_vector;
     84     function "xnor" ( l, r : std_ulogic_vector ) return std_ulogic_vector;
     85 
     86     FUNCTION "not"  ( l : std_logic_vector  ) RETURN std_logic_vector;
     87     FUNCTION "not"  ( l : std_ulogic_vector ) RETURN std_ulogic_vector;
     88 
     89     -------------------------------------------------------------------
     90     -- conversion functions
     91     -------------------------------------------------------------------
     92     FUNCTION To_bit       ( s : std_ulogic;        xmap : BIT := '0')
     93                           RETURN BIT;
     94     FUNCTION To_bitvector ( s : std_logic_vector ; xmap : BIT := '0')
     95                           RETURN BIT_VECTOR;
     96     FUNCTION To_bitvector ( s : std_ulogic_vector; xmap : BIT := '0')
     97                           RETURN BIT_VECTOR;
     98 
     99     FUNCTION To_StdULogic      (b : BIT              ) RETURN std_ulogic;
    100     FUNCTION To_StdLogicVector (b : BIT_VECTOR       ) RETURN std_logic_vector;
    101     FUNCTION To_StdLogicVector (s : std_ulogic_vector) RETURN std_logic_vector;
    102     FUNCTION To_StdULogicVector(b : BIT_VECTOR      ) RETURN std_ulogic_vector;
    103     FUNCTION To_StdULogicVector(s : std_logic_vector) RETURN std_ulogic_vector;
    104     
    105     -------------------------------------------------------------------    
    106     -- strength strippers and type convertors
    107     -------------------------------------------------------------------    
    108 
    109     FUNCTION To_X01  ( s : std_logic_vector  ) RETURN  std_logic_vector;
    110     FUNCTION To_X01  ( s : std_ulogic_vector ) RETURN  std_ulogic_vector;
    111     FUNCTION To_X01  ( s : std_ulogic        ) RETURN  X01;
    112     FUNCTION To_X01  ( b : BIT_VECTOR        ) RETURN  std_logic_vector;
    113     FUNCTION To_X01  ( b : BIT_VECTOR        ) RETURN  std_ulogic_vector;
    114     FUNCTION To_X01  ( b : BIT               ) RETURN  X01;       
    115 
    116     FUNCTION To_X01Z ( s : std_logic_vector  ) RETURN  std_logic_vector;
    117     FUNCTION To_X01Z ( s : std_ulogic_vector ) RETURN  std_ulogic_vector;
    118     FUNCTION To_X01Z ( s : std_ulogic        ) RETURN  X01Z;
    119     FUNCTION To_X01Z ( b : BIT_VECTOR        ) RETURN  std_logic_vector;
    120     FUNCTION To_X01Z ( b : BIT_VECTOR        ) RETURN  std_ulogic_vector;
    121     FUNCTION To_X01Z ( b : BIT               ) RETURN  X01Z;      
    122 
    123     FUNCTION To_UX01  ( s : std_logic_vector  ) RETURN  std_logic_vector;
    124     FUNCTION To_UX01  ( s : std_ulogic_vector ) RETURN  std_ulogic_vector;
    125     FUNCTION To_UX01  ( s : std_ulogic        ) RETURN  UX01;
    126     FUNCTION To_UX01  ( b : BIT_VECTOR        ) RETURN  std_logic_vector;
    127     FUNCTION To_UX01  ( b : BIT_VECTOR        ) RETURN  std_ulogic_vector;
    128     FUNCTION To_UX01  ( b : BIT               ) RETURN  UX01;       
    129 
    130     -------------------------------------------------------------------    
    131     -- edge detection
    132     -------------------------------------------------------------------    
    133     FUNCTION rising_edge  (SIGNAL s : std_ulogic) RETURN BOOLEAN;
    134     FUNCTION falling_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN;
    135 
    136     -------------------------------------------------------------------    
    137     -- object contains an unknown
    138     -------------------------------------------------------------------    
    139     FUNCTION Is_X ( s : std_ulogic_vector ) RETURN  BOOLEAN;
    140     FUNCTION Is_X ( s : std_logic_vector  ) RETURN  BOOLEAN;
    141     FUNCTION Is_X ( s : std_ulogic        ) RETURN  BOOLEAN;
    142 
    143 END std_logic_1164;

    2  resolution function  

     1     function resolved ( s : std_ulogic_vector ) return std_ulogic;
     2         variable result : std_ulogic := 'Z';  -- weakest state default
     3     begin
     4         -- the test for a single driver is essential otherwise the
     5         -- loop would return 'X' for a single driver of '-' and that
     6         -- would conflict with the value of a single driver unresolved signal.
     8         if  s'length = 1 then
     9             return s(s'low);
    10         else
    11             for i in s'range loop
    12                 result := resolution_table(result, s(i));
    13             end loop;
    14         end if;
    15         return result;
    16     end resolved;
    17 
    18 
    19     constant resolution_table : stdlogic_table := (
    20     --      ---------------------------------------------------------
    21     --      |  U    X    0    1    Z    W    L    H    -        |   |  
    22     --      ---------------------------------------------------------
    23             ( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
    24             ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
    25             ( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |
    26             ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
    27             ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
    28             ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |
    29             ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
    30             ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
    31             ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' )  -- | - |
    32         );
  • 相关阅读:
    bzoj 3111 蚂蚁 动态规划
    bzoj3011 可并堆
    bzoj2693 莫比乌斯反演
    bzoj 2671 莫比乌斯反演
    bzoj2194 快速傅立叶之二 FFT
    bzoj1396&&2865 识别子串 后缀自动机+线段树
    安卓开发中使用ZXing生成解析二维码
    使用tencent协议发起临时会话
    使用zxing编写的二维码生成解析工具:QRCoder
    使用JavaScript获取浏览器Chrome版本信息
  • 原文地址:https://www.cnblogs.com/mengdie/p/4597923.html
Copyright © 2020-2023  润新知