📄 memory_b.vhdl
字号:
-- 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 + -