⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 std_logic_1164_body.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 3 页
字号:
        ELSE            FOR i IN result'RANGE LOOP                result(i) := or_table (lv(i), rv(i));            END LOOP;        END IF;        RETURN result;    END "or";    -------------------------------------------------------------------    -- nor    -------------------------------------------------------------------    FUNCTION "nor"  ( l,r : std_logic_vector ) RETURN std_logic_vector IS        ALIAS lv : std_logic_vector ( 1 TO l'LENGTH ) IS l;        ALIAS rv : std_logic_vector ( 1 TO r'LENGTH ) IS r;        VARIABLE result : std_logic_vector ( 1 TO l'LENGTH );    BEGIN        IF ( l'LENGTH /= r'LENGTH ) THEN            ASSERT FALSE            REPORT "arguments of overloaded 'nor' operator are not of the same length"            SEVERITY FAILURE;        ELSE            FOR i IN result'RANGE LOOP                result(i) := not_table(or_table (lv(i), rv(i)));            END LOOP;        END IF;        RETURN result;    END "nor";    ---------------------------------------------------------------------    FUNCTION "nor"  ( l,r : std_ulogic_vector ) RETURN std_ulogic_vector IS        ALIAS lv : std_ulogic_vector ( 1 TO l'LENGTH ) IS l;        ALIAS rv : std_ulogic_vector ( 1 TO r'LENGTH ) IS r;        VARIABLE result : std_ulogic_vector ( 1 TO l'LENGTH );    BEGIN        IF ( l'LENGTH /= r'LENGTH ) THEN            ASSERT FALSE            REPORT "arguments of overloaded 'nor' operator are not of the same length"            SEVERITY FAILURE;        ELSE            FOR i IN result'RANGE LOOP                result(i) := not_table(or_table (lv(i), rv(i)));            END LOOP;        END IF;        RETURN result;    END "nor";    ---------------------------------------------------------------------    -- xor    -------------------------------------------------------------------    FUNCTION "xor"  ( l,r : std_logic_vector ) RETURN std_logic_vector IS        ALIAS lv : std_logic_vector ( 1 TO l'LENGTH ) IS l;        ALIAS rv : std_logic_vector ( 1 TO r'LENGTH ) IS r;        VARIABLE result : std_logic_vector ( 1 TO l'LENGTH );    BEGIN        IF ( l'LENGTH /= r'LENGTH ) THEN            ASSERT FALSE            REPORT "arguments of overloaded 'xor' operator are not of the same length"            SEVERITY FAILURE;        ELSE            FOR i IN result'RANGE LOOP                result(i) := xor_table (lv(i), rv(i));            END LOOP;        END IF;        RETURN result;    END "xor";    ---------------------------------------------------------------------    FUNCTION "xor"  ( l,r : std_ulogic_vector ) RETURN std_ulogic_vector IS        ALIAS lv : std_ulogic_vector ( 1 TO l'LENGTH ) IS l;        ALIAS rv : std_ulogic_vector ( 1 TO r'LENGTH ) IS r;        VARIABLE result : std_ulogic_vector ( 1 TO l'LENGTH );    BEGIN        IF ( l'LENGTH /= r'LENGTH ) THEN            ASSERT FALSE            REPORT "arguments of overloaded 'xor' operator are not of the same length"            SEVERITY FAILURE;        ELSE            FOR i IN result'RANGE LOOP                result(i) := xor_table (lv(i), rv(i));            END LOOP;        END IF;        RETURN result;    END "xor";--    ---------------------------------------------------------------------    -- xnor--    ---------------------------------------------------------------------  -------------------------------------------------------------------------  Note : The declaration and implementation of the "xnor" function is--  specifically commented until at which time the VHDL language has been--  officially adopted as containing such a function. At such a point,--  the following comments may be removed along with this notice without--  further "official" ballotting of this std_logic_1164 package. It is--  the intent of this effort to provide such a function once it becomes--  available in the VHDL standard.--  -------------------------------------------------------------------------START-V93    FUNCTION "xnor"  ( l,r : std_logic_vector ) RETURN std_logic_vector IS        ALIAS lv : std_logic_vector ( 1 TO l'LENGTH ) IS l;        ALIAS rv : std_logic_vector ( 1 TO r'LENGTH ) IS r;        VARIABLE result : std_logic_vector ( 1 TO l'LENGTH );    BEGIN        IF ( l'LENGTH /= r'LENGTH ) THEN            ASSERT FALSE            REPORT "arguments of overloaded 'xnor' operator are not of the same length"            SEVERITY FAILURE;        ELSE            FOR i IN result'RANGE LOOP                result(i) := not_table(xor_table (lv(i), rv(i)));            END LOOP;        END IF;        RETURN result;    END "xnor";    ---------------------------------------------------------------------    FUNCTION "xnor"  ( l,r : std_ulogic_vector ) RETURN std_ulogic_vector IS        ALIAS lv : std_ulogic_vector ( 1 TO l'LENGTH ) IS l;        ALIAS rv : std_ulogic_vector ( 1 TO r'LENGTH ) IS r;        VARIABLE result : std_ulogic_vector ( 1 TO l'LENGTH );    BEGIN        IF ( l'LENGTH /= r'LENGTH ) THEN            ASSERT FALSE            REPORT "arguments of overloaded 'xnor' operator are not of the same length"            SEVERITY FAILURE;        ELSE            FOR i IN result'RANGE LOOP                result(i) := not_table(xor_table (lv(i), rv(i)));            END LOOP;        END IF;        RETURN result;    END "xnor";--END-V93    -------------------------------------------------------------------    -- not    -------------------------------------------------------------------    FUNCTION "not"  ( l : std_logic_vector ) RETURN std_logic_vector IS        ALIAS lv : std_logic_vector ( 1 TO l'LENGTH ) IS l;        VARIABLE result : std_logic_vector ( 1 TO l'LENGTH ) := (OTHERS => 'X');    BEGIN        FOR i IN result'RANGE LOOP            result(i) := not_table( lv(i) );        END LOOP;        RETURN result;    END;    ---------------------------------------------------------------------    FUNCTION "not"  ( l : std_ulogic_vector ) RETURN std_ulogic_vector IS        ALIAS lv : std_ulogic_vector ( 1 TO l'LENGTH ) IS l;        VARIABLE result : std_ulogic_vector ( 1 TO l'LENGTH ) := (OTHERS => 'X');    BEGIN        FOR i IN result'RANGE LOOP            result(i) := not_table( lv(i) );        END LOOP;        RETURN result;    END;    -------------------------------------------------------------------    -- conversion tables    -------------------------------------------------------------------    TYPE logic_x01_table IS ARRAY (std_ulogic'LOW TO std_ulogic'HIGH) OF X01;    TYPE logic_x01z_table IS ARRAY (std_ulogic'LOW TO std_ulogic'HIGH) OF X01Z;    TYPE logic_ux01_table IS ARRAY (std_ulogic'LOW TO std_ulogic'HIGH) OF UX01;    ----------------------------------------------------------    -- table name : cvt_to_x01    --    -- parameters :    --        in  :  std_ulogic  -- some logic value    -- returns    :  x01         -- state value of logic value    -- purpose    :  to convert state-strength to state only    --    -- example    : if (cvt_to_x01 (input_signal) = '1' ) then ...    --    ----------------------------------------------------------    CONSTANT cvt_to_x01 : logic_x01_table := (                         'X',  -- 'U'                         'X',  -- 'X'                         '0',  -- '0'                         '1',  -- '1'                         'X',  -- 'Z'                         'X',  -- 'W'                         '0',  -- 'L'                         '1',  -- 'H'                         'X'   -- '-'                        );    ----------------------------------------------------------    -- table name : cvt_to_x01z    --    -- parameters :    --        in  :  std_ulogic  -- some logic value    -- returns    :  x01z        -- state value of logic value    -- purpose    :  to convert state-strength to state only    --    -- example    : if (cvt_to_x01z (input_signal) = '1' ) then ...    --    ----------------------------------------------------------    CONSTANT cvt_to_x01z : logic_x01z_table := (                         'X',  -- 'U'                         'X',  -- 'X'                         '0',  -- '0'                         '1',  -- '1'                         'Z',  -- 'Z'                         'X',  -- 'W'                         '0',  -- 'L'                         '1',  -- 'H'                         'X'   -- '-'                        );    ----------------------------------------------------------    -- table name : cvt_to_ux01    --    -- parameters :    --        in  :  std_ulogic  -- some logic value    -- returns    :  ux01        -- state value of logic value    -- purpose    :  to convert state-strength to state only    --    -- example    : if (cvt_to_ux01 (input_signal) = '1' ) then ...    --    ----------------------------------------------------------    CONSTANT cvt_to_ux01 : logic_ux01_table := (                         'U',  -- 'U'                         'X',  -- 'X'                         '0',  -- '0'                         '1',  -- '1'                         'X',  -- 'Z'                         'X',  -- 'W'                         '0',  -- 'L'                         '1',  -- 'H'                         'X'   -- '-'                        );    -------------------------------------------------------------------    -- conversion functions    -------------------------------------------------------------------    FUNCTION To_bit ( s : std_ulogic; xmap : BIT := '0') RETURN BIT IS    BEGIN            CASE s IS                WHEN '0' | 'L' => RETURN ('0');                WHEN '1' | 'H' => RETURN ('1');                WHEN OTHERS => RETURN xmap;            END CASE;    END;    --------------------------------------------------------------------    FUNCTION To_bitvector ( s : std_logic_vector ; xmap : BIT := '0') RETURN BIT_VECTOR IS        ALIAS sv : std_logic_vector ( s'LENGTH-1 DOWNTO 0 ) IS s;        VARIABLE result : BIT_VECTOR ( s'LENGTH-1 DOWNTO 0 );    BEGIN        FOR i IN result'RANGE LOOP            CASE sv(i) IS                WHEN '0' | 'L' => result(i) := '0';                WHEN '1' | 'H' => result(i) := '1';                WHEN OTHERS => result(i) := xmap;            END CASE;        END LOOP;        RETURN result;    END;    --------------------------------------------------------------------    FUNCTION To_bitvector ( s : std_ulogic_vector; xmap : BIT := '0') RETURN BIT_VECTOR IS        ALIAS sv : std_ulogic_vector ( s'LENGTH-1 DOWNTO 0 ) IS s;        VARIABLE result : BIT_VECTOR ( s'LENGTH-1 DOWNTO 0 );    BEGIN        FOR i IN result'RANGE LOOP            CASE sv(i) IS                WHEN '0' | 'L' => result(i) := '0';                WHEN '1' | 'H' => result(i) := '1';                WHEN OTHERS => result(i) := xmap;            END CASE;        END LOOP;        RETURN result;    END;    --------------------------------------------------------------------    FUNCTION To_StdULogic       ( b : BIT               ) RETURN std_ulogic IS    BEGIN        CASE b IS            WHEN '0' => RETURN '0';            WHEN '1' => RETURN '1';        END CASE;    END;    --------------------------------------------------------------------    FUNCTION To_StdLogicVector  ( b : BIT_VECTOR        ) RETURN std_logic_vector IS        ALIAS bv : BIT_VECTOR ( b'LENGTH-1 DOWNTO 0 ) IS b;        VARIABLE result : std_logic_vector ( b'LENGTH-1 DOWNTO 0 );    BEGIN        FOR i IN result'RANGE LOOP            CASE bv(i) IS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -