-- -- Copyright 1989 by --- -- -- This code is distributed for the purposes of evaluating the -- Waveform And Vector Exchange Specification (WAVES) proposal -- presented to the IEEE by the WAVES Analysis Group. This code -- may not be used for commercial purposes and may not be -- redistributed without permission of the Chairman of the WAVES -- Analysis Group, Mr Robert Hillman. -- -- Address comments or questions to -- Robert Hillman Lee Shombert -- RADC/RBRP Harris Corporation -- Griffis AFB, NY PO Box 94000 MS 16/4010 -- (315) 330-2241 Melbourne, FL 32902 -- (407) 727-6040 -- -- -- -- TIMESTAMP: 13-DEC-1989 12:48:21.05 -- -- CHANGES: -- 11 DEC 89 L SHOMBERT -- Replaces the directions INPUT and OUTPUT with -- STIMULUS and RESPONSE, respectively. -- -- package WAVES_STANDARD is -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -- -- These definitions provide the basic components of a simulation value. -- The order of the declarations is significant, since variables of -- these types will initialized to UNSPECIFIED. UNSPECIFIED means that -- information for that component was not supplied. UNKNOWN, on the -- other hand, indicates that the component could take on any possible -- value greater than UNKNOWN (UNKNOWN includes neither UNSPECIFIED nor -- itself). The exception is DIRECTION, for which UNKNOWN means either -- STIMULUS or RESPONSE, but not COMPOUND. -- -- DIRECTION indicates whether the waveform is forcing a value onto a -- node (STIMULUS) or predicting a value on a node (RESPONSE) or both -- (COMPOUND). -- -- RELEVANCE indicates whether the waveform value is significant or -- whether it may be an artifact of the waveform construction. -- -- STATE indicates logic level. -- -- STRENGTH supports bus resolution. -- type DIRECTION is ( UNSPECIFIED, UNKNOWN, STIMULUS, RESPONSE, COMPOUND ); type RELEVANCE is ( UNSPECIFIED, UNKNOWN, MASK, CARE ); type STATE is ( UNSPECIFIED, UNKNOWN, LOW, MIDBAND, HIGH ); type STRENGTH is ( UNSPECIFIED, UNKNOWN, DISCONNECTED, CAPACITIVE, RESISTIVE, DRIVE, SUPPLY ); -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -- -- The STRENGTH RANGE record stores a lower and upper bound that may be -- associated with a STRENGTH component. The bounds may be left -- unspecified by setting the SPECIFIED field appropriately. Note that -- variables of this type initialize to "not specified". -- type STRENGTH_RANGE is record SPECIFIED : BOOLEAN; LOWER_BOUND : REAL; UPPER_BOUND : REAL; end record; -- -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -- -- The following definitions build up to the definition of a EVENT_VALUE. -- -- A LOGIC_VALUE_FLAG stores a bit flag and a strength range. The -- INCLUDED field indicates whether an element of any of the three -- arrays that comprise a EVENT_VALUE (see below) is a possible condition -- of the EVENT_VALUE. If INCLUDED is TRUE, then STRENGTH_VALUE is -- significant. -- -- STATE_STRENGTH array is a two dimensional array that indicates -- whether a state, strength combination is selected for a EVENT_VALUE. -- -- STATE_NO_STRENGTH array is a one dimensional array that indicates -- whether a state with unspecified strength is selected for a EVENT_VALUE. -- -- STRENGTH_NO_STATE array is a one dimensional array that indicates -- whether a strength with unspecified state is selected for a EVENT_VALUE. -- -- SIMPLE_LOGIC_VALUE collects the three arrays above along with a -- relevance field. -- type LOGIC_VALUE_FLAG is record INCLUDED : BOOLEAN; STRENGTH_VALUE : STRENGTH_RANGE; end record; type STATE_STRENGTH_ARRAY is array ( STATE range STATE'SUCC(UNKNOWN) to STATE'RIGHT, STRENGTH range STRENGTH'SUCC(UNKNOWN) to STRENGTH'RIGHT ) of LOGIC_VALUE_FLAG; type UNSPECIFIED_STRENGTH_ARRAY is array ( STATE range STATE'SUCC(UNKNOWN) to STATE'RIGHT ) of LOGIC_VALUE_FLAG; type UNSPECIFIED_STATE_ARRAY is array ( STRENGTH range STRENGTH'SUCC(UNKNOWN) to STRENGTH'RIGHT ) of LOGIC_VALUE_FLAG; type SIMPLE_LOGIC_VALUE is record STATE_NO_STRENGTH : UNSPECIFIED_STRENGTH_ARRAY; STRENGTH_NO_STATE : UNSPECIFIED_STATE_ARRAY; STATE_STRENGTH : STATE_STRENGTH_ARRAY; LOGIC_RELEVANCE : RELEVANCE; end record; -- -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -- -- A EVENT_VALUE lists a set of possible waveform values. -- If EVENT_DIRECTION is UNSPECIFIED, then the possible node values are -- taken from STIMULUS_LOGIC and RESPONSE_LOGIC with no direction implied. -- If EVENT_DIRECTION is STIMULUS or RESPONSE then the possible node values -- are taken from the appropriate blocks. If EVENT_DIRECTION is UNKNOWN -- then possible stimulus values are taken from STIMULUS_LOGIC and possible -- response values from RESPONSE_LOGIC. If EVENT_DIRECTION is COMPOUND then -- possible stimulus values are taken from STIMULUS_LOGIC and possible response -- values from RESPONSE_LOGIC, except that one from each side is applied -- simultaneously. -- type EVENT_VALUE is record EVENT_DIRECTION : DIRECTION; STIMULUS_LOGIC : SIMPLE_LOGIC_VALUE; RESPONSE_LOGIC : SIMPLE_LOGIC_VALUE; end record; -- -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=- FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=- -- -- The following three functions make it easy to specify a event values. -- The first three are used to specify event values for any direction -- other than COMPOUND. The fourth is for COMPOUND event values. -- -- The first function allows all fields to be defaulted to UNSPECIFIED. -- -- The second function allows the specification of a single real -- modifier for strength. -- -- The third function allows the specification of a range modifier for -- strength. -- function EVALUE ( S_STATE : STATE := UNSPECIFIED; S_STRENGTH : STRENGTH := UNSPECIFIED; S_DIRECTION : DIRECTION range UNSPECIFIED to RESPONSE := UNSPECIFIED; S_RELEVANCE : RELEVANCE := UNSPECIFIED ) return EVENT_VALUE; function EVALUE ( S_STATE : STATE; S_STRENGTH : STRENGTH; RANGE_SINGLE : REAL; S_DIRECTION : DIRECTION range UNSPECIFIED to RESPONSE := UNSPECIFIED; S_RELEVANCE : RELEVANCE := UNSPECIFIED ) return EVENT_VALUE; function EVALUE ( S_STATE : STATE; S_STRENGTH : STRENGTH; RANGE_LOWER : REAL; RANGE_UPPER : REAL; S_DIRECTION : DIRECTION range UNSPECIFIED to RESPONSE := UNSPECIFIED; S_RELEVANCE : RELEVANCE := UNSPECIFIED ) return EVENT_VALUE; function COMPOUND_EVALUE ( I_NODE : EVENT_VALUE; O_NODE : EVENT_VALUE ) return EVENT_VALUE; -- -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=- FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=- -- -- The first function performs the set addition of two event values. -- The next function takes two event values as corners of a hypercube -- and returns the filled in hypercube. The next function fills -- unspecified fields in the first parameter with data from the second -- parameter. -- function ADD_EVALUE ( A : EVENT_VALUE; B : EVENT_VALUE ) return EVENT_VALUE; function SUBTRACT_EVALUE ( A : EVENT_VALUE; B : EVENT_VALUE ) return EVENT_VALUE; function EVALUE_RANGE ( A : EVENT_VALUE; B : EVENT_VALUE ) return EVENT_VALUE; function MERGE_EVALUE ( A : EVENT_VALUE; B : EVENT_VALUE ) return EVENT_VALUE; end WAVES_STANDARD;