📄 memory_p.vhdl
字号:
CONSTANT TestSignalName : IN STRING := ""; CONSTANT TestDelay : IN VitalDelayArrayType; SIGNAL RefSignal : IN std_ulogic; CONSTANT RefSignalName : IN STRING := ""; CONSTANT RefDelay : IN TIME := 0 ns; CONSTANT SetupHigh : IN VitalDelayArrayType; CONSTANT SetupLow : IN VitalDelayArrayType; CONSTANT HoldHigh : IN VitalDelayArrayType; CONSTANT HoldLow : IN VitalDelayArrayType; CONSTANT CheckEnabled : IN VitalBoolArrayT; CONSTANT RefTransition : IN VitalEdgeSymbolType; CONSTANT ArcType : IN VitalMemoryArcType := CrossArc; CONSTANT NumBitsPerSubWord : IN INTEGER := 1; CONSTANT HeaderMsg : IN STRING := " "; CONSTANT XOn : IN BOOLEAN := TRUE; CONSTANT MsgOn : IN BOOLEAN := TRUE; CONSTANT MsgSeverity : IN SEVERITY_LEVEL := WARNING; CONSTANT MsgFormat : IN VitalMemoryMsgFormatType; CONSTANT EnableSetupOnTest : IN BOOLEAN := TRUE; CONSTANT EnableSetupOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnTest : IN BOOLEAN := TRUE ); PROCEDURE VitalMemorySetupHoldCheck ( VARIABLE Violation : OUT X01ArrayT; VARIABLE TimingData : INOUT VitalMemoryTimingDataType; SIGNAL TestSignal : IN std_logic_vector; CONSTANT TestSignalName : IN STRING := ""; CONSTANT TestDelay : IN VitalDelayArrayType; SIGNAL RefSignal : IN std_logic_vector; CONSTANT RefSignalName : IN STRING := ""; CONSTANT RefDelay : IN VitalDelayArrayType; CONSTANT SetupHigh : IN VitalDelayArrayType; CONSTANT SetupLow : IN VitalDelayArrayType; CONSTANT HoldHigh : IN VitalDelayArrayType; CONSTANT HoldLow : IN VitalDelayArrayType; CONSTANT CheckEnabled : IN BOOLEAN := TRUE; CONSTANT RefTransition : IN VitalEdgeSymbolType; CONSTANT ArcType : IN VitalMemoryArcType := CrossArc; CONSTANT NumBitsPerSubWord : IN INTEGER := 1; CONSTANT HeaderMsg : IN STRING := " "; CONSTANT XOn : IN BOOLEAN := TRUE; CONSTANT MsgOn : IN BOOLEAN := TRUE; CONSTANT MsgSeverity : IN SEVERITY_LEVEL := WARNING; CONSTANT MsgFormat : IN VitalMemoryMsgFormatType; CONSTANT EnableSetupOnTest : IN BOOLEAN := TRUE; CONSTANT EnableSetupOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnTest : IN BOOLEAN := TRUE ); PROCEDURE VitalMemorySetupHoldCheck ( VARIABLE Violation : OUT X01ArrayT; VARIABLE TimingData : INOUT VitalMemoryTimingDataType; SIGNAL TestSignal : IN std_logic_vector; CONSTANT TestSignalName : IN STRING := ""; CONSTANT TestDelay : IN VitalDelayArrayType; SIGNAL RefSignal : IN std_logic_vector; CONSTANT RefSignalName : IN STRING := ""; CONSTANT RefDelay : IN VitalDelayArrayType; CONSTANT SetupHigh : IN VitalDelayArrayType; CONSTANT SetupLow : IN VitalDelayArrayType; CONSTANT HoldHigh : IN VitalDelayArrayType; CONSTANT HoldLow : IN VitalDelayArrayType; CONSTANT CheckEnabled : IN VitalBoolArrayT; CONSTANT RefTransition : IN VitalEdgeSymbolType; CONSTANT ArcType : IN VitalMemoryArcType := CrossArc; CONSTANT NumBitsPerSubWord : IN INTEGER := 1; CONSTANT HeaderMsg : IN STRING := " "; CONSTANT XOn : IN BOOLEAN := TRUE; CONSTANT MsgOn : IN BOOLEAN := TRUE; CONSTANT MsgSeverity : IN SEVERITY_LEVEL := WARNING; CONSTANT MsgFormat : IN VitalMemoryMsgFormatType; CONSTANT EnableSetupOnTest : IN BOOLEAN := TRUE; CONSTANT EnableSetupOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnTest : IN BOOLEAN := TRUE ); --------------- following are not needed --------------------------PROCEDURE VitalMemorySetupHoldCheck ( VARIABLE Violation : OUT X01; VARIABLE TimingData : INOUT VitalMemoryTimingDataType; SIGNAL TestSignal : IN std_logic_vector; CONSTANT TestSignalName : IN STRING := ""; CONSTANT TestDelay : IN VitalDelayArrayType; SIGNAL RefSignal : IN std_ulogic; CONSTANT RefSignalName : IN STRING := ""; CONSTANT RefDelay : IN TIME := 0 ns; CONSTANT SetupHigh : IN VitalDelayArrayType; CONSTANT SetupLow : IN VitalDelayArrayType; CONSTANT HoldHigh : IN VitalDelayArrayType; CONSTANT HoldLow : IN VitalDelayArrayType; CONSTANT CheckEnabled : IN BOOLEAN := TRUE; CONSTANT RefTransition : IN VitalEdgeSymbolType; CONSTANT HeaderMsg : IN STRING := " "; CONSTANT XOn : IN BOOLEAN := TRUE; CONSTANT MsgOn : IN BOOLEAN := TRUE; CONSTANT MsgSeverity : IN SEVERITY_LEVEL := WARNING; CONSTANT MsgFormat : IN VitalMemoryMsgFormatType; CONSTANT EnableSetupOnTest : IN BOOLEAN := TRUE; CONSTANT EnableSetupOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnTest : IN BOOLEAN := TRUE ); PROCEDURE VitalMemorySetupHoldCheck ( VARIABLE Violation : OUT X01; VARIABLE TimingData : INOUT VitalMemoryTimingDataType; SIGNAL TestSignal : IN std_logic_vector; CONSTANT TestSignalName : IN STRING := ""; CONSTANT TestDelay : IN VitalDelayArrayType; SIGNAL RefSignal : IN std_logic_vector; CONSTANT RefSignalName : IN STRING := ""; CONSTANT RefDelay : IN VitalDelayArrayType; CONSTANT SetupHigh : IN VitalDelayArrayType; CONSTANT SetupLow : IN VitalDelayArrayType; CONSTANT HoldHigh : IN VitalDelayArrayType; CONSTANT HoldLow : IN VitalDelayArrayType; CONSTANT CheckEnabled : IN BOOLEAN := TRUE; CONSTANT RefTransition : IN VitalEdgeSymbolType; CONSTANT HeaderMsg : IN STRING := " "; CONSTANT XOn : IN BOOLEAN := TRUE; CONSTANT MsgOn : IN BOOLEAN := TRUE; CONSTANT MsgSeverity : IN SEVERITY_LEVEL := WARNING; CONSTANT ArcType : IN VitalMemoryArcType := CrossArc; CONSTANT NumBitsPerSubWord : IN INTEGER := 1; CONSTANT MsgFormat : IN VitalMemoryMsgFormatType; CONSTANT EnableSetupOnTest : IN BOOLEAN := TRUE; CONSTANT EnableSetupOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnRef : IN BOOLEAN := TRUE; CONSTANT EnableHoldOnTest : IN BOOLEAN := TRUE ); -- -------------------------------------------------------------------------------- Function Name: VitalPeriodPulseCheck---- Description: VitalPeriodPulseCheck checks for minimum and maximum-- periodicity and pulse width for "1" and "0" values of-- the input test signal. The timing constraint is -- specified through parameters representing the minimal-- period between successive rising and falling edges of-- the input test signal and the minimum pulse widths -- associated with high and low values. -- -- VitalPeriodCheck's accepts rising and falling edges-- from 1 and 0 as well as transitions to and from 'X.'-- -- _______________ __________-- ____________| |_______|---- |<--- pw_hi --->|-- |<-------- period ----->|-- -->| pw_lo |<---- -- Arguments:-- IN Type Description-- TestSignal std_logic_vector Value of test signal -- TestSignalName STRING Name of the test signal-- TestDelay VitalDelayArrayType -- Model's internal delay associated-- with TestSignal-- Period VitalDelayArrayType -- Minimum period allowed between-- consecutive rising ('P') or -- falling ('F') transitions.-- PulseWidthHigh VitalDelayArrayType -- Minimum time allowed for a high-- pulse ('1' or 'H')-- PulseWidthLow VitalDelayArrayType -- Minimum time allowed for a low-- pulse ('0' or 'L')-- CheckEnabled BOOLEAN Check performed if TRUE.-- HeaderMsg STRING String that will accompany any-- assertion messages produced. -- XOn BOOLEAN If TRUE, Violation output parameter-- is set to "X". Otherwise, Violation-- is always set to "0." -- MsgOn BOOLEAN If TRUE, period/pulse violation-- message will be generated.-- Otherwise, no messages are generated,-- even though a violation is detected. -- MsgSeverity SEVERITY_LEVEL Severity level for the assertion.-- MsgFormat VitalMemoryMsgFormatType-- Format of the Test/Reference signals-- in violation messages.-- -- INOUT-- PeriodData VitalPeriodDataArrayType -- VitalPeriodPulseCheck information-- storage area. This is used-- internally to detect reference edges-- and record the pulse and period-- times.-- OUT-- Violation X01 This is the violation flag returned. -- X01ArrayT Overloaded for array type.---- ----------------------------------------------------------------------------PROCEDURE VitalMemoryPeriodPulseCheck ( VARIABLE Violation : OUT X01ArrayT; VARIABLE PeriodData : INOUT VitalPeriodDataArrayType; SIGNAL TestSignal : IN std_logic_vector; CONSTANT TestSignalName : IN STRING := ""; CONSTANT TestDelay : IN VitalDelayArrayType; CONSTANT Period : IN VitalDelayArrayType; CONSTANT PulseWidthHigh : IN VitalDelayArrayType; CONSTANT PulseWidthLow : IN VitalDelayArrayType; CONSTANT CheckEnabled : IN BOOLEAN := TRUE; CONSTANT HeaderMsg : IN STRING := " "; CONSTANT XOn : IN BOOLEAN := TRUE; CONSTANT MsgOn : IN BOOLEAN := TRUE; CONSTANT MsgSeverity : IN SEVERITY_LEVEL := WARNING; CONSTANT MsgFormat : IN VitalMemoryMsgFormatType);PROCEDURE VitalMemoryPeriodPulseCheck ( VARIABLE Violation : OUT X01; VARIABLE PeriodData : INOUT VitalPeriodDataArrayType; SIGNAL TestSignal : IN std_logic_vector; CONSTANT TestSignalName : IN STRING := ""; CONSTANT TestDelay : IN VitalDelayArrayType; CONSTANT Period : IN VitalDelayArrayType; CONSTANT PulseWidthHigh : IN VitalDelayArrayType; CONSTANT PulseWidthLow : IN VitalDelayArrayType; CONSTANT CheckEnabled : IN BOOLEAN := TRUE; CONSTANT HeaderMsg : IN STRING := " "; CONSTANT XOn : IN BOOLEAN := TRUE; CONSTANT MsgOn : IN BOOLEAN := TRUE; CONSTANT MsgSeverity : IN SEVERITY_LEVEL := WARNING; CONSTANT MsgFormat : IN VitalMemoryMsgFormatType);-- ------------------------------------------------------------------------------ Functionality Section-- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ All Memory Types and Record definitions.-- ----------------------------------------------------------------------------TYPE MemoryWordType IS ARRAY (NATURAL RANGE <>) OF UX01;TYPE MemoryWordPtr IS ACCESS MemoryWordType;TYPE MemoryArrayType IS ARRAY (NATURAL RANGE <>) OF MemoryWordPtr;TYPE MemoryArrayPtrType IS ACCESS MemoryArrayType;TYPE VitalMemoryArrayRecType IS RECORDNoOfWords : POSITIVE;NoOfBitsPerWord : POSITIVE;NoOfBitsPerSubWord : POSITIVE;NoOfBitsPerEnable : POSITIVE;MemoryArrayPtr : MemoryArrayPtrType;END RECORD;TYPE VitalMemoryDataType IS ACCESS VitalMemoryArrayRecType;TYPE VitalTimingDataVectorType IS ARRAY (NATURAL RANGE <>) OF VitalTimingDataType;TYPE VitalMemoryViolFlagSizeType IS ARRAY (NATURAL RANGE <>) OF INTEGER;-- ------------------------------------------------------------------------------ Symbol Literals used for Memory Table Modeling-- ------------------------------------------------------------------------------ Symbol literals from '/' to 'S' are closely related to MemoryTableMatch-- lookup matching and the order cannot be arbitrarily changed.-- The remaining symbol literals are interpreted directly and matchting is-- handled in the MemoryMatch procedure itself.TYPE VitalMemorySymbolType IS ( '/', -- 0 -> 1 '\', -- 1 -> 0 'P', -- Union of '/' and '^' (any edge to 1) 'N', -- Union of '\' and 'v' (any edge to 0) 'r', -- 0 -> X 'f', -- 1 -> X 'p', -- Union of '/' and 'r' (any edge from 0) 'n', -- Union of '\' and 'f' (any edge from 1) 'R', -- Union of '^' and 'p' (any possible rising edge) 'F', -- Union of 'v' and 'n' (any possible falling edge) '^', -- X -> 1 'v', -- X -> 0 'E', -- Union of 'v' and '^' (any edge from X) 'A', -- Union of 'r' and '^' (rising edge to or from 'X') 'D', -- Union of 'f' a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -