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

📄 prmtvs_b.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 5 页
字号:
      (-- 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,       FALSE,FALSE,TRUE, TRUE,       TRUE, FALSE,FALSE,TRUE, FALSE,FALSE,FALSE),      (FALSE,TRUE, FALSE,TRUE, FALSE,FALSE,       FALSE,TRUE, FALSE,TRUE, FALSE,FALSE,       FALSE,FALSE,FALSE,TRUE,       FALSE,TRUE, FALSE,TRUE, TRUE, FALSE,FALSE),      (FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,       FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,       FALSE,FALSE,FALSE,FALSE,       FALSE,FALSE,TRUE, TRUE, TRUE, FALSE,TRUE )      )      );    TYPE Logic_UX01Z_Table IS ARRAY (std_ulogic) OF UX01Z;    ----------------------------------------------------------    -- table name : cvt_to_x01z    -- parameters :  std_ulogic  -- some logic value    -- returns    :  UX01Z       -- state value of logic value    -- purpose    :  to convert state-strength to state only    ----------------------------------------------------------    CONSTANT cvt_to_ux01z : Logic_UX01Z_Table :=                                ('U','X','0','1','Z','X','0','1','X' );    TYPE LogicCvtTableType IS ARRAY (std_ulogic) OF CHARACTER;     CONSTANT LogicCvtTable : LogicCvtTableType                      := ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-');     --------------------------------------------------------------------    -- LOCAL Utilities    --------------------------------------------------------------------    -- ------------------------------------------------------------------------    --  FUNCTION  NAME  :  MINIMUM    --    --  PARAMETERS      :  in1, in2  - integer, time    --    --  DESCRIPTION     :  return smaller of in1 and in2    -- ------------------------------------------------------------------------    FUNCTION Minimum (            CONSTANT in1, in2 : INTEGER          ) RETURN INTEGER IS    BEGIN       IF (in1 < in2) THEN          RETURN in1;       END IF;       RETURN in2;    END;    -- ------------------------------------------------------------------------    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  NAME  :  MAXIMUM    --    --  PARAMETERS      :  in1, in2  - integer, time    --    --  DESCRIPTION     :  return larger of in1 and in2    -- ------------------------------------------------------------------------    FUNCTION Maximum (            CONSTANT in1, in2 : INTEGER          ) RETURN INTEGER IS    BEGIN       IF (in1 > in2) THEN          RETURN in1;       END IF;       RETURN in2;    END;    -----------------------------------------------------------------------    FUNCTION Maximum (            CONSTANT t1,t2 : IN TIME          ) RETURN TIME IS    BEGIN        IF ( t1 > t2 ) THEN RETURN (t1); ELSE RETURN (t2); END IF;    END Maximum;    -----------------------------------------------------------------------    FUNCTION GlitchMinTime (            CONSTANT Time1, Time2 : IN TIME          ) RETURN TIME IS    BEGIN        IF ( Time1 >= NOW ) THEN                IF ( Time2 >= NOW ) THEN                  RETURN Minimum ( Time1, Time2);                ELSE                  RETURN Time1;                END IF;        ELSE                IF ( Time2 >= NOW ) THEN                   RETURN Time2;                ELSE                   RETURN 0 ns;                END IF;        END IF;    END;    --------------------------------------------------------------------    -- Error Message Types and Tables    --------------------------------------------------------------------    TYPE VitalErrorType IS (        ErrNegDel,        ErrInpSym,        ErrOutSym,        ErrStaSym,        ErrVctLng,        ErrTabWidSml,        ErrTabWidLrg,        ErrTabResSml,        ErrTabResLrg    );    TYPE VitalErrorSeverityType IS ARRAY (VitalErrorType) OF SEVERITY_LEVEL;    CONSTANT VitalErrorSeverity : VitalErrorSeverityType := (        ErrNegDel    => WARNING,        ErrInpSym    => ERROR,        ErrOutSym    => ERROR,        ErrStaSym    => ERROR,        ErrVctLng    => ERROR,        ErrTabWidSml => ERROR,        ErrTabWidLrg => WARNING,        ErrTabResSml => WARNING,        ErrTabResLrg => WARNING    );    CONSTANT MsgNegDel : STRING :=      "Negative delay. New output value not scheduled. Output signal is: ";    CONSTANT MsgInpSym : STRING :=      "Illegal symbol in the input portion of a Truth/State table.";    CONSTANT MsgOutSym : STRING :=      "Illegal symbol in the output portion of a Truth/State table.";    CONSTANT MsgStaSym : STRING :=      "Illegal symbol in the state portion of a State table.";    CONSTANT MsgVctLng : STRING :=      "Vector (array) lengths not equal. ";    CONSTANT MsgTabWidSml : STRING :=      "Width of the Truth/State table is too small.";    CONSTANT MsgTabWidLrg : STRING :=      "Width of Truth/State table is too large. Extra elements are ignored.";    CONSTANT MsgTabResSml : STRING :=      "Result of Truth/State table has too many elements.";    CONSTANT MsgTabResLrg : STRING :=      "Result of Truth/State table has too few elements.";    CONSTANT MsgUnknown : STRING :=      "Unknown error message.";    --------------------------------------------------------------------    -- LOCAL Utilities    --------------------------------------------------------------------    FUNCTION VitalMessage (            CONSTANT ErrorId : IN VitalErrorType          ) RETURN STRING IS    BEGIN        CASE ErrorId IS            WHEN ErrNegDel    => RETURN MsgNegDel;            WHEN ErrInpSym    => RETURN MsgInpSym;            WHEN ErrOutSym    => RETURN MsgOutSym;            WHEN ErrStaSym    => RETURN MsgStaSym;            WHEN ErrVctLng    => RETURN MsgVctLng;            WHEN ErrTabWidSml => RETURN MsgTabWidSml;            WHEN ErrTabWidLrg => RETURN MsgTabWidLrg;            WHEN ErrTabResSml => RETURN MsgTabResSml;            WHEN ErrTabResLrg => RETURN MsgTabResLrg;            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;    ---------------------------------------------------------------------------    PROCEDURE ReportGlitch (             CONSTANT GlitchRoutine  : IN  STRING;            CONSTANT OutSignalName  : IN  STRING;            CONSTANT PreemptedTime  : IN  TIME;            CONSTANT PreemptedValue : IN  std_ulogic;            CONSTANT NewTime        : IN  TIME;            CONSTANT NewValue       : IN  std_ulogic;            CONSTANT Index          : IN  INTEGER := 0;            CONSTANT IsArraySignal  : IN  BOOLEAN := FALSE;            CONSTANT MsgSeverity    : IN  SEVERITY_LEVEL := WARNING    ) IS        VARIABLE StrPtr1, StrPtr2, StrPtr3, StrPtr4, StrPtr5 : LINE;    BEGIN        Write (StrPtr1, PreemptedTime );        Write (StrPtr2, NewTime);        Write (StrPtr3, LogicCvtTable(PreemptedValue));        Write (StrPtr4, LogicCvtTable(NewValue));        IF IsArraySignal THEN            Write (StrPtr5, STRING'( "(" ) );            Write (StrPtr5, Index);            Write (StrPtr5, STRING'( ")" ) );        ELSE            Write (StrPtr5, STRING'( " " ) );        END IF;        -- Issue Report only if Preemted value has not been        --  removed from event queue        ASSERT PreemptedTime >  NewTime          REPORT GlitchRoutine & ": GLITCH Detected on port " &                  OutSignalName & StrPtr5.ALL &                 "; Preempted Future Value := " & StrPtr3.ALL &                 " @ " & StrPtr1.ALL &                 "; Newly Scheduled Value := " & StrPtr4.ALL &                 " @ " & StrPtr2.ALL &                 ";"          SEVERITY MsgSeverity;        DEALLOCATE(StrPtr1);        DEALLOCATE(StrPtr2);        DEALLOCATE(StrPtr3);        DEALLOCATE(StrPtr4);         DEALLOCATE(StrPtr5);         RETURN;    END ReportGlitch;    ---------------------------------------------------------------------------    -- Procedure  : VitalGlitchOnEvent    --            :    -- Parameters : OutSignal ........ signal being driven    --            : OutSignalName..... name of the driven signal    --            : GlitchData........ internal data required by the procedure    --            : NewValue.......... new value being assigned    --            : NewDelay.......... Delay accompanying the assignment    --            :                    (Note: for vectors, this is an array)    --            : GlitchMode........ Glitch generation mode    --            :                     MessagePlusX, MessageOnly,     --            :                     XOnly, NoGlitch )    --            : GlitchDelay....... if <= 0 ns , then there will be no Glitch    --            :                    if >  NewDelay, then there is no Glitch,    --            :                    otherwise, this is the time when a FORCED    --            :                    generation of a glitch will occur.     ----------------------------------------------------------------------------    PROCEDURE VitalGlitchOnEvent (            SIGNAL   OutSignal        : OUT   std_logic;            CONSTANT OutSignalName    : IN    STRING;            VARIABLE GlitchData       : INOUT GlitchDataType;            CONSTANT NewValue         : IN    std_logic;            CONSTANT NewDelay         : IN    TIME := 0 ns;            CONSTANT GlitchMode       : IN    VitalGlitchModeType := MessagePlusX;            CONSTANT GlitchDelay      : IN    TIME := -1 ns;  -- IR#223            CONSTANT MsgSeverity      : IN    SEVERITY_LEVEL := WARNING    ) IS    -- ------------------------------------------------------------------------        VARIABLE NoGlitchDet  : BOOLEAN := FALSE;        VARIABLE OldGlitch    : BOOLEAN := FALSE;        VARIABLE Dly          : TIME    := NewDelay;    BEGIN        -- If nothing to schedule, just return        IF NewDelay < 0 ns THEN            IF (NewValue /= GlitchData.SchedValue) THEN                VitalError ( "VitalGlitchOnEvent", ErrNegDel, OutSignalName );            END IF;        ELSE             -- If nothing currently scheduled            IF GlitchData.SchedTime <= NOW THEN

⌨️ 快捷键说明

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