📄 orca.vhd
字号:
-- ---------------------------------------------------------------------- >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<-- ---------------------------------------------------------------------- Copyright (c) 2005 by Lattice Semiconductor Corporation-- -------------------------------------------------------------------------- Lattice Semiconductor Corporation-- 5555 NE Moore Court-- Hillsboro, OR 97214-- U.S.A.---- TEL: 1-800-Lattice (USA and Canada)-- 1-408-826-6000 (other locations)---- web: http://www.latticesemi.com/-- email: techsupport@latticesemi.com---- ------------------------------------------------------------------------ Simulation Library File for EC/XP---- $Header: G:\\CVS_REPOSITORY\\CVS_MACROS/LEON3SDE/ALTERA/grlib-eval-1.0.4/lib/tech/ec/ec/ORCA_SEQ.vhd,v 1.1 2005/12/06 13:00:24 tame Exp $ -- ----- cell gsr -------LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.vital_timing.all;USE ieee.vital_primitives.all;USE work.global.gsrnet; -- entity declaration --ENTITY gsr IS GENERIC( timingcheckson : boolean := FALSE; XOn : boolean := FALSE; MsgOn : boolean := FALSE; InstancePath : string := "gsr"); PORT( gsr : IN std_logic := 'Z');END gsr; -- architecture body --ARCHITECTURE v OF gsr IS BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN -- empty END BLOCK; -------------------- -- behavior section -------------------- gsrnet <= gsr; END v;------- cell pur -------LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.vital_timing.all;USE ieee.vital_primitives.all;USE work.global.purnet; -- entity declaration --ENTITY pur IS GENERIC( timingcheckson : boolean := FALSE; XOn : boolean := FALSE; MsgOn : boolean := FALSE; InstancePath : string := "pur"); PORT( pur : IN std_logic := 'Z'); END pur; -- architecture body --ARCHITECTURE v OF pur IS BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN -- empty END BLOCK; -------------------- -- behavior section -------------------- purnet <= pur; END v;------- cell fd1p3ax -------LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.vital_timing.all;USE ieee.vital_primitives.all;USE work.global.gsrnet;USE work.global.purnet; ENTITY fd1p3ax IS GENERIC ( gsr : String := "ENABLED"; timingcheckson : boolean := TRUE; XOn : boolean := FALSE; MsgOn : boolean := TRUE; InstancePath : string := "fd1p3ax"; -- propagation delays tpd_ck_q : VitalDelayType01 := (0.001 ns, 0.001 ns); tpd_sp_q : VitalDelayType01 := (0.001 ns, 0.001 ns); -- setup and hold constraints tsetup_d_ck_noedge_posedge : VitalDelayType := 0.0 ns; thold_d_ck_noedge_posedge : VitalDelayType := 0.0 ns; tsetup_sp_ck_noedge_posedge : VitalDelayType := 0.0 ns; thold_sp_ck_noedge_posedge : VitalDelayType := 0.0 ns; -- input SIGNAL delays tipd_d : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_sp : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_ck : VitalDelayType01 := (0.0 ns, 0.0 ns); -- pulse width constraints tperiod_ck : VitalDelayType := 0.001 ns; tpw_ck_posedge : VitalDelayType := 0.001 ns; tpw_ck_negedge : VitalDelayType := 0.001 ns); PORT ( d : IN std_logic; sp : IN std_logic; ck : IN std_logic; q : OUT std_logic); ATTRIBUTE Vital_Level0 OF fd1p3ax : ENTITY IS TRUE;END fd1p3ax ; -- architecture body --ARCHITECTURE v OF fd1p3ax IS ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE; SIGNAL d_ipd : std_logic := '0'; SIGNAL ck_ipd : std_logic := '0'; SIGNAL sp_ipd : std_logic := '0'; BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN VitalWireDelay(d_ipd, d, tipd_d); VitalWireDelay(ck_ipd, ck, tipd_ck); VitalWireDelay(sp_ipd, sp, tipd_sp); END BLOCK; -------------------- -- behavior section -------------------- VitalBehavior : PROCESS (d_ipd, sp_ipd, ck_ipd, gsrnet, purnet) CONSTANT ff_table : VitalStateTableType (1 to 8, 1 to 8) := ( -- viol clr ce ck d q qnew qnnew ( 'X', '-', '-', '-', '-', '-', 'X', 'X' ), -- timing Violation ( '-', '0', '-', '-', '-', '-', '0', '1' ), -- async. clear (active low) ( '-', '1', '0', '-', '-', '-', 'S', 'S' ), -- clock disabled ( '-', '1', '1', '/', '1', '-', '1', '0' ), -- high d->q on rising edge ck ( '-', '1', '1', '/', '0', '-', '0', '1' ), -- low d->q on rising edge ck ( '-', '1', '1', '/', 'X', '-', 'X', 'X' ), -- clock an x if d is x ( '-', '1', 'X', '/', '-', '-', 'X', 'X' ), -- ce is x on rising edge of ck ( '-', '1', '-', 'B', '-', '-', 'S', 'S' ) ); -- non-x clock (e.g. falling) preserve q -- timing check results VARIABLE tviol_ck : X01 := '0'; VARIABLE tviol_d : X01 := '0'; VARIABLE tviol_sp : X01 := '0'; VARIABLE d_ck_TimingDatash : VitalTimingDataType; VARIABLE sp_ck_TimingDatash : VitalTimingDataType; VARIABLE periodcheckinfo_ck : VitalPeriodDataType; -- functionality results VARIABLE set_reset : std_logic := '1'; VARIABLE Violation : X01 := '0'; VARIABLE prevdata : std_logic_vector (0 to 5) := (others=>'X'); VARIABLE results : std_logic_vector (1 to 2) := "01"; ALIAS q_zd : std_ulogic IS results(1); VARIABLE tpd_gsr_q : VitalDelayType01 := (0.001 ns, 0.001 ns); VARIABLE tpd_pur_q : VitalDelayType01 := (0.001 ns, 0.001 ns); -- output glitch detection VARIABLEs VARIABLE q_GlitchData : VitalGlitchDataType; BEGIN ------------------------ -- timing check section ------------------------ IF (timingcheckson) THEN VitalSetupHoldCheck ( TestSignal => d_ipd, TestSignalname => "d", RefSignal => ck_ipd, RefSignalName => "ck", SetupHigh => tsetup_d_ck_noedge_posedge, SetupLow => tsetup_d_ck_noedge_posedge, HoldHigh => thold_d_ck_noedge_posedge, HoldLow => thold_d_ck_noedge_posedge, CheckEnabled => (set_reset='1' AND sp_ipd='1'), RefTransition => '/', MsgOn => MsgOn, XOn => XOn, HeaderMsg => InstancePath, TimingData => d_ck_timingdatash, Violation => tviol_d, MsgSeverity => Warning); VitalSetupHoldCheck ( TestSignal => sp_ipd, TestSignalname => "sp", RefSignal => ck_ipd, RefSignalName => "ck", SetupHigh => tsetup_sp_ck_noedge_posedge, SetupLow => tsetup_sp_ck_noedge_posedge, HoldHigh => thold_sp_ck_noedge_posedge, HoldLow => thold_sp_ck_noedge_posedge, CheckEnabled => (set_reset='1'), RefTransition => '/', MsgOn => MsgOn, XOn => XOn, HeaderMsg => InstancePath, TimingData => sp_ck_timingdatash, Violation => tviol_sp, MsgSeverity => Warning); VitalPeriodPulseCheck ( TestSignal => ck_ipd, TestSignalname => "ck", Period => tperiod_ck, PulseWidthHigh => tpw_ck_posedge, PulseWidthLow => tpw_ck_negedge, Perioddata => periodcheckinfo_ck, Violation => tviol_ck, MsgOn => MsgOn, XOn => XOn, HeaderMsg => InstancePath, CheckEnabled => TRUE, MsgSeverity => Warning); END IF; ----------------------------------- -- functionality section. ----------------------------------- Violation := tviol_d OR tviol_sp OR tviol_ck; IF (gsr = "DISABLED") THEN set_reset := purnet; ELSE set_reset := purnet AND gsrnet; END IF; VitalStateTable (StateTable => ff_table, DataIn => (Violation, set_reset, sp_ipd, ck_ipd, d_ipd), Numstates => 1, Result =>results, PreviousDataIn => prevdata); ----------------------------------- -- path delay section. ----------------------------------- VitalPathDelay01 ( OutSignal => q, OutSignalname => "q", OutTemp => q_zd, Paths => (0 => (InputChangeTime => ck_ipd'last_event, PathDelay => tpd_ck_q, PathCondition => TRUE), 1 => (sp_ipd'last_event, tpd_sp_q, TRUE), 2 => (gsrnet'last_event, tpd_gsr_q, TRUE), 3 => (purnet'last_event, tpd_pur_q, TRUE)), GlitchData => q_GlitchData, Mode => OnDetect, XOn => XOn, MsgOn => MsgOn); END PROCESS; END v;------- cell fd1p3ay -------LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.vital_timing.all;USE ieee.vital_primitives.all;USE work.global.gsrnet;USE work.global.purnet; ENTITY fd1p3ay IS GENERIC ( gsr : String := "ENABLED"; timingcheckson : boolean := TRUE; XOn : boolean := FALSE; MsgOn : boolean := TRUE; InstancePath : string := "fd1p3ay"; -- propagation delays tpd_ck_q : VitalDelayType01 := (0.001 ns, 0.001 ns); tpd_sp_q : VitalDelayType01 := (0.001 ns, 0.001 ns); -- setup and hold constraints tsetup_d_ck_noedge_posedge : VitalDelayType := 0.0 ns; thold_d_ck_noedge_posedge : VitalDelayType := 0.0 ns; tsetup_sp_ck_noedge_posedge : VitalDelayType := 0.0 ns; thold_sp_ck_noedge_posedge : VitalDelayType := 0.0 ns; -- input SIGNAL delays tipd_d : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_sp : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_ck : VitalDelayType01 := (0.0 ns, 0.0 ns); -- pulse width constraints tperiod_ck : VitalDelayType := 0.001 ns; tpw_ck_posedge : VitalDelayType := 0.001 ns; tpw_ck_negedge : VitalDelayType := 0.001 ns); PORT ( d : IN std_logic; sp : IN std_logic; ck : IN std_logic; q : OUT std_logic); ATTRIBUTE Vital_Level0 OF fd1p3ay : ENTITY IS TRUE;END fd1p3ay ; -- architecture body --ARCHITECTURE v OF fd1p3ay IS ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE; SIGNAL d_ipd : std_logic := '0'; SIGNAL ck_ipd : std_logic := '0'; SIGNAL sp_ipd : std_logic := '0'; BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN VitalWireDelay(d_ipd, d, tipd_d); VitalWireDelay(ck_ipd, ck, tipd_ck); VitalWireDelay(sp_ipd, sp, tipd_sp); END BLOCK; -------------------- -- behavior section -------------------- VitalBehavior : PROCESS (d_ipd, sp_ipd, ck_ipd, gsrnet, purnet) CONSTANT ff_table : VitalStateTableType (1 to 8, 1 to 8) := ( -- viol pre ce ck d q qnew qnnew ( 'X', '-', '-', '-', '-', '-', 'X', 'X' ), -- timing Violation ( '-', '0', '-', '-', '-', '-', '1', '0' ), -- async. preset (active low) ( '-', '1', '0', '-', '-', '-', 'S', 'S' ), -- clock disabled ( '-', '1', '1', '/', '0', '-', '0', '1' ), -- low d->q on rising edge ck ( '-', '1', '1', '/', '1', '-', '1', '0' ), -- high d->q on rising edge ck ( '-', '1', '1', '/', 'X', '-', 'X', 'X' ), -- clock an x if d is x ( '-', '1', 'X', '/', '-', '-', 'X', 'X' ), -- ce is x on rising edge of ck ( '-', '1', '-', 'B', '-', '-', 'S', 'S' ) ); -- non-x clock (e.g. falling) preserve q
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -