?? prmtvs_b.vhdl
字號:
--------------------------------------------------------------------------------- Title : Standard VITAL_Primitives Package-- : $Revision: 600 $-- :-- Library : VITAL-- :-- Developers : IEEE DASC Timing Working Group (TWG), PAR 1076.4-- :-- Purpose : This packages defines standard types, constants, functions-- : and procedures for use in developing ASIC models.-- : Specifically a set of logic primitives are defined.-- : -- -------------------------------------------------------------------------------- ------------------------------------------------------------------------------ Modification History : -- ------------------------------------------------------------------------------ Version No:|Auth:| Mod.Date:| Changes Made:-- v95.0 A | | 06/02/95 | Initial ballot draft 1995-- v95.1 | | 08/31/95 | #204 - glitch detection prior to OutputMap-- ------------------------------------------------------------------------------ v95.2 | ddl | 09/14/96 | #223 - single input prmtvs use on-detect-- | | | instead of glitch-on-event behavior-- v95.3 | ddl | 09/24/96 | #236 - VitalTruthTable DataIn should be of-- | | | of class SIGNAL-- v95.4 | ddl | 01/16/97 | #243 - index constraint error in nbit xor/xnor-- v99.1 | dbb | 03/31/99 | Updated for VHDL 93-- ----------------------------------------------------------------------------LIBRARY STD;USE STD.TEXTIO.ALL;PACKAGE BODY VITAL_Primitives IS -- ------------------------------------------------------------------------ -- Default values for Primitives -- ------------------------------------------------------------------------ -- default values for delay parameters CONSTANT VitalDefDelay01 : VitalDelayType01 := VitalZeroDelay01; CONSTANT VitalDefDelay01Z : VitalDelayType01Z := VitalZeroDelay01Z; TYPE VitalTimeArray IS ARRAY (NATURAL RANGE <>) OF TIME; -- default primitive model operation parameters -- Glitch detection/reporting TYPE VitalGlitchModeType IS ( MessagePlusX, MessageOnly, XOnly, NoGlitch); CONSTANT PrimGlitchMode : VitalGlitchModeType := XOnly; -- ------------------------------------------------------------------------ -- Local Type and Subtype Declarations -- ------------------------------------------------------------------------ --------------------------------------------------------------------------- -- enumeration value representing the transition or level of the signal. -- See function 'GetEdge' --------------------------------------------------------------------------- TYPE EdgeType IS ( 'U', -- Uninitialized level 'X', -- Unknown level '0', -- low level '1', -- high level '\', -- 1 to 0 falling edge '/', -- 0 to 1 rising edge 'F', -- * to 0 falling edge 'R', -- * to 1 rising edge 'f', -- rising to X edge 'r', -- falling to X edge 'x', -- Unknown edge (ie U->X) 'V' -- Timing violation edge ); TYPE EdgeArray IS ARRAY ( NATURAL RANGE <> ) OF EdgeType; TYPE EdgeX1Table IS ARRAY ( EdgeType ) OF EdgeType; TYPE EdgeX2Table IS ARRAY ( EdgeType, EdgeType ) OF EdgeType; TYPE EdgeX3Table IS ARRAY ( EdgeType, EdgeType, EdgeType ) OF EdgeType; TYPE EdgeX4Table IS ARRAY (EdgeType,EdgeType,EdgeType,EdgeType) OF EdgeType; TYPE LogicToEdgeT IS ARRAY(std_ulogic, std_ulogic) OF EdgeType; TYPE LogicToLevelT IS ARRAY(std_ulogic ) OF EdgeType; TYPE GlitchDataType IS RECORD SchedTime : TIME; GlitchTime : TIME; SchedValue : std_ulogic; CurrentValue : std_ulogic; END RECORD; TYPE GlitchDataArrayType IS ARRAY (NATURAL RANGE <>) OF GlitchDataType; -- Enumerated type used in selection of output path delays TYPE SchedType IS RECORD inp0 : TIME; -- time (abs) of output change due to input change to 0 inp1 : TIME; -- time (abs) of output change due to input change to 1 InpX : TIME; -- time (abs) of output change due to input change to X Glch0 : TIME; -- time (abs) of output glitch due to input change to 0 Glch1 : TIME; -- time (abs) of output glitch due to input change to 0 END RECORD; TYPE SchedArray IS ARRAY ( NATURAL RANGE <> ) OF SchedType; CONSTANT DefSchedType : SchedType := (TIME'HIGH, TIME'HIGH, 0 ns,0 ns,0 ns); CONSTANT DefSchedAnd : SchedType := (TIME'HIGH, 0 ns,0 ns, TIME'HIGH,0 ns); -- Constrained array declarations (common sizes used by primitives) SUBTYPE SchedArray2 IS SchedArray(1 DOWNTO 0); SUBTYPE SchedArray3 IS SchedArray(2 DOWNTO 0); SUBTYPE SchedArray4 IS SchedArray(3 DOWNTO 0); SUBTYPE SchedArray8 IS SchedArray(7 DOWNTO 0); SUBTYPE TimeArray2 IS VitalTimeArray(1 DOWNTO 0); SUBTYPE TimeArray3 IS VitalTimeArray(2 DOWNTO 0); SUBTYPE TimeArray4 IS VitalTimeArray(3 DOWNTO 0); SUBTYPE TimeArray8 IS VitalTimeArray(7 DOWNTO 0); SUBTYPE GlitchArray2 IS GlitchDataArrayType(1 DOWNTO 0); SUBTYPE GlitchArray3 IS GlitchDataArrayType(2 DOWNTO 0); SUBTYPE GlitchArray4 IS GlitchDataArrayType(3 DOWNTO 0); SUBTYPE GlitchArray8 IS GlitchDataArrayType(7 DOWNTO 0); SUBTYPE EdgeArray2 IS EdgeArray(1 DOWNTO 0); SUBTYPE EdgeArray3 IS EdgeArray(2 DOWNTO 0); SUBTYPE EdgeArray4 IS EdgeArray(3 DOWNTO 0); SUBTYPE EdgeArray8 IS EdgeArray(7 DOWNTO 0); CONSTANT DefSchedArray2 : SchedArray2 := (OTHERS=> (0 ns, 0 ns, 0 ns, 0 ns, 0 ns)); TYPE stdlogic_table IS ARRAY(std_ulogic, std_ulogic) OF std_ulogic; CONSTANT InitialEdge : LogicToLevelT := ( '1'|'H' => 'R', '0'|'L' => 'F', OTHERS => 'x' ); CONSTANT LogicToEdge : LogicToEdgeT := ( -- previous, current -- old \ new: U X 0 1 Z W L H - 'U' => ( 'U', 'x', 'F', 'R', 'x', 'x', 'F', 'R', 'x' ), 'X' => ( 'x', 'X', 'F', 'R', 'x', 'X', 'F', 'R', 'X' ), '0' => ( 'r', 'r', '0', '/', 'r', 'r', '0', '/', 'r' ), '1' => ( 'f', 'f', '\', '1', 'f', 'f', '\', '1', 'f' ), 'Z' => ( 'x', 'X', 'F', 'R', 'X', 'x', 'F', 'R', 'x' ), 'W' => ( 'x', 'X', 'F', 'R', 'x', 'X', 'F', 'R', 'X' ), 'L' => ( 'r', 'r', '0', '/', 'r', 'r', '0', '/', 'r' ), 'H' => ( 'f', 'f', '\', '1', 'f', 'f', '\', '1', 'f' ), '-' => ( 'x', 'X', 'F', 'R', 'x', 'X', 'F', 'R', 'X' ) ); CONSTANT LogicToLevel : LogicToLevelT := ( '1'|'H' => '1', '0'|'L' => '0', 'U' => 'U', OTHERS => 'X' ); -- ----------------------------------- -- 3-state logic tables -- ----------------------------------- CONSTANT BufIf0_Table : stdlogic_table := -- enable data value ( '1'|'H' => ( OTHERS => 'Z' ), '0'|'L' => ( '1'|'H' => '1', '0'|'L' => '0', 'U' => 'U', OTHERS => 'X' ), 'U' => ( OTHERS => 'U' ), OTHERS => ( OTHERS => 'X' ) ); CONSTANT BufIf1_Table : stdlogic_table := -- enable data value ( '0'|'L' => ( OTHERS => 'Z' ), '1'|'H' => ( '1'|'H' => '1', '0'|'L' => '0', 'U' => 'U', OTHERS => 'X' ), 'U' => ( OTHERS => 'U' ), OTHERS => ( OTHERS => 'X' ) ); CONSTANT InvIf0_Table : stdlogic_table := -- enable data value ( '1'|'H' => ( OTHERS => 'Z' ), '0'|'L' => ( '1'|'H' => '0', '0'|'L' => '1', 'U' => 'U', OTHERS => 'X' ), 'U' => ( OTHERS => 'U' ), OTHERS => ( OTHERS => 'X' ) ); CONSTANT InvIf1_Table : stdlogic_table := -- enable data value ( '0'|'L' => ( OTHERS => 'Z' ), '1'|'H' => ( '1'|'H' => '0', '0'|'L' => '1', 'U' => 'U', OTHERS => 'X' ), 'U' => ( OTHERS => 'U' ), OTHERS => ( OTHERS => 'X' ) ); TYPE To_StateCharType IS ARRAY (VitalStateSymbolType) OF CHARACTER; CONSTANT To_StateChar : To_StateCharType := ( '/', '\', 'P', 'N', 'r', 'f', 'p', 'n', 'R', 'F', '^', 'v', 'E', 'A', 'D', '*', 'X', '0', '1', '-', 'B', 'Z', 'S' ); TYPE To_TruthCharType IS ARRAY (VitalTruthSymbolType) OF CHARACTER; CONSTANT To_TruthChar : To_TruthCharType := ( 'X', '0', '1', '-', 'B', 'Z' ); TYPE TruthTableOutMapType IS ARRAY (VitalTruthSymbolType) OF std_ulogic; CONSTANT TruthTableOutMap : TruthTableOutMapType := -- 'X', '0', '1', '-', 'B', 'Z' ( 'X', '0', '1', 'X', '-', 'Z' ); TYPE StateTableOutMapType IS ARRAY (VitalStateSymbolType) OF std_ulogic; -- does conversion to X01Z or '-' if invalid CONSTANT StateTableOutMap : StateTableOutMapType := -- '/' '\' 'P' 'N' 'r' 'f' 'p' 'n' 'R' 'F' '^' 'v' -- 'E' 'A' 'D' '*' 'X' '0' '1' '-' 'B' 'Z' 'S' ( '-','-','-','-','-','-','-','-','-','-','-','-', '-','-','-','-','X','0','1','X','-','Z','W'); -- ------------------------------------------------------------------------ TYPE ValidTruthTableInputType IS ARRAY (VitalTruthSymbolType) OF BOOLEAN; -- checks if a symbol IS valid for the stimulus portion of a truth table CONSTANT ValidTruthTableInput : ValidTruthTableInputType := -- 'X' '0' '1' '-' 'B' 'Z' ( TRUE, TRUE, TRUE, TRUE, TRUE, FALSE ); TYPE TruthTableMatchType IS ARRAY (X01, VitalTruthSymbolType) OF BOOLEAN; -- checks if an input matches th corresponding truth table symbol -- use: TruthTableMatch(input_converted_to_X01, truth_table_stimulus_symbol) CONSTANT TruthTableMatch : TruthTableMatchType := ( -- X, 0, 1, - B Z ( TRUE, FALSE, FALSE, TRUE, FALSE, FALSE ), -- X ( FALSE, TRUE, FALSE, TRUE, TRUE, FALSE ), -- 0 ( FALSE, FALSE, TRUE, TRUE, TRUE, FALSE ) -- 1 ); -- ------------------------------------------------------------------------ TYPE ValidStateTableInputType IS ARRAY (VitalStateSymbolType) OF BOOLEAN; CONSTANT ValidStateTableInput : ValidStateTableInputType := -- '/', '\', 'P', 'N', 'r', 'f', ( TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, -- 'p', 'n', 'R', 'F', '^', 'v', TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, -- 'E', 'A', 'D', '*', TRUE, TRUE, TRUE, TRUE, -- 'X', '0', '1', '-', 'B', 'Z', TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, -- 'S' TRUE ); CONSTANT ValidStateTableState : ValidStateTableInputType := -- '/', '\', 'P', 'N', 'r', 'f', ( FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, -- 'p', 'n', 'R', 'F', '^', 'v', FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, -- 'E', 'A', 'D', '*', FALSE, FALSE, FALSE, FALSE, -- 'X', '0', '1', '-', 'B', 'Z', TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, -- 'S' FALSE ); TYPE StateTableMatchType IS ARRAY (X01,X01,VitalStateSymbolType) OF BOOLEAN; -- last value, present value, table symbol CONSTANT StateTableMatch : StateTableMatchType := ( ( -- X (lastvalue) -- / \ P N r f -- p n R F ^ v -- E A D * -- X 0 1 - B Z S (FALSE,FALSE,FALSE,FALSE,FALSE,FALSE, FALSE,FALSE,FALSE,FALSE,FALSE,FALSE, FALSE,FALSE,FALSE,FALSE, TRUE, FALSE,FALSE,TRUE, FALSE,FALSE,FALSE), (FALSE,FALSE,FALSE,TRUE, FALSE,FALSE, FALSE,FALSE,FALSE,TRUE, FALSE,TRUE, TRUE, FALSE,TRUE, TRUE, FALSE,TRUE, FALSE,TRUE, TRUE, FALSE,FALSE), (FALSE,FALSE,TRUE, FALSE,FALSE,FALSE, FALSE,FALSE,TRUE, FALSE,TRUE, FALSE, TRUE, TRUE, FALSE,TRUE, FALSE,FALSE,TRUE, TRUE, TRUE, FALSE,FALSE) ), (-- 0 (lastvalue) -- / \ P N r f -- p n R F ^ v -- E A D * -- X 0 1 - B Z S (FALSE,FALSE,FALSE,FALSE,TRUE, FALSE, TRUE, FALSE,TRUE, FALSE,FALSE,FALSE, FALSE,TRUE, FALSE,TRUE, TRUE, FALSE,FALSE,TRUE, FALSE,FALSE,FALSE), (FALSE,FALSE,FALSE,FALSE,FALSE,FALSE, FALSE,FALSE,FALSE,FALSE,FALSE,FALSE, FALSE,FALSE,FALSE,FALSE, FALSE,TRUE, FALSE,TRUE, TRUE, FALSE,TRUE ), (TRUE, FALSE,TRUE, FALSE,FALSE,FALSE, TRUE, FALSE,TRUE, FALSE,FALSE,FALSE, FALSE,FALSE,FALSE,TRUE, FALSE,FALSE,TRUE, TRUE, TRUE, FALSE,FALSE) ),
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -