⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orca.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 5 页
字号:
    VitalStateTable (StateTable => ff_table,	    DataIn => (Violation, set_reset, cd_ipd, 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 => (cd_ipd'last_event, tpd_cd_q, TRUE),		3 => (gsrnet'last_event, tpd_gsr_q, TRUE),		4 => (purnet'last_event, tpd_pur_q, TRUE)),      GlitchData => q_GlitchData,      Mode => OnDetect, XOn => XOn, MsgOn => MsgOn);END PROCESS; END v;------- cell fd1p3jx -------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 fd1p3jx IS    GENERIC (        gsr             : String  := "ENABLED";        timingcheckson	: boolean := TRUE;        XOn             : boolean := FALSE;        MsgOn           : boolean := TRUE;        InstancePath	: string := "fd1p3jx";        -- propagation delays        tpd_ck_q	: VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_sp_q	: VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_pd_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_pd_ck_noedge_posedge	: VitalDelayType := 0.0 ns;        thold_pd_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);        tipd_pd         : 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;        tperiod_pd      	: VitalDelayType := 0.001 ns;        tpw_pd_posedge		: VitalDelayType := 0.001 ns;        tpw_pd_negedge		: VitalDelayType := 0.001 ns);     PORT (        d               : IN std_logic;        sp              : IN std_logic;        pd              : IN std_logic;        ck              : IN std_logic;        q               : OUT std_logic);    ATTRIBUTE Vital_Level0 OF fd1p3jx : ENTITY IS TRUE;END fd1p3jx ; -- architecture body --ARCHITECTURE v OF fd1p3jx 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';    SIGNAL pd_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);       VitalWireDelay(pd_ipd, pd, tipd_pd);    END BLOCK;   --------------------   --  behavior section   --------------------   VitalBehavior : PROCESS (d_ipd, sp_ipd, ck_ipd, pd_ipd, gsrnet, purnet)   CONSTANT ff_table : VitalStateTableType (1 to 9, 1 to 9) := (      -- viol  pre  spr  ce   ck    d    q  qnew qnnew	( 'X', '-', '-', '-', '-', '-', '-', 'X', 'X' ),  -- timing Violation	( '-', '0', '-', '-', '-', '-', '-', '1', '0' ),  -- async. preset (active low)	( '-', '1', '0', '0', '-', '-', '-', 'S', 'S' ),  -- clock disabled	( '-', '1', '1', '-', '/', '-', '-', '1', '0' ),  -- sync. preset	( '-', '1', '0', '1', '/', '0', '-', '0', '1' ),  -- low d->q on rising edge ck	( '-', '1', '0', '1', '/', '1', '-', '1', '0' ),  -- high d->q on rising edge ck	( '-', '1', '0', '1', '/', 'X', '-', 'X', 'X' ),  -- clock an x if d is x        ( '-', '1', '0', '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 tsviol_pd   : X01 := '0';   VARIABLE tviol_pd    : X01 := '0';   VARIABLE tviol_sp    : X01 := '0';   VARIABLE d_ck_TimingDatash  : VitalTimingDataType;   VARIABLE pd_ck_TimingDatash : VitalTimingDataType;   VARIABLE sp_ck_TimingDatash : VitalTimingDataType;   VARIABLE periodcheckinfo_ck : VitalPeriodDataType;   VARIABLE periodcheckinfo_pd : 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) := "10";   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 pd_ipd='0' AND sp_ipd ='1'),            RefTransition => '/', MsgOn => MsgOn, XOn => XOn, 	    HeaderMsg => InstancePath, TimingData => d_ck_timingdatash, 	    Violation => tviol_d, MsgSeverity => Warning);        VitalSetupHoldCheck (            TestSignal => pd_ipd, TestSignalname => "pd",            RefSignal => ck_ipd, RefSignalName => "ck",            SetupHigh => tsetup_pd_ck_noedge_posedge,             SetupLow => tsetup_pd_ck_noedge_posedge,            HoldHigh => thold_pd_ck_noedge_posedge,             HoldLow => thold_pd_ck_noedge_posedge,            CheckEnabled => (set_reset='1'), RefTransition => '/',            MsgOn => MsgOn, XOn => XOn,            HeaderMsg => InstancePath, TimingData => pd_ck_timingdatash,            Violation => tsviol_pd, 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);        VitalPeriodPulseCheck (	    TestSignal => pd_ipd,             TestSignalname => "pd", 	    Period => tperiod_pd,            PulseWidthHigh => tpw_pd_posedge, 	    PulseWidthLow => tpw_pd_negedge, 	    Perioddata => periodcheckinfo_pd,             Violation => tviol_pd, 	    MsgOn => MsgOn, XOn => XOn, 	    HeaderMsg => InstancePath, CheckEnabled => TRUE, 	    MsgSeverity => Warning);    END IF;     -----------------------------------    -- functionality section.    -----------------------------------    Violation := tviol_d OR tsviol_pd OR tviol_sp OR tviol_ck OR tviol_pd;    IF (gsr = "DISABLED") THEN       set_reset := purnet;    ELSE       set_reset := purnet AND gsrnet;    END IF;     VitalStateTable (StateTable => ff_table,	    DataIn => (Violation, set_reset, pd_ipd, 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 => (pd_ipd'last_event, tpd_pd_q, TRUE),		3 => (gsrnet'last_event, tpd_gsr_q, TRUE),		4 => (purnet'last_event, tpd_pur_q, TRUE)),      GlitchData => q_GlitchData,      Mode => OnDetect, XOn => XOn, MsgOn => MsgOn);END PROCESS; END v;------- cell fd1s1a -------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 fd1s1a IS    GENERIC (        gsr             : String  := "ENABLED";        timingcheckson	: boolean := TRUE;        XOn             : boolean := FALSE;        MsgOn           : boolean := TRUE;        InstancePath	: string := "fd1s1a";        -- propagation delays        tpd_ck_q	: VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_d_q		: VitalDelayType01 := (0.001 ns, 0.001 ns);        -- setup and hold constraints        tsetup_d_ck_noedge_negedge	: VitalDelayType := 0.0 ns;        thold_d_ck_noedge_negedge	: VitalDelayType := 0.0 ns;        -- input SIGNAL delays        tipd_d		: 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;        ck              : IN std_logic;        q               : OUT std_logic);    ATTRIBUTE Vital_Level0 OF fd1s1a : ENTITY IS TRUE;END fd1s1a ; -- architecture body --ARCHITECTURE v OF fd1s1a IS    ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE;    SIGNAL d_ipd   : std_logic := '0';    SIGNAL ck_ipd  : std_logic := '0'; BEGIN    ---------------------   --  input path delays   ---------------------    WireDelay : BLOCK    BEGIN       VitalWireDelay(d_ipd, d, tipd_d);       VitalWireDelay(ck_ipd, ck, tipd_ck);    END BLOCK;   --------------------   --  behavior section   --------------------   VitalBehavior : PROCESS (d_ipd, ck_ipd, gsrnet, purnet)   CONSTANT latch_table : VitalStateTableType (1 to 6, 1 to 7) := (      -- viol  clr  ck    d    q  qnew qnnew	( 'X', '-', '-', '-', '-', 'X', 'X' ),  -- timing Violation	( '-', '0', '-', '-', '-', '0', '1' ),  -- async. clear (active low)	( '-', '1', '0', '-', '-', 'S', 'S' ),  -- clock low	( '-', '1', '1', '0', '-', '0', '1' ),  -- low d->q on high ck	( '-', '1', '1', '1', '-', '1', '0' ),  -- high d->q on high ck	( '-', '1', '1', 'X', '-', 'X', 'X' ) );  -- clock an x if d is x	   -- timing check results    VARIABLE tviol_ck    : X01 := '0';   VARIABLE tviol_d     : X01 := '0';   VARIABLE d_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_negedge,             SetupLow => tsetup_d_ck_noedge_negedge,            HoldHigh => thold_d_ck_noedge_negedge,             HoldLow => thold_d_ck_noedge_negedge,            CheckEnabled => (set_reset='1'), RefTransition => '\', 	    MsgOn => MsgOn, XOn => XOn, 	    HeaderMsg => InstancePath, TimingData => d_ck_timingdatash, 	    Violation => tviol_d, 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_ck;    IF (gsr = "DISABLED") THEN       set_reset := purnet;    ELSE       set_reset := purnet AND gsrnet;    END IF;     VitalStateTable (StateTable => latch_table,	    DataIn => (Violation, set_reset, ck_ipd, d_ipd),	    Numstates => 1,	    Result =>results,	    PreviousDataIn => prevdata);    -----------------------------------    -- path delay section.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -