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

📄 timing_b.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 5 页
字号:
            OutSignal <= NewValue AFTER dly;        ELSIF ( Mode = VitalTransport ) THEN            OutSignal <= TRANSPORT NewValue AFTER dly;        ELSE          -- Glitch Processing ---          -- If nothing currently scheduled          IF GlitchData.SchedTime <= NOW THEN		  -- NOW >= last event            -- Note: NewValue is always /= OldValue when called from VPPD            IF (NewValue = GlitchData.SchedValue) THEN RETURN; END IF;  		  NewGlitch := FALSE;          GlitchData.GlitchTime := NOW+dly;               -- New value earlier than the earliest previous value scheduled          --  (negative preemptive)          ELSIF (NOW+dly <= GlitchData.GlitchTime)             AND (NOW+dly <= GlitchData.SchedTime)  THEN                  -- Glitch is negative preemptive - check if same value and            -- NegPreempt is on IR225             IF (GlitchData.SchedValue /= NewValue) AND (NegPreemptOn) AND               (NOW > 0 NS) THEN              NewGlitch := TRUE;              NegPreemptGlitch :=TRUE;	-- Set preempt Glitch condition            ELSE               NewGlitch := FALSE;    	-- No new glitch, save time for                                        -- possible future glitch            END IF;            GlitchData.GlitchTime := NOW+dly;                              -- Transaction currently scheduled - if glitch already happened            ELSIF GlitchData.GlitchTime <= NOW THEN               IF (GlitchData.SchedValue = NewValue) THEN                   dly := Minimum( GlitchData.SchedTime-NOW, NewDelay );               END IF;               NewGlitch := FALSE;                 -- Transaction currently scheduled (no glitch if same value)            ELSIF (GlitchData.SchedValue = NewValue)                  AND (GlitchData.SchedTime = GlitchData.GlitchTime) THEN                -- revise scheduled output time if new delay is sooner                dly := Minimum( GlitchData.SchedTime-NOW, NewDelay );                -- No new glitch, save time for possable future glitch                NewGlitch := FALSE;                GlitchData.GlitchTime := NOW+dly;            -- Transaction currently scheduled represents a glitch            ELSE              NewGlitch := TRUE; -- A new glitch has been detected            END IF;                 IF NewGlitch THEN              -- If  messages requested, report the glitch              IF MsgOn THEN                 IF NegPreemptGlitch THEN	  --IR225                  ReportGlitch ("VitalGlitch-Neg", OutSignalName,                                 GlitchData.GlitchTime, GlitchData.SchedValue,                                 (dly + NOW), NewValue,                                 MsgSeverity=>MsgSeverity  );                ELSE	              ReportGlitch ("VitalGlitch", OutSignalName,                                 GlitchData.GlitchTime, GlitchData.SchedValue,                                 (dly + NOW), NewValue,                                 MsgSeverity=>MsgSeverity  );		        END IF;	        END IF;                          -- If 'X' generation is requested, schedule the new value             --  preceeded by a glitch pulse.            -- Otherwise just schedule the new value (inertial mode).            IF XOn THEN               IF (Mode = OnDetect) THEN                OutSignal <= 'X';              ELSE                OutSignal <= 'X' AFTER GlitchData.GlitchTime-NOW;            END IF;		                             	            IF NegPreemptGlitch THEN -- IR225               OutSignal <= TRANSPORT NewValue AFTER GlitchData.SchedTime-NOW;	            ELSE              OutSignal <= TRANSPORT NewValue AFTER dly;                END IF;             ELSE              OutSignal <= NewValue AFTER dly; -- no glitch regular prop delay            END IF;                 -- If there no new glitch was detected, just schedule the new value.            ELSE              OutSignal <= NewValue AFTER dly;            END IF;        END IF;        -- Record the new value and time depending on glitch type just scheduled.       IF NOT NegPreemptGlitch THEN -- 5/2/96 for "x-pulse" IR225          GlitchData.SchedValue := NewValue;           GlitchData.SchedTime  := NOW+dly;	   -- pulse timing.	   ELSE         GlitchData.SchedValue := 'X';         -- leave GlitchData.SchedTime to old value since glitch is negative       END IF;      RETURN;    END;     ---------------------------------------------------------------------------   PROCEDURE VitalPathDelay (        SIGNAL   OutSignal          : OUT   std_logic;        VARIABLE GlitchData         : INOUT VitalGlitchDataType;        CONSTANT OutSignalName      : IN    string;        CONSTANT OutTemp            : IN    std_logic;        CONSTANT Paths              : IN    VitalPathArrayType;        CONSTANT DefaultDelay       : IN    VitalDelayType      := VitalZeroDelay;        CONSTANT Mode               : IN    VitalGlitchKindType := OnEvent;        CONSTANT XOn                : IN    BOOLEAN             := TRUE;        CONSTANT MsgOn              : IN    BOOLEAN             := TRUE;        CONSTANT MsgSeverity        : IN    SEVERITY_LEVEL      := WARNING;        CONSTANT NegPreemptOn       : IN    BOOLEAN             := FALSE;	--IR225	3/14/98        CONSTANT IgnoreDefaultDelay : IN    BOOLEAN             := FALSE        --IR248 3/14/98    ) IS         VARIABLE PropDelay : TIME;        BEGIN        -- Check if the new value to be scheduled is different than the        -- previously scheduled value        IF (GlitchData.SchedTime <= NOW) AND           (GlitchData.SchedValue = OutTemp)             THEN RETURN;        END IF;         -- Evaluate propagation delay paths        PropDelay := VitalSelectPathDelay (OutTemp, GlitchData.LastValue,                                           OutSignalName, Paths, DefaultDelay,	                    				   IgnoreDefaultDelay);        GlitchData.LastValue := OutTemp;         -- Schedule the output transactions - including glitch handling        VitalGlitch (OutSignal, GlitchData, OutSignalName, OutTemp,                     PropDelay, Mode, XOn, NegPreemptOn, MsgOn, MsgSeverity );     END VitalPathDelay;    ---------------------------------------------------------------------------    PROCEDURE VitalPathDelay01 (        SIGNAL   OutSignal          : OUT   std_logic;        VARIABLE GlitchData         : INOUT VitalGlitchDataType;        CONSTANT OutSignalName      : IN    string;        CONSTANT OutTemp            : IN    std_logic;        CONSTANT Paths              : IN    VitalPathArray01Type;        CONSTANT DefaultDelay       : IN    VitalDelayType01    := VitalZeroDelay01;        CONSTANT Mode               : IN    VitalGlitchKindType := OnEvent;        CONSTANT XOn                : IN    BOOLEAN             := TRUE;        CONSTANT MsgOn              : IN    BOOLEAN             := TRUE;        CONSTANT MsgSeverity        : IN    SEVERITY_LEVEL      := WARNING;        CONSTANT NegPreemptOn       : IN    BOOLEAN             := FALSE;	--IR225	3/14/98        CONSTANT IgnoreDefaultDelay : IN    BOOLEAN             := FALSE;       --IR248 3/14/98        CONSTANT RejectFastPath     : IN    BOOLEAN             := FALSE        --IR250      ) IS         VARIABLE PropDelay : TIME;    BEGIN    	        -- Check if the new value to be scheduled is different than the        -- previously scheduled value        IF (GlitchData.SchedTime <= NOW) AND           (GlitchData.SchedValue = OutTemp)             THEN RETURN;        -- Check if the new value to be Scheduled is the same as the        -- previously scheduled output transactions.  If this condition        -- exists and the new scheduled time is < the current GlitchData.        -- schedTime then a fast path condition exists (IR250).  If the         -- modeler wants this condition rejected by setting the         -- RejectFastPath actual to true then exit out.          ELSIF (GlitchData.SchedValue=OutTemp)  AND (RejectFastPath)             THEN RETURN;        END IF;         -- Evaluate propagation delay paths        PropDelay := VitalSelectPathDelay (OutTemp, GlitchData.LastValue,                                           OutSignalName, Paths, DefaultDelay,	                    				   IgnoreDefaultDelay);        GlitchData.LastValue := OutTemp;        VitalGlitch (OutSignal, GlitchData, OutSignalName, OutTemp,                     PropDelay, Mode, XOn, NegPreemptOn, MsgOn, MsgSeverity );    END VitalPathDelay01;    ---------------------------------------------------------------------------    PROCEDURE VitalPathDelay01Z (        SIGNAL   OutSignal          : OUT   std_logic;        VARIABLE GlitchData         : INOUT VitalGlitchDataType;        CONSTANT OutSignalName      : IN    string;        CONSTANT OutTemp            : IN    std_logic;        CONSTANT Paths              : IN    VitalPathArray01ZType;        CONSTANT DefaultDelay       : IN    VitalDelayType01Z   := VitalZeroDelay01Z;        CONSTANT Mode               : IN    VitalGlitchKindType := OnEvent;        CONSTANT XOn                : IN    BOOLEAN             := TRUE;        CONSTANT MsgOn              : IN    BOOLEAN             := TRUE;        CONSTANT MsgSeverity        : IN    SEVERITY_LEVEL      := WARNING;        CONSTANT OutputMap          : IN    VitalOutputMapType	:= VitalDefaultOutputMap;        CONSTANT NegPreemptOn       : IN    BOOLEAN             := FALSE;	--IR225	3/14/98        CONSTANT IgnoreDefaultDelay : IN    BOOLEAN             := FALSE;       --IR248 3/14/98        CONSTANT RejectFastPath     : IN    BOOLEAN             := FALSE        --IR250     ) IS         VARIABLE PropDelay : TIME;      BEGIN       -- Check if the new value to be scheduled is different than the       -- previously scheduled value        IF (GlitchData.SchedTime <= NOW) AND           (GlitchData.SchedValue = OutTemp)             THEN RETURN;       -- Check if the new value to be Scheduled is the same as the       -- previously scheduled output transactions.  If this condition       -- exists and the new scheduled time is < the current GlitchData.       -- schedTime then a fast path condition exists (IR250).  If the        -- modeler wants this condition rejected by setting the        -- RejectFastPath actual to true then exit out.          ELSIF (GlitchData.SchedValue=OutTemp)  AND (RejectFastPath)             THEN RETURN;        END IF;     	        -- Evaluate propagation delay paths        PropDelay := VitalSelectPathDelay (OutTemp, GlitchData.LastValue,                                           OutSignalName, Paths, DefaultDelay,	                    				   IgnoreDefaultDelay);        GlitchData.LastValue := OutTemp;			        -- Schedule the output transactions - including glitch handling          VitalGlitch (OutSignal, GlitchData, OutSignalName, OutTemp,                     PropDelay, Mode, XOn, NegPreemptOn, MsgOn, MsgSeverity );    END VitalPathDelay01Z;    ----------------------------------------------------------------------------    PROCEDURE VitalWireDelay (            SIGNAL   OutSig  : OUT   std_ulogic;            SIGNAL   InSig   : IN    std_ulogic;            CONSTANT twire   : IN    VitalDelayType    ) IS    BEGIN        OutSig <= TRANSPORT InSig AFTER twire;    END VitalWireDelay;        PROCEDURE VitalWireDelay (            SIGNAL   OutSig  : OUT   std_ulogic;            SIGNAL   InSig   : IN    std_ulogic;            CONSTANT twire   : IN    VitalDelayType01    ) IS       VARIABLE Delay   : TIME;    BEGIN        Delay := VitalCalcDelay( InSig, InSig'LAST_VALUE, twire );        OutSig <= TRANSPORT InSig AFTER Delay;    END VitalWireDelay;        PROCEDURE VitalWireDelay (            SIGNAL   OutSig  : OUT   std_ulogic;            SIGNAL   InSig   : IN    std_ulogic;            CONSTANT twire   : IN    VitalDelayType01Z    ) IS       VARIABLE Delay   : TIME;    BEGIN        Delay := VitalCalcDelay( InSig, InSig'LAST_VALUE, twire );        OutSig <= TRANSPORT InSig AFTER Delay;    END VitalWireDelay;        ----------------------------------------------------------------------------    PROCEDURE VitalSignalDelay (            SIGNAL   OutSig     : OUT   std_ulogic;            SIGNAL   InSig      : IN    std_ulogic;            CONSTANT dly        : IN   TIME    ) IS    BEGIN        OutSig <= TRANSPORT InSig AFTER dly;    END;    ---------------------------------------------------------------------------    ---------------------------------------------------------------------------    -- Setup and Hold Time Check Routine     ---------------------------------------------------------------------------    ---------------------------------------------------------------------------    PROCEDURE ReportViolation (            CONSTANT TestSignalName : IN STRING := "";            CONSTANT RefSignalName  : IN STRING := "";            CONSTANT HeaderMsg      : IN STRING := " ";            CONSTANT CheckInfo      : IN CheckInfoType;            CONSTANT MsgSeverity    : IN SEVERITY_LEVEL := WARNING    ) IS        VARIABLE Message : LINE;    BEGIN        IF NOT CheckInfo.Violation THEN RETURN; END IF;        Write ( Message, HeaderMsg );        Case CheckInfo.CheckKind IS          WHEN    SetupCheck => Write ( Message, STRING'(" SETUP ")      );          WHEN     HoldCheck => Write ( Message, STRING'(" HOLD ")       );          WHEN RecoveryCheck => Write ( Message, STRING'(" RECOVERY ")   );          WHEN  RemovalCheck => Write ( Message, STRING'(" REMOVAL ")    );          WHEN PulseWidCheck => Write ( Message, STRING'(" PULSE WIDTH "));          WHEN   PeriodCheck => Write ( Message, STRING'(" PERIOD ")     );

⌨️ 快捷键说明

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