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

📄 memory_b.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 5 页
字号:
      -- 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;-- ------------------------------------------------------------------------------ Procedure:   VitalMemoryInitPathDelay-- Description: To initialize Schedule Data structure for an--              output.-- ----------------------------------------------------------------------------PROCEDURE VitalMemoryInitPathDelay (  VARIABLE ScheduleDataArray : INOUT VitalMemoryScheduleDataVectorType;  VARIABLE OutputDataArray   : IN STD_LOGIC_VECTOR;  CONSTANT NumBitsPerSubWord : IN INTEGER := DefaultNumBitsPerSubword) ISBEGIN  -- Initialize the ScheduleData Structure.  FOR i IN OutputDataArray'RANGE LOOP            ScheduleDataArray(i).OutputData    := OutputDataArray(i);     ScheduleDataArray(i).PropDelay     := TIME'HIGH;    ScheduleDataArray(i).OutputRetainDelay := TIME'HIGH;    ScheduleDataArray(i).InputAge      := TIME'HIGH;    ScheduleDataArray(i).NumBitsPerSubWord := NumBitsPerSubWord;    -- Update LastOutputValue of Output if the Output has     -- already been scheduled.    IF ((ScheduleDataArray(i).ScheduleValue /= OutputDataArray(i)) AND        (ScheduleDataArray(i).ScheduleTime <= NOW)) THEN       ScheduleDataArray(i).LastOutputValue                 := ScheduleDataArray(i).ScheduleValue;    END IF;                                     END LOOP;   -- for debug purpose  DebugMsg1;  PrintScheduleDataArray(ScheduleDataArray);END VitalMemoryInitPathDelay;-- ----------------------------------------------------------------------------PROCEDURE VitalMemoryInitPathDelay (  VARIABLE ScheduleData : INOUT VitalMemoryScheduleDataType;  VARIABLE OutputData   : IN STD_ULOGIC) IS  VARIABLE ScheduledataArray: VitalMemoryScheduleDataVectorType                                        (0 downto 0);  VARIABLE OutputDataArray  : STD_LOGIC_VECTOR(0 downto 0);BEGIN  ScheduledataArray(0) := ScheduleData;  OutputDataArray(0)   := OutputData;  VitalMemoryInitPathDelay (    ScheduleDataArray => ScheduleDataArray,    OutputDataArray   => OutputDataArray,    NumBitsPerSubWord => DefaultNumBitsPerSubword  );  -- for debug purpose  DebugMsg1;  PrintScheduleDataArray( ScheduleDataArray);END VitalMemoryInitPathDelay;-- ------------------------------------------------------------------------------ Procedure:   VitalMemoryAddPathDelay-- Description: Declare a path for one scalar/vector input to --              the output for which Schedule Data has been--              initialized previously.-- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ #1-- DelayType - VitalMemoryDelayType-- Input     - Scalar -- Output    - Scalar -- Delay     - Scalar -- Condition - Scalar PROCEDURE VitalMemoryAddPathDelay (  VARIABLE ScheduleData      : INOUT VitalMemoryScheduleDataType;  SIGNAL   InputSignal       : IN STD_ULOGIC;  CONSTANT OutputSignalName  : IN STRING :="";  VARIABLE InputChangeTime   : INOUT TIME;  CONSTANT PathDelay         : IN VitalDelayType;  CONSTANT ArcType           : IN VitalMemoryArcType := CrossArc;  CONSTANT PathCondition     : IN BOOLEAN := TRUE) IS  VARIABLE ScheduleDataArray :               VitalMemoryScheduleDataVectorType(0 downto 0);  VARIABLE PathDelayArray : VitalDelayArrayType(0 downto 0);  VARIABLE InputChangeTimeArray : VitalTimeArrayT(0 downto 0);   VARIABLE PathConditionArray : VitalBoolArrayT(0 downto 0); BEGIN  PathConditionArray(0) := PathCondition;  ScheduleDataArray(0) := ScheduleData;  PathDelayArray(0) := PathDelay;  VitalMemoryUpdateInputChangeTime(InputChangeTime, InputSignal);  InputChangeTimeArray(0) := InputChangeTime;               VitalMemorySelectDelay(    ScheduleDataArray, InputChangeTimeArray,    OutputSignalName, PathDelayArray,     ArcType, PathConditionArray);END VitalMemoryAddPathDelay;-- ------------------------------------------------------------------------------ #2-- DelayType - VitalMemoryDelayType-- Input     - Scalar -- Output    - Vector -- Delay     - Vector -- Condition - Scalar PROCEDURE VitalMemoryAddPathDelay (  VARIABLE ScheduleDataArray  : INOUT VitalMemoryScheduleDataVectorType;  SIGNAL   InputSignal        : IN STD_ULOGIC;  CONSTANT OutputSignalName   : IN STRING :="";  VARIABLE InputChangeTime    : INOUT TIME;  CONSTANT PathDelayArray     : IN VitalDelayArrayType;  CONSTANT ArcType            : IN VitalMemoryArcType := CrossArc;  CONSTANT PathCondition      : IN BOOLEAN := TRUE) IS  VARIABLE InputChangeTimeArray : VitalTimeArrayT(0 downto 0);  VARIABLE PathConditionArray :      VitalBoolArrayT(ScheduleDataArray'LENGTH-1 downto 0);BEGIN  FOR i IN PathConditionArray'RANGE LOOP    PathConditionArray(i) := PathCondition;  END LOOP;  VitalMemoryUpdateInputChangeTime(InputChangeTime, InputSignal);  InputChangeTimeArray(0) := InputChangeTime;   VitalMemorySelectDelay(    ScheduleDataArray, InputChangeTimeArray,     OutputSignalName, PathDelayArray,     ArcType, PathConditionArray  );END VitalMemoryAddPathDelay;-- ------------------------------------------------------------------------------ #3-- DelayType - VitalMemoryDelayType-- Input     - Scalar-- Output    - Vector-- Delay     - Vector-- Condition - VectorPROCEDURE VitalMemoryAddPathDelay (  VARIABLE ScheduleDataArray  : INOUT VitalMemoryScheduleDataVectorType;  SIGNAL   InputSignal        : IN STD_ULOGIC;  CONSTANT OutputSignalName   : IN STRING :="";  VARIABLE InputChangeTime    : INOUT TIME;  CONSTANT PathDelayArray     : IN VitalDelayArrayType;  CONSTANT ArcType            : IN VitalMemoryArcType := CrossArc;  CONSTANT PathConditionArray : IN VitalBoolArrayT) IS  VARIABLE InputChangeTimeArray : VitalTimeArrayT(0 downto 0);  VARIABLE NumBitsPerSubword : INTEGER;  VARIABLE PathConditionArrayNorm :       VitalBoolArrayT(PathConditionArray'LENGTH-1 downto 0) := PathConditionArray; -- IR Mem400   VARIABLE PathConditionArrayExp :       VitalBoolArrayT(ScheduleDataArray'LENGTH-1 downto 0); BEGIN  NumBitsPerSubword :=     ScheduleDataArray(ScheduleDataArray'RIGHT).NumBitsPerSubword;  FOR i IN PathConditionArrayExp'RANGE LOOP    PathConditionArrayExp(i) := PathConditionArrayNorm(i/NumBitsPerSubword);  END LOOP;  VitalMemoryUpdateInputChangeTime(InputChangeTime, InputSignal);  InputChangeTimeArray(0) := InputChangeTime;  VitalMemorySelectDelay(    ScheduleDataArray, InputChangeTimeArray,    OutputSignalName, PathDelayArray,     ArcType, PathConditionArrayExp);END VitalMemoryAddPathDelay;-- ------------------------------------------------------------------------------ #4-- DelayType - VitalMemoryDelayType-- Input     - Vector-- Output    - Scalar -- Delay     - Vector -- Condition - Scalar PROCEDURE VitalMemoryAddPathDelay (  VARIABLE ScheduleData         : INOUT VitalMemoryScheduleDataType;  SIGNAL   InputSignal          : IN STD_LOGIC_VECTOR;  CONSTANT OutputSignalName     : IN STRING :="";  VARIABLE InputChangeTimeArray : INOUT VitalTimeArrayT;  CONSTANT PathDelayArray       : IN VitalDelayArrayType;  CONSTANT ArcType              : IN VitalMemoryArcType := CrossArc;  CONSTANT PathCondition        : IN BOOLEAN := TRUE) IS  VARIABLE ScheduleDataArray : VitalMemoryScheduleDataVectorType(0 downto 0);  VARIABLE PathConditionArray : VitalBoolArrayT(0 downto 0); BEGIN  PathConditionArray(0) := PathCondition;  ScheduleDataArray(0) := ScheduleData;  VitalMemoryUpdateInputChangeTime(InputChangeTimeArray, InputSignal);      VitalMemorySelectDelay(    ScheduleDataArray, InputChangeTimeArray,     OutputSignalName, PathDelayArray,     ArcType, PathConditionArray);END VitalMemoryAddPathDelay;-- ------------------------------------------------------------------------------ #5-- DelayType - VitalMemoryDelayType-- Input     - Vector-- Output    - Vector-- Delay     - Vector -- Condition - Scalar PROCEDURE VitalMemoryAddPathDelay (  VARIABLE ScheduleDataArray  : INOUT VitalMemoryScheduleDataVectorType;  SIGNAL   InputSignal        : IN STD_LOGIC_VECTOR;  CONSTANT OutputSignalName   : IN STRING :="";  VARIABLE InputChangeTimeArray  : INOUT VitalTimeArrayT;  CONSTANT PathDelayArray        : IN VitalDelayArrayType;  CONSTANT ArcType               : IN VitalMemoryArcType := CrossArc;   CONSTANT PathCondition         : IN BOOLEAN := TRUE) IS  VARIABLE PathConditionArray :       VitalBoolArrayT(ScheduleDataArray'LENGTH-1 downto 0); BEGIN  FOR i IN PathConditionArray'RANGE LOOP    PathConditionArray(i) := PathCondition;  END LOOP;  VitalMemoryUpdateInputChangeTime(InputChangeTimeArray, InputSignal);   VitalMemorySelectDelay(    ScheduleDataArray, InputChangeTimeArray,     OutputSignalName, PathDelayArray,    ArcType, PathConditionArray);END VitalMemoryAddPathDelay;-- ------------------------------------------------------------------------------ #6-- DelayType - VitalMemoryDelayType-- Input     - Vector-- Output    - Vector-- Delay     - Vector-- Condition - VectorPROCEDURE VitalMemoryAddPathDelay (  VARIABLE ScheduleDataArray  : INOUT VitalMemoryScheduleDataVectorType;  SIGNAL   InputSignal        : IN STD_LOGIC_VECTOR;  CONSTANT OutputSignalName   : IN STRING :="";  VARIABLE InputChangeTimeArray  : INOUT VitalTimeArrayT;  CONSTANT PathDelayArray        : IN VitalDelayArrayType;  CONSTANT ArcType               : IN VitalMemoryArcType := CrossArc;  CONSTANT PathConditionArray    : IN VitalBoolArrayT) IS  VARIABLE NumBitsPerSubword : INTEGER;  VARIABLE PathConditionArrayNorm :       VitalBoolArrayT(PathConditionArray'LENGTH-1 downto 0) := PathConditionArray; -- IR MEM400;   VARIABLE PathConditionArrayExp :       VitalBoolArrayT(ScheduleDataArray'LENGTH-1 downto 0); BEGIN  NumBitsPerSubword :=       ScheduleDataArray(ScheduleDataArray'RIGHT).NumBitsPerSubword;  FOR i IN PathConditionArrayExp'RANGE LOOP    PathConditionArrayExp(i) := PathConditionArrayNorm(i/NumBitsPerSubword);  END LOOP;  VitalMemoryUpdateInputChangeTime(InputChangeTimeArray, InputSignal);  VitalMemorySelectDelay(    ScheduleDataArray, InputChangeTimeArray,    OutputSignalName, PathDelayArray,     ArcType, PathConditionArrayExp);END VitalMemoryAddPathDelay;-- ------------------------------------------------------------------------------ #7-- DelayType - VitalMemoryDelayType01-- Input     - Scalar-- Output    - Scalar-- Delay     - Scalar -- Condition - Scalar PROCEDURE VitalMemoryAddPathDelay (  VARIABLE ScheduleData      : INOUT VitalMemoryScheduleDataType;  SIGNAL   InputSignal       : IN STD_ULOGIC;  CONSTANT OutputSignalName  : IN STRING :="";  VARIABLE InputChangeTime   : INOUT TIME;  CONSTANT PathDelay         : IN VitalDelayType01;  CONSTANT ArcType           : IN VitalMemoryArcType := CrossArc;   CONSTANT PathCondition     : IN BOOLEAN := TRUE) IS  VARIABLE ScheduleDataArray :            VitalMemoryScheduleDataVectorType(0 downto 0);  VARIABLE PathDelayArray : VitalDelayArrayType01(0 downto 0);  VARIABLE InputChangeTimeArray : VitalTimeArrayT(0 downto 0);   VARIABLE PathConditionArray : VitalBoolArrayT(0 downto 0); BEGIN  PathConditionArray(0) := PathCondition;  ScheduleDataArray(0) := ScheduleData;  PathDelayArray(0) := PathDelay;  VitalMemoryUpdateInputChangeTime(InputChangeTime, InputSignal);  InputChangeTimeArray(0) := InputC

⌨️ 快捷键说明

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