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

📄 timing_b.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 5 页
字号:
--------------------------------------------------------------------------------- Title        : Standard VITAL TIMING Package--              : $Revision: 598 $-- Library      : VITAL--              :  -- Developers   : IEEE DASC Timing Working Group (TWG), PAR 1076.4--              :  -- Purpose      : This packages defines standard types, attributes, constants,--              : functions and procedures for use in developing ASIC models.--              : This file contains the Package Body.-- -------------------------------------------------------------------------------- ------------------------------------------------------------------------------ Modification History : -- ------------------------------------------------------------------------------ Version No:|Auth:| Mod.Date:| Changes Made:--   v95.0 A  |     | 06/08/95 | Initial ballot draft 1995--   v95.1    |     | 08/31/95 | #IR203 - Timing violations at time 0--                               #IR204 - Output mapping prior to glitch detection--   v98.0    |TAG  | 03/27/98 | Initial ballot draft 1998--                             | #IR225 - Negative Premptive Glitch--                                      **Code_effected=ReportGlitch,VitalGlitch,--		                                VitalPathDelay,VitalPathDelay01,--                                      VitalPathDelay01z.--                               #IR105 - Skew timing check needed--                                      **Code_effected=NONE, New code added!! --                               #IR245,IR246,IR251 ITC code to fix false boundry cases--					                    **Code_effected=InternalTimingCheck.--				                 #IR248 - Allows VPD to use a default timing delay--                                      **Code_effected=VitalPathDelay,--                                        VitalPathDelay01,VitalPathDelay01z,--                                        VitalSelectPathDelay,VitalSelectPathDelay01,--                                        VitalSelectPathDelay01z.--				                 #IR250 - Corrects fastpath condition in VPD--                                      **Code_effected=VitalPathDelay01,--                                        VitalPathDelay01z,--                               #IR252 - Corrects cancelled timing check call if--                                        condition expires.  --                                        **Code_effected=VitalSetupHoldCheck,--                                        VitalRecoveryRemovalCheck.--   v98.1    | jdc | 03/25/99 | Changed UseDefaultDelay to IgnoreDefaultDelay--                               and set default to FALSE in VitalPathDelay()---- ----------------------------------------------------------------------------LIBRARY STD;USE STD.TEXTIO.ALL;PACKAGE BODY VITAL_Timing IS    -- --------------------------------------------------------------------    -- Package Local Declarations    -- --------------------------------------------------------------------     TYPE CheckType IS ( SetupCheck, HoldCheck, RecoveryCheck, RemovalCheck,                        PulseWidCheck, PeriodCheck );    TYPE CheckInfoType IS RECORD            Violation : BOOLEAN;            CheckKind : CheckType;            ObsTime   : TIME;            ExpTime   : TIME;            DetTime   : TIME;            State     : X01;    END RECORD;    TYPE LogicCvtTableType IS ARRAY (std_ulogic) OF CHARACTER;     TYPE HiLoStrType IS ARRAY (std_ulogic RANGE 'X' TO '1') OF STRING(1 TO 4);     CONSTANT LogicCvtTable : LogicCvtTableType                      := ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-');     CONSTANT HiLoStr     : HiLoStrType := ("  X ", " Low", "High" );     TYPE EdgeSymbolMatchType IS ARRAY (X01,X01,VitalEdgeSymbolType) OF BOOLEAN;    -- last value, present value, edge symbol    CONSTANT EdgeSymbolMatch : EdgeSymbolMatchType :=  (      'X'=>('X'=>(                                 OTHERS => FALSE),            '0'=>('N'|'F'|'v'|'E'|'D'|'*' => TRUE, OTHERS => FALSE ),            '1'=>('P'|'R'|'^'|'E'|'A'|'*' => TRUE, OTHERS => FALSE ) ),      '0'=>('X'=>(    'r'|'p'|'R'|'A'|'*' => TRUE, OTHERS => FALSE ),            '0'=>(                                 OTHERS => FALSE ),            '1'=>(    '/'|'P'|'p'|'R'|'*' => TRUE, OTHERS => FALSE ) ),      '1'=>('X'=>(    'f'|'n'|'F'|'D'|'*' => TRUE, OTHERS => FALSE ),            '0'=>(    '\'|'N'|'n'|'F'|'*' => TRUE, OTHERS => FALSE ),            '1'=>(                                 OTHERS => FALSE ) ) );    ---------------------------------------------------------------------------    -- Tables used to implement 'posedge' and 'negedge' in path delays    -- These are new tables for Skewcheck routines.  IR105    ---------------------------------------------------------------------------     TYPE EdgeRable IS ARRAY(std_ulogic, std_ulogic) OF boolean;     CONSTANT Posedge : EdgeRable := (    -- ------------------------------------------------------------------------    -- |  U       X     0      1       Z      W      L      H     -    -- ------------------------------------------------------------------------       ( FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE ), -- U       ( FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE ), -- X       ( TRUE , TRUE , FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , TRUE  ), -- 0       ( FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE ), -- 1       ( FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE ), -- Z       ( FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE ), -- W       ( TRUE , TRUE , FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , TRUE  ), -- L       ( FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE ), -- H       ( FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE )  -- -     );	 --IR105      CONSTANT Negedge : EdgeRable := (    -- -----------------------------------------------------------------------    -- |  U       X     0      1       Z      W      L      H     -    -- -----------------------------------------------------------------------       ( FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE, FALSE ), -- U       ( FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE, FALSE ), -- X       ( FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE ), -- 0       ( TRUE , TRUE , TRUE , FALSE, TRUE , TRUE , TRUE , FALSE, TRUE  ), -- 1       ( FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE, FALSE ), -- Z       ( FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE, FALSE ), -- W       ( FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE ), -- L       ( TRUE , TRUE , TRUE , FALSE, TRUE , TRUE , TRUE , FALSE, TRUE  ), -- H       ( FALSE, FALSE, TRUE , FALSE, FALSE, FALSE, TRUE , FALSE, FALSE ) --  -     );	  --IR105     TYPE SkewType IS (Inphase, Outphase);  --IR105    CONSTANT noTrigger : TIME := -1 ns;	   --IR105    ---------------------------------------------------------------------------	--    End of Skew (IR105 additions)    ---------------------------------------------------------------------------   	     ---------------------------------------------------------------------------    ---------------------------------------------------------------------------    -- Misc Utilities Local Utilities    ---------------------------------------------------------------------------    -----------------------------------------------------------------------    FUNCTION Minimum ( CONSTANT t1,t2 : IN TIME ) RETURN TIME IS    BEGIN        IF ( t1 < t2 ) THEN RETURN (t1); ELSE RETURN (t2); END IF;    END Minimum;    -----------------------------------------------------------------------    FUNCTION Maximum ( CONSTANT t1,t2 : IN TIME ) RETURN TIME IS    BEGIN        IF ( t1 > t2 ) THEN RETURN (t1); ELSE RETURN (t2); END IF;    END Maximum;    --------------------------------------------------------------------    -- Error Message Types and Tables    --------------------------------------------------------------------    TYPE VitalErrorType IS (        ErrVctLng  ,        ErrNoPath  ,        ErrNegPath ,        ErrNegDel    );     TYPE VitalErrorSeverityType IS ARRAY (VitalErrorType) OF SEVERITY_LEVEL;    CONSTANT VitalErrorSeverity : VitalErrorSeverityType := (        ErrVctLng    => ERROR,        ErrNoPath    => WARNING,        ErrNegPath   => WARNING,        ErrNegDel    => WARNING    );     CONSTANT MsgNoPath : STRING :=      "No Delay Path Condition TRUE.  0-delay used. Output signal is: ";    CONSTANT MsgNegPath : STRING :=      "Path Delay less than time since input. 0 delay used. Output signal is: ";    CONSTANT MsgNegDel : STRING :=      "Negative delay. New output value not scheduled. Output signal is: ";    CONSTANT MsgVctLng : STRING :=      "Vector (array) lengths not equal. ";     CONSTANT MsgUnknown : STRING :=      "Unknown error message.";     FUNCTION VitalMessage (            CONSTANT ErrorId : IN VitalErrorType          ) RETURN STRING IS    BEGIN        CASE ErrorId IS            WHEN ErrVctLng    => RETURN MsgVctLng;            WHEN ErrNoPath    => RETURN MsgNoPath;            WHEN ErrNegPath   => RETURN MsgNegPath;            WHEN ErrNegDel    => RETURN MsgNegDel;            WHEN OTHERS       => RETURN MsgUnknown;        END CASE;    END;    PROCEDURE VitalError (            CONSTANT Routine : IN STRING;            CONSTANT ErrorId : IN VitalErrorType    ) IS    BEGIN        ASSERT FALSE          REPORT Routine & ": " & VitalMessage(ErrorId)          SEVERITY VitalErrorSeverity(ErrorId);    END;     PROCEDURE VitalError (            CONSTANT Routine : IN STRING;            CONSTANT ErrorId : IN VitalErrorType;            CONSTANT Info    : IN STRING    ) IS    BEGIN        ASSERT FALSE          REPORT Routine & ": " & VitalMessage(ErrorId) & Info          SEVERITY VitalErrorSeverity(ErrorId);    END;     PROCEDURE VitalError (            CONSTANT Routine : IN STRING;            CONSTANT ErrorId : IN VitalErrorType;            CONSTANT Info    : IN CHARACTER    ) IS    BEGIN        ASSERT FALSE          REPORT Routine & ": " & VitalMessage(ErrorId) & Info          SEVERITY VitalErrorSeverity(ErrorId);    END;     ---------------------------------------------------------------------------    -- Time Delay Assignment Subprograms    ---------------------------------------------------------------------------    FUNCTION VitalExtendToFillDelay (             CONSTANT Delay : IN VitalDelayType          ) RETURN VitalDelayType01Z IS    BEGIN        RETURN (OTHERS => Delay);    END VitalExtendToFillDelay;    FUNCTION VitalExtendToFillDelay (             CONSTANT Delay : IN VitalDelayType01          ) RETURN VitalDelayType01Z IS        VARIABLE Delay01Z  : VitalDelayType01Z;    BEGIN        Delay01Z(tr01) := Delay(tr01);        Delay01Z(tr0z) := Delay(tr01);        Delay01Z(trz1) := Delay(tr01);        Delay01Z(tr10) := Delay(tr10);        Delay01Z(tr1z) := Delay(tr10);        Delay01Z(trz0) := Delay(tr10);        RETURN (Delay01Z);    END VitalExtendToFillDelay;    FUNCTION VitalExtendToFillDelay (             CONSTANT Delay : IN VitalDelayType01Z          ) RETURN VitalDelayType01Z IS    BEGIN        RETURN Delay;    END VitalExtendToFillDelay;    ---------------------------------------------------------------------------    FUNCTION VitalCalcDelay (            CONSTANT NewVal : IN std_ulogic   := 'X';            CONSTANT OldVal : IN std_ulogic   := 'X';            CONSTANT Delay  : IN VitalDelayType          ) RETURN TIME IS    BEGIN          RETURN delay;    END VitalCalcDelay;    FUNCTION VitalCalcDelay (            CONSTANT NewVal : IN std_ulogic   := 'X';            CONSTANT OldVal : IN std_ulogic   := 'X';            CONSTANT Delay  : IN VitalDelayType01          ) RETURN TIME IS        VARIABLE Result : TIME;    BEGIN        CASE Newval IS          WHEN '0' | 'L' => Result := Delay(tr10);          WHEN '1' | 'H' => Result := Delay(tr01);          WHEN 'Z' =>            CASE Oldval IS              WHEN '0' | 'L' => Result := Delay(tr01);              WHEN '1' | 'H' => Result := Delay(tr10);              WHEN OTHERS    => Result := MAXIMUM(Delay(tr10), Delay(tr01));            END CASE;          WHEN OTHERS =>            CASE Oldval IS              WHEN '0' | 'L' => Result := Delay(tr01);              WHEN '1' | 'H' => Result := Delay(tr10);              WHEN 'Z'       => Result := MINIMUM(Delay(tr10), Delay(tr01));              WHEN OTHERS    => Result := MAXIMUM(Delay(tr10), Delay(tr01));            END CASE;        END CASE;        RETURN Result;    END VitalCalcDelay;    FUNCTION VitalCalcDelay (            CONSTANT NewVal : IN std_ulogic   := 'X';            CONSTANT OldVal : IN std_ulogic   := 'X';            CONSTANT Delay  : IN VitalDelayType01Z          ) RETURN TIME IS        VARIABLE Result : TIME;    BEGIN        CASE Oldval IS          WHEN '0' | 'L' =>            CASE Newval IS              WHEN '0' | 'L' => Result := Delay(tr10);              WHEN '1' | 'H' => Result := Delay(tr01);

⌨️ 快捷键说明

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