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

📄 vital_primitives_body.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 5 页
字号:
--------------------------------------------------------------------------------- Title        : Standard VITAL_Primitives Package--              : $Revision: 597 $--              :-- Library      : VITAL--              :-- Developers   : IEEE DASC Timing Working Group (TWG), PAR 1076.4--              :-- Purpose      : This packages defines standard types, constants, functions--              : and procedures for use in developing ASIC models.--              : Specifically a set of logic primitives are defined.--              :  -- -------------------------------------------------------------------------------- ------------------------------------------------------------------------------ Modification History : -- ------------------------------------------------------------------------------ Version No:|Auth:| Mod.Date:| Changes Made:--   v95.0 A  |     | 06/02/95 | Initial ballot draft 1995--   v95.1    |     | 08/31/95 | #204 - glitch detection prior to OutputMap-- ----------------------------------------------------------------------------LIBRARY STD;USE STD.TEXTIO.ALL;PACKAGE BODY VITAL_Primitives IS    -- ------------------------------------------------------------------------    --  Default values for Primitives    -- ------------------------------------------------------------------------    --  default values for delay parameters    CONSTANT VitalDefDelay01  : VitalDelayType01  := VitalZeroDelay01;    CONSTANT VitalDefDelay01Z : VitalDelayType01Z := VitalZeroDelay01Z;    TYPE VitalTimeArray IS ARRAY (NATURAL RANGE <>) OF TIME;        --  default primitive model operation parameters    --  Glitch detection/reporting    TYPE VitalGlitchModeType IS ( MessagePlusX, MessageOnly, XOnly, NoGlitch);    CONSTANT PrimGlitchMode : VitalGlitchModeType   := XOnly;    -- ------------------------------------------------------------------------    -- Local Type and Subtype Declarations    -- ------------------------------------------------------------------------    ---------------------------------------------------------------------------    -- enumeration value representing the transition or level of the signal.    --  See function 'GetEdge'    ---------------------------------------------------------------------------    TYPE EdgeType IS ( 'U',   -- Uninitialized level                       'X',   -- Unknown level                       '0',   -- low level                       '1',   -- high level                       '\',   -- 1 to 0 falling edge                       '/',   -- 0 to 1 rising  edge                       'F',   -- * to 0 falling edge                       'R',   -- * to 1 rising  edge                       'f',   -- rising  to X edge                       'r',   -- falling to X edge                       'x',   -- Unknown edge (ie U->X)                       'V'    -- Timing violation edge                     );    TYPE EdgeArray  IS ARRAY ( NATURAL RANGE <> ) OF EdgeType;    TYPE EdgeX1Table IS ARRAY ( EdgeType                          ) OF EdgeType;    TYPE EdgeX2Table IS ARRAY ( EdgeType, EdgeType                ) OF EdgeType;    TYPE EdgeX3Table IS ARRAY ( EdgeType, EdgeType, EdgeType      ) OF EdgeType;    TYPE EdgeX4Table IS ARRAY (EdgeType,EdgeType,EdgeType,EdgeType) OF EdgeType;    TYPE LogicToEdgeT  IS ARRAY(std_ulogic, std_ulogic) OF EdgeType;    TYPE LogicToLevelT IS ARRAY(std_ulogic ) OF EdgeType;    TYPE GlitchDataType IS       RECORD         SchedTime    : TIME;         GlitchTime   : TIME;         SchedValue   : std_ulogic;        CurrentValue    : std_ulogic;       END RECORD;     TYPE GlitchDataArrayType IS ARRAY (NATURAL RANGE <>)          OF GlitchDataType;     -- Enumerated type used in selection of output path delays    TYPE SchedType  IS      RECORD        inp0  : TIME;   -- time (abs) of output change due to input change to 0        inp1  : TIME;   -- time (abs) of output change due to input change to 1        InpX  : TIME;   -- time (abs) of output change due to input change to X        Glch0 : TIME;   -- time (abs) of output glitch due to input change to 0        Glch1 : TIME;   -- time (abs) of output glitch due to input change to 0      END RECORD;    TYPE SchedArray  IS ARRAY ( NATURAL RANGE <> ) OF SchedType;    CONSTANT DefSchedType : SchedType := (TIME'HIGH, TIME'HIGH, 0 ns,0 ns,0 ns);    CONSTANT DefSchedAnd  : SchedType := (TIME'HIGH, 0 ns,0 ns, TIME'HIGH,0 ns);    -- Constrained array declarations (common sizes used by primitives)    SUBTYPE SchedArray2 IS SchedArray(1 DOWNTO 0);    SUBTYPE SchedArray3 IS SchedArray(2 DOWNTO 0);    SUBTYPE SchedArray4 IS SchedArray(3 DOWNTO 0);    SUBTYPE SchedArray8 IS SchedArray(7 DOWNTO 0);    SUBTYPE TimeArray2 IS VitalTimeArray(1 DOWNTO 0);    SUBTYPE TimeArray3 IS VitalTimeArray(2 DOWNTO 0);    SUBTYPE TimeArray4 IS VitalTimeArray(3 DOWNTO 0);    SUBTYPE TimeArray8 IS VitalTimeArray(7 DOWNTO 0);    SUBTYPE GlitchArray2 IS GlitchDataArrayType(1 DOWNTO 0);    SUBTYPE GlitchArray3 IS GlitchDataArrayType(2 DOWNTO 0);    SUBTYPE GlitchArray4 IS GlitchDataArrayType(3 DOWNTO 0);    SUBTYPE GlitchArray8 IS GlitchDataArrayType(7 DOWNTO 0);    SUBTYPE EdgeArray2 IS EdgeArray(1 DOWNTO 0);    SUBTYPE EdgeArray3 IS EdgeArray(2 DOWNTO 0);    SUBTYPE EdgeArray4 IS EdgeArray(3 DOWNTO 0);    SUBTYPE EdgeArray8 IS EdgeArray(7 DOWNTO 0);    CONSTANT DefSchedArray2 : SchedArray2 :=                             (OTHERS=> (0 ns, 0 ns, 0 ns, 0 ns, 0 ns));    TYPE stdlogic_table IS ARRAY(std_ulogic, std_ulogic) OF std_ulogic;    CONSTANT InitialEdge : LogicToLevelT := (            '1'|'H' => 'R',            '0'|'L' => 'F',            OTHERS  => 'x'     );    CONSTANT LogicToEdge  : LogicToEdgeT  := (  -- previous, current    --  old \ new: U    X    0    1    Z    W    L    H    -        'U' =>  ( 'U', 'x', 'F', 'R', 'x', 'x', 'F', 'R', 'x' ),        'X' =>  ( 'x', 'X', 'F', 'R', 'x', 'X', 'F', 'R', 'X' ),        '0' =>  ( 'r', 'r', '0', '/', 'r', 'r', '0', '/', 'r' ),        '1' =>  ( 'f', 'f', '\', '1', 'f', 'f', '\', '1', 'f' ),        'Z' =>  ( 'x', 'X', 'F', 'R', 'X', 'x', 'F', 'R', 'x' ),        'W' =>  ( 'x', 'X', 'F', 'R', 'x', 'X', 'F', 'R', 'X' ),        'L' =>  ( 'r', 'r', '0', '/', 'r', 'r', '0', '/', 'r' ),        'H' =>  ( 'f', 'f', '\', '1', 'f', 'f', '\', '1', 'f' ),        '-' =>  ( 'x', 'X', 'F', 'R', 'x', 'X', 'F', 'R', 'X' )    );    CONSTANT LogicToLevel : LogicToLevelT := (            '1'|'H' => '1',            '0'|'L' => '0',            'U'     => 'U',            OTHERS  => 'X'     );    -- -----------------------------------    -- 3-state logic tables    -- -----------------------------------    CONSTANT BufIf0_Table : stdlogic_table :=        -- enable        data       value        ( '1'|'H'   => ( OTHERS  => 'Z' ),          '0'|'L'   => ( '1'|'H' => '1',                         '0'|'L' => '0',                         'U'     => 'U',                         OTHERS  => 'X' ),          'U'       => ( OTHERS  => 'U' ),          OTHERS    => ( OTHERS  => 'X' ) );    CONSTANT BufIf1_Table : stdlogic_table :=        -- enable        data       value        ( '0'|'L'   => ( OTHERS  => 'Z' ),          '1'|'H'   => ( '1'|'H' => '1',                         '0'|'L' => '0',                         'U'     => 'U',                         OTHERS  => 'X' ),          'U'       => ( OTHERS  => 'U' ),          OTHERS    => ( OTHERS  => 'X' ) );    CONSTANT InvIf0_Table : stdlogic_table :=        -- enable        data       value        ( '1'|'H'   => ( OTHERS  => 'Z' ),          '0'|'L'   => ( '1'|'H' => '0',                         '0'|'L' => '1',                         'U'     => 'U',                         OTHERS  => 'X' ),          'U'       => ( OTHERS  => 'U' ),          OTHERS    => ( OTHERS  => 'X' ) );    CONSTANT InvIf1_Table : stdlogic_table :=        -- enable        data       value        ( '0'|'L'   => ( OTHERS  => 'Z' ),          '1'|'H'   => ( '1'|'H' => '0',                         '0'|'L' => '1',                         'U'     => 'U',                         OTHERS  => 'X' ),          'U'       => ( OTHERS  => 'U' ),          OTHERS    => ( OTHERS  => 'X' ) );    TYPE To_StateCharType IS ARRAY (VitalStateSymbolType) OF CHARACTER;    CONSTANT To_StateChar : To_StateCharType :=     ( '/', '\', 'P', 'N', 'r', 'f', 'p', 'n', 'R', 'F', '^', 'v',       'E', 'A', 'D', '*', 'X', '0', '1', '-', 'B', 'Z', 'S' );    TYPE To_TruthCharType IS ARRAY (VitalTruthSymbolType) OF CHARACTER;    CONSTANT To_TruthChar : To_TruthCharType :=     ( 'X', '0', '1', '-', 'B', 'Z' );    TYPE TruthTableOutMapType IS ARRAY (VitalTruthSymbolType) OF std_ulogic;    CONSTANT TruthTableOutMap : TruthTableOutMapType :=       --  'X', '0', '1', '-', 'B', 'Z'         ( 'X', '0', '1', 'X', '-', 'Z' );    TYPE StateTableOutMapType IS ARRAY (VitalStateSymbolType) OF std_ulogic;    -- does conversion to X01Z or '-' if invalid    CONSTANT StateTableOutMap : StateTableOutMapType :=     -- '/' '\' 'P' 'N' 'r' 'f' 'p' 'n' 'R' 'F' '^' 'v'     -- 'E' 'A' 'D' '*' 'X' '0' '1' '-' 'B' 'Z' 'S'      ( '-','-','-','-','-','-','-','-','-','-','-','-',        '-','-','-','-','X','0','1','X','-','Z','W');    -- ------------------------------------------------------------------------    TYPE ValidTruthTableInputType IS ARRAY (VitalTruthSymbolType) OF BOOLEAN;    -- checks if a symbol IS valid for the stimulus portion of a truth table    CONSTANT ValidTruthTableInput : ValidTruthTableInputType :=       -- 'X'    '0'    '1'    '-'    'B'    'Z'       (  TRUE,  TRUE,  TRUE,  TRUE,  TRUE,  FALSE );    TYPE TruthTableMatchType IS ARRAY (X01, VitalTruthSymbolType) OF BOOLEAN;    -- checks if an input matches th corresponding truth table symbol    -- use: TruthTableMatch(input_converted_to_X01, truth_table_stimulus_symbol)    CONSTANT TruthTableMatch : TruthTableMatchType  :=  (       -- X,     0,     1,     -      B      Z       (  TRUE,  FALSE, FALSE, TRUE,  FALSE, FALSE  ),  -- X       (  FALSE, TRUE,  FALSE, TRUE,  TRUE,  FALSE  ),  -- 0       (  FALSE, FALSE, TRUE,  TRUE,  TRUE,  FALSE  )   -- 1    );    -- ------------------------------------------------------------------------    TYPE ValidStateTableInputType IS ARRAY (VitalStateSymbolType) OF BOOLEAN;    CONSTANT ValidStateTableInput : ValidStateTableInputType :=       -- '/',   '\',   'P',   'N',   'r',   'f',      (   TRUE,  TRUE,  TRUE,  TRUE,  TRUE,  TRUE,       -- 'p',   'n',   'R',   'F',   '^',   'v',          TRUE,  TRUE,  TRUE,  TRUE,  TRUE,  TRUE,       -- 'E',   'A',    'D',  '*',          TRUE,  TRUE,  TRUE,  TRUE,       -- 'X',   '0',   '1',   '-',   'B',   'Z',          TRUE,  TRUE,  TRUE,  TRUE,  TRUE, FALSE,       -- 'S'          TRUE );    CONSTANT ValidStateTableState : ValidStateTableInputType :=       -- '/',   '\',   'P',   'N',   'r',   'f',      (   FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,       -- 'p',   'n',   'R',   'F',   '^',   'v',          FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,       -- 'E',   'A',    'D',  '*',          FALSE, FALSE, FALSE, FALSE,       -- 'X',   '0',   '1',   '-',   'B',   'Z',          TRUE,  TRUE,  TRUE,  TRUE,  TRUE,  FALSE,       -- 'S'          FALSE );    TYPE StateTableMatchType IS ARRAY (X01,X01,VitalStateSymbolType) OF BOOLEAN;    -- last value, present value, table symbol    CONSTANT StateTableMatch : StateTableMatchType :=  (      ( -- X (lastvalue)     -- /     \     P     N     r     f     -- p     n     R     F     ^     v     -- E     A     D     *     -- X     0     1     -     B     Z     S      (FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,       FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,       FALSE,FALSE,FALSE,FALSE,       TRUE, FALSE,FALSE,TRUE, FALSE,FALSE,FALSE),      (FALSE,FALSE,FALSE,TRUE, FALSE,FALSE,       FALSE,FALSE,FALSE,TRUE, FALSE,TRUE,       TRUE, FALSE,TRUE, TRUE,       FALSE,TRUE, FALSE,TRUE, TRUE, FALSE,FALSE),      (FALSE,FALSE,TRUE, FALSE,FALSE,FALSE,       FALSE,FALSE,TRUE, FALSE,TRUE, FALSE,       TRUE, TRUE, FALSE,TRUE,       FALSE,FALSE,TRUE, TRUE, TRUE, FALSE,FALSE)      ),      (-- 0 (lastvalue)     -- /     \     P     N     r     f     -- p     n     R     F     ^     v     -- E     A     D     *     -- X     0     1     -     B     Z     S      (FALSE,FALSE,FALSE,FALSE,TRUE, FALSE,       TRUE, FALSE,TRUE, FALSE,FALSE,FALSE,       FALSE,TRUE, FALSE,TRUE,       TRUE, FALSE,FALSE,TRUE, FALSE,FALSE,FALSE),      (FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,       FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,       FALSE,FALSE,FALSE,FALSE,       FALSE,TRUE, FALSE,TRUE, TRUE, FALSE,TRUE ),      (TRUE, FALSE,TRUE, FALSE,FALSE,FALSE,       TRUE, FALSE,TRUE, FALSE,FALSE,FALSE,       FALSE,FALSE,FALSE,TRUE,       FALSE,FALSE,TRUE, TRUE, TRUE, FALSE,FALSE)      ),      (-- 1 (lastvalue)     -- /     \     P     N     r     f     -- p     n     R     F     ^     v     -- E     A     D     *     -- X     0     1     -     B     Z     S      (FALSE,FALSE,FALSE,FALSE,FALSE,TRUE ,       FALSE,TRUE, FALSE,TRUE, FALSE,FALSE,

⌨️ 快捷键说明

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