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

📄 memory_b.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 5 页
字号:
          PropDelay := CurPropDelay;        END IF;        IF (OutputRetainFlag = TRUE) THEN          IF (CurRetainDelay < RetainDelay) THEN            RetainDelay := CurRetainDelay;          END IF;        END IF;      END IF;    END LOOP;     -- Store it back to data strucutre    ScheduleDataArrayNorm(OutBitPos).PropDelay := PropDelay;    ScheduleDataArrayNorm(OutBitPos).OutputRetainDelay:= RetainDelay;    ScheduleDataArrayNorm(OutBitPos).InputAge := InputAge;    -- for debug purpose     PrintDelay(outbitPos,InputArrayLow, InputArrayHigh,      debugprop, debugretain);  END LOOP;  ScheduleDataArray := ScheduleDataArrayNorm;END VitalMemorySelectDelay;-- ------------------------------------------------------------------------------ VitalDelayArrayType01Z-- ----------------------------------------------------------------------------PROCEDURE VitalMemorySelectDelay (  VARIABLE ScheduleDataArray    : INOUT VitalMemoryScheduleDataVectorType;  VARIABLE InputChangeTimeArray : IN VitalTimeArrayT;  CONSTANT OutputSignalName     : IN STRING :="";  CONSTANT PathDelayArray       : IN VitalDelayArrayType01Z;  CONSTANT ArcType              : IN VitalMemoryArcType;  CONSTANT PathConditionArray   : IN VitalBoolArrayT;  CONSTANT OutputRetainFlag     : IN BOOLEAN) IS  VARIABLE InputArrayLow      : INTEGER := 0;  VARIABLE InputArrayHigh     : INTEGER := 0;  VARIABLE DelayArrayIndex    : INTEGER := 0;  VARIABLE NumBitsPerSubWord  : INTEGER := DefaultNumBitsPerSubword;  VARIABLE NewValue           : STD_ULOGIC;  VARIABLE OldValue           : STD_ULOGIC;  VARIABLE OutputLength       : INTEGER := 0;  VARIABLE OutArrayIndex      : INTEGER;  VARIABLE PropDelay          : TIME;  VARIABLE RetainDelay        : TIME;  VARIABLE CurPropDelay       : TIME;  VARIABLE CurRetainDelay     : TIME;  VARIABLE InputAge           : TIME;  VARIABLE CurInputAge        : TIME;  VARIABLE InputChangeTimeNorm  : VitalTimeArrayT(     InputChangeTimeArray'LENGTH-1 downto 0):=InputChangeTimeArray;  VARIABLE DelayArrayNorm  : VitalDelayArrayType01Z(     PathDelayArray'LENGTH-1 downto 0):= PathDelayArray;  VARIABLE ScheduleDataArrayNorm : VitalMemoryScheduleDatavectorType     (ScheduleDataArray'LENGTH-1 downto 0):=ScheduleDataArray;     -- for debug purpose  VARIABLE debugprop : VitalTimeArrayT(MaxNoInputBits-1 downto 0);  VARIABLE debugretain : VitalTimeArrayT(MaxNoInputBits-1 downto 0);BEGIN  -- for debug purpose  PrintArcType(ArcType);  OutputLength := ScheduleDataArray'LENGTH;    FOR OutBitPos IN 0 to (OutputLength -1) LOOP    NEXT WHEN PathConditionArray(OutBitPos) = FALSE;    NEXT WHEN ((ScheduleDataArrayNorm(OutBitPos).ScheduleValue       = ScheduleDataArrayNorm(OutBitPos).OutputData) AND         (ScheduleDataArrayNorm(OutBitPos).ScheduleTime <= NOW) AND        (OutputRetainFlag = FALSE));    NewValue := ScheduleDataArrayNorm(OutBitPos).OutputData;    OldValue := ScheduleDataArrayNorm(OutBitPos).LastOutputValue;    PropDelay :=ScheduleDataArrayNorm(OutBitPos).PropDelay;    InputAge := ScheduleDataArrayNorm(OutBitPos).InputAge;    RetainDelay:=ScheduleDataArrayNorm(OutBitPos).OutputRetainDelay;    NumBitsPerSubWord:=ScheduleDataArrayNorm(OutBitPos).NumBitsPerSubWord;    CASE ArcType IS      WHEN ParallelArc =>        InputArrayLow := OutBitPos;        InputArrayHigh :=  OutBitPos;        DelayArrayIndex :=  OutBitPos;      WHEN CrossArc =>        InputArrayLow := 0;        InputArrayHigh := InputChangeTimeArray'LENGTH-1;        DelayArrayIndex := OutBitPos;       WHEN SubwordArc =>        InputArrayLow := OutBitPos / NumBitsPerSubWord;        InputArrayHigh := OutBitPos / NumBitsPerSubWord;        DelayArrayIndex := OutBitPos +           (OutputLength * (OutBitPos / NumBitsPerSubWord));      END CASE;    FOR i IN InputArrayLow TO InputArrayHigh LOOP      (CurPropDelay, CurRetainDelay) :=         VitalMemoryCalcDelay (          NewValue, OldValue, DelayArrayNorm(DelayArrayIndex)        );      IF (OutputRetainFlag = FALSE) THEN        CurRetainDelay := TIME'HIGH;      END IF;              -- for debug purpose      debugprop(i) := CurPropDelay;      debugretain(i) := CurRetainDelay;                             IF (ArcType = CrossArc) THEN        DelayArrayIndex := DelayArrayIndex + OutputLength;      END IF;      -- If there is one input change at a time, then choose the      -- delay from that input. If there is simultaneous input       -- change, then choose the minimum of propagation delays       IF (InputChangeTimeNorm(i) < 0 ns) THEN        CurInputAge := TIME'HIGH;      ELSE        CurInputAge := NOW - InputChangeTimeNorm(i);      END IF;                  IF (CurInputAge  < InputAge) THEN        PropDelay := CurPropDelay;        RetainDelay := CurRetainDelay;        InputAge := CurInputAge;      ELSIF (CurInputAge = InputAge) THEN        IF (CurPropDelay < PropDelay) THEN          PropDelay := CurPropDelay;        END IF;        IF (OutputRetainFlag = TRUE) THEN          IF (CurRetainDelay < RetainDelay) THEN            RetainDelay := CurRetainDelay;          END IF;        END IF;      END IF;    END LOOP;     -- Store it back to data strucutre    ScheduleDataArrayNorm(OutBitPos).PropDelay := PropDelay;    ScheduleDataArrayNorm(OutBitPos).OutputRetainDelay:= RetainDelay;    ScheduleDataArrayNorm(OutBitPos).InputAge := InputAge;    -- for debug purpose     PrintDelay(outbitPos, InputArrayLow, InputArrayHigh,       debugprop, debugretain);  END LOOP;  ScheduleDataArray := ScheduleDataArrayNorm;END VitalMemorySelectDelay;-- ------------------------------------------------------------------------------ VitalDelayArrayType01-- ----------------------------------------------------------------------------PROCEDURE VitalMemorySelectDelay (  VARIABLE ScheduleDataArray    : INOUT VitalMemoryScheduleDataVectorType;  VARIABLE InputChangeTimeArray : IN    VitalTimeArrayT;  CONSTANT OutputSignalName     : IN    STRING :="";  CONSTANT PathDelayArray       : IN    VitalDelayArrayType01;  CONSTANT ArcType              : IN    VitalMemoryArcType;  CONSTANT PathConditionArray   : IN VitalBoolArrayT) IS  VARIABLE CurPathDelay       : VitalMemoryDelayType;  VARIABLE InputArrayLow      : INTEGER := 0;  VARIABLE InputArrayHigh     : INTEGER := 0;  VARIABLE DelayArrayIndex    : INTEGER := 0;  VARIABLE NumBitsPerSubWord  : INTEGER := DefaultNumBitsPerSubword;  VARIABLE NewValue           : STD_ULOGIC;  VARIABLE OldValue           : STD_ULOGIC;  VARIABLE OutputLength       : INTEGER := 0;  VARIABLE OutArrayIndex      : INTEGER;  VARIABLE PropDelay          : TIME;  VARIABLE CurPropDelay       : TIME;  VARIABLE InputAge           : TIME;  VARIABLE CurInputAge        : TIME;  VARIABLE InputChangeTimeNorm  : VitalTimeArrayT(     InputChangeTimeArray'LENGTH-1 downto 0):= InputChangeTimeArray;  VARIABLE DelayArrayNorm  : VitalDelayArrayType01(     PathDelayArray'LENGTH-1 downto 0):= PathDelayArray;  VARIABLE ScheduleDataArrayNorm : VitalMemoryScheduleDatavectorType     (ScheduleDataArray'LENGTH-1 downto 0):=ScheduleDataArray;     -- for debug purpose  VARIABLE debugprop : VitalTimeArrayT(MaxNoInputBits-1 downto 0);  VARIABLE debugretain : VitalTimeArrayT(MaxNoInputBits-1 downto 0);BEGIN  -- for debug purpose  PrintArcType(ArcType);  OutputLength := ScheduleDataArray'LENGTH;  FOR OutBitPos IN 0 to (OutputLength -1) LOOP    NEXT WHEN PathConditionArray(OutBitPos) = FALSE;    NEXT WHEN ((ScheduleDataArrayNorm(OutBitPos).ScheduleValue     = ScheduleDataArrayNorm(OutBitPos).OutputData) AND     (ScheduleDataArrayNorm(OutBitPos).ScheduleTime <= NOW));    NewValue := ScheduleDataArrayNorm(OutBitPos).OutputData;    OldValue := ScheduleDataArrayNorm(OutBitPos).LastOutputValue;    PropDelay :=ScheduleDataArrayNorm(OutBitPos).PropDelay;    InputAge := ScheduleDataArrayNorm(OutBitPos).InputAge;    NumBitsPerSubWord:=ScheduleDataArrayNorm(OutBitPos).NumBitsPerSubWord;    CASE ArcType IS      WHEN ParallelArc =>        InputArrayLow := OutBitPos;        InputArrayHigh :=  OutBitPos;        DelayArrayIndex :=  OutBitPos;      WHEN CrossArc =>        InputArrayLow := 0;        InputArrayHigh := InputChangeTimeArray'LENGTH-1;        DelayArrayIndex := OutBitPos;       WHEN SubwordArc =>        InputArrayLow := OutBitPos / NumBitsPerSubWord;        InputArrayHigh := OutBitPos / NumBitsPerSubWord;        DelayArrayIndex := OutBitPos +           (OutputLength * (OutBitPos / NumBitsPerSubWord));      END CASE;    FOR i IN InputArrayLow TO InputArrayHigh LOOP      CurPropDelay:= VitalCalcDelay (NewValue,                   OldValue, DelayArrayNorm(DelayArrayIndex));      -- for debug purpose      debugprop(i) := CurPropDelay;      debugretain(i) := TIME'HIGH;                             IF (ArcType = CrossArc) THEN        DelayArrayIndex := DelayArrayIndex + OutputLength;      END IF;      -- If there is one input change at a time, then choose the      -- delay from that input. If there is simultaneous input       -- change, then choose the minimum of propagation delays       IF (InputChangeTimeNorm(i) < 0 ns) THEN        CurInputAge := TIME'HIGH;      ELSE        CurInputAge := NOW - InputChangeTimeNorm(i);      END IF;                  IF (CurInputAge  < InputAge) THEN        PropDelay := CurPropDelay;        InputAge := CurInputAge;      ELSIF (CurInputAge = InputAge) THEN        IF (CurPropDelay < PropDelay) THEN          PropDelay := CurPropDelay;        END IF;      END IF;    END LOOP;      -- Store it back to data strucutre    ScheduleDataArrayNorm(OutBitPos).PropDelay := PropDelay;    ScheduleDataArrayNorm(OutBitPos).InputAge := InputAge;    -- for debug purpose     PrintDelay(outbitPos, InputArrayLow, InputArrayHigh,      debugprop, debugretain);  END LOOP;  ScheduleDataArray := ScheduleDataArrayNorm;END VitalMemorySelectDelay;-- ------------------------------------------------------------------------------ VitalDelayArrayType-- ----------------------------------------------------------------------------PROCEDURE VitalMemorySelectDelay (  VARIABLE ScheduleDataArray : INOUT VitalMemoryScheduleDataVectorType;  VARIABLE InputChangeTimeArray : IN VitalTimeArrayT;  CONSTANT OutputSignalName     : IN STRING :="";  CONSTANT PathDelayArray       : IN VitalDelayArrayType;  CONSTANT ArcType              : IN VitalMemoryArcType;  CONSTANT PathConditionArray   : IN VitalBoolArrayT) IS  VARIABLE InputArrayLow      : INTEGER := 0;  VARIABLE InputArrayHigh     : INTEGER := 0;  VARIABLE DelayArrayIndex    : INTEGER := 0;  VARIABLE NumBitsPerSubWord  : INTEGER := DefaultNumBitsPerSubword;  VARIABLE NewValue           : STD_ULOGIC;  VARIABLE OldValue           : STD_ULOGIC;  VARIABLE OutputLength       : INTEGER := 0;  VARIABLE OutArrayIndex      : INTEGER;  VARIABLE PropDelay          : TIME;  VARIABLE CurPropDelay       : TIME;  VARIABLE InputAge           : TIME;  VARIABLE CurInputAge        : TIME;  VARIABLE InputChangeTimeNorm  : VitalTimeArrayT(     InputChangeTimeArray'LENGTH-1 downto 0) := InputChangeTimeArray;  VARIABLE DelayArrayNorm  : VitalDelayArrayType(     PathDelayArray'LENGTH-1 downto 0) := PathDelayArray;  VARIABLE ScheduleDataArrayNorm : VitalMemoryScheduleDatavectorType     (ScheduleDataArray'LENGTH-1 downto 0) := ScheduleDataArray;     -- for debug purpose  VARIABLE debugprop : VitalTimeArrayT(MaxNoInputBits-1 downto 0);  VARIABLE debugretain : VitalTimeArrayT(MaxNoInputBits-1 downto 0);BEGIN    -- for debug purpose  PrintArcType(ArcType);  OutputLength := ScheduleDataArray'LENGTH;  FOR OutBitPos IN 0 to (OutputLength -1) LOOP    NEXT WHEN PathConditionArray(OutBitPos) = FALSE;    NEXT WHEN ((ScheduleDataArrayNorm(OutBitPos).ScheduleValue       = ScheduleDataArrayNorm(OutBitPos).OutputData) AND         (ScheduleDataArrayNorm(OutBitPos).ScheduleTime <= NOW));    NewValue := ScheduleDataArrayNorm(OutBitPos).OutputData;    OldValue := ScheduleDataArrayNorm(OutBitPos).LastOutputValue;    PropDelay :=ScheduleDataArrayNorm(OutBitPos).PropDelay;    InputAge := ScheduleDataArrayNorm(OutBitPos).InputAge;    NumBitsPerSubWord:=ScheduleDataArrayNorm(OutBitPos).NumBitsPerSubWord;    CASE ArcType IS      WHEN ParallelArc =>        InputArrayLow := OutBitPos;        InputArrayHigh :=  OutBitPos;        DelayArrayIndex :=  OutBitPos;      WHEN CrossArc =>        InputArrayLow := 0;        InputArrayHigh := InputChangeTimeArray'LENGTH-1;        DelayArrayIndex := OutBitPos;       WHEN SubwordArc =>        InputArrayLow := OutBitPos / NumBitsPerSubWord;        InputArrayHigh := OutBitPos / NumBitsPerSubWord;        DelayArrayIndex := OutBitPos +           (OutputLength * (OutBitPos / NumBitsPerSubWord));      END CASE;    FOR i IN InputArrayLow TO InputArrayHigh LOOP      CurPropDelay := VitalCalcDelay (NewValue,         OldValue, DelayArrayNorm(DelayArrayIndex)); 

⌨️ 快捷键说明

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