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

📄 stratixii_atoms.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 5 页
字号:
    --------------------    --  BEHAVIOR SECTION    --------------------    VITALBehavior : process (IN0_ipd, IN1_ipd, IN2_ipd, IN3_ipd, S_ipd(0), S_ipd(1))    -- output glitch detection variables    VARIABLE MO_GlitchData       : VitalGlitchDataType;    variable tmp_MO : std_logic;    begin        -------------------------        --  Functionality Section        -------------------------        if ((S_ipd(1) = '1') AND (S_ipd(0) = '1')) then            tmp_MO := IN3_ipd;        elsif ((S_ipd(1) = '1') AND (S_ipd(0) = '0')) then            tmp_MO := IN2_ipd;        elsif ((S_ipd(1) = '0') AND (S_ipd(0) = '1')) then            tmp_MO := IN1_ipd;        else            tmp_MO := IN0_ipd;        end if;        ----------------------        --  Path Delay Section        ----------------------        VitalPathDelay01 (                        OutSignal => MO,                        OutSignalName => "MO",                        OutTemp => tmp_MO,                        Paths => (  0 => (IN0_ipd'last_event, tpd_IN0_MO, TRUE),                                    1 => (IN1_ipd'last_event, tpd_IN1_MO, TRUE),                                    2 => (IN2_ipd'last_event, tpd_IN2_MO, TRUE),                                    3 => (IN3_ipd'last_event, tpd_IN3_MO, TRUE),                                    4 => (S_ipd(0)'last_event, tpd_S_MO(0), TRUE),                                    5 => (S_ipd(1)'last_event, tpd_S_MO(1), TRUE)),                        GlitchData => MO_GlitchData,                        Mode => DefGlitchMode,                        XOn  => XOn,                        MsgOn => MsgOn );    end process;end AltVITAL;------  stratixii_and1 Model----LIBRARY IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.VITAL_Timing.all;use work.stratixii_atom_pack.all;-- entity declaration --entity stratixii_and1 is    generic(        TimingChecksOn: Boolean := True;        MsgOn: Boolean := DefGlitchMsgOn;        XOn: Boolean := DefGlitchXOn;        InstancePath: STRING := "*";        tpd_IN1_Y                      :  VitalDelayType01 := DefPropDelay01;        tipd_IN1                       :  VitalDelayType01 := DefPropDelay01);    port(        Y                              :  out   STD_LOGIC;        IN1                            :  in    STD_LOGIC);    attribute VITAL_LEVEL0 of stratixii_and1 : entity is TRUE;end stratixii_and1;-- architecture body --architecture AltVITAL of stratixii_and1 is    attribute VITAL_LEVEL0 of AltVITAL : architecture is TRUE;    SIGNAL IN1_ipd    : STD_ULOGIC := 'U';begin    ---------------------    --  INPUT PATH DELAYs    ---------------------    WireDelay : block    begin    VitalWireDelay (IN1_ipd, IN1, tipd_IN1);    end block;    --------------------    --  BEHAVIOR SECTION    --------------------    VITALBehavior : process (IN1_ipd)    -- functionality results    VARIABLE Results : STD_LOGIC_VECTOR(1 to 1) := (others => 'X');    ALIAS Y_zd : STD_ULOGIC is Results(1);    -- output glitch detection variables    VARIABLE Y_GlitchData    : VitalGlitchDataType;    begin        -------------------------        --  Functionality Section        -------------------------        Y_zd := TO_X01(IN1_ipd);        ----------------------        --  Path Delay Section        ----------------------        VitalPathDelay01 (            OutSignal => Y,            OutSignalName => "Y",            OutTemp => Y_zd,            Paths => (0 => (IN1_ipd'last_event, tpd_IN1_Y, TRUE)),            GlitchData => Y_GlitchData,            Mode => DefGlitchMode,            XOn  => XOn,            MsgOn        => MsgOn );    end process;end AltVITAL;------------------------------------------------------------------------------ Module Name     : stratixii_ram_register-- Description     : Register module for RAM inputs/outputs----------------------------------------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.VITAL_Timing.all;USE IEEE.VITAL_Primitives.all;USE work.stratixii_atom_pack.all;ENTITY stratixii_ram_register ISGENERIC (    width   : INTEGER := 1;    preset  : STD_LOGIC := '0';    tipd_d  : VitalDelayArrayType01(143 DOWNTO 0) := (OTHERS => DefPropDelay01);    tipd_clk        : VitalDelayType01 := DefPropDelay01;    tipd_ena        : VitalDelayType01 := DefPropDelay01;    tipd_stall      : VitalDelayType01 := DefPropDelay01;    tipd_aclr       : VitalDelayType01 := DefPropDelay01;    tpw_ena_posedge : VitalDelayType   := DefPulseWdthCnst;    tpd_clk_q_posedge        : VitalDelayType01 := DefPropDelay01;    tpd_aclr_q_posedge       : VitalDelayType01 := DefPropDelay01;    tsetup_d_clk_noedge_posedge    : VitalDelayType := DefSetupHoldCnst;    thold_d_clk_noedge_posedge     : VitalDelayType := DefSetupHoldCnst;    tsetup_ena_clk_noedge_posedge  : VitalDelayType := DefSetupHoldCnst;    thold_ena_clk_noedge_posedge   : VitalDelayType := DefSetupHoldCnst;    tsetup_stall_clk_noedge_posedge  : VitalDelayType   := DefSetupHoldCnst;    thold_stall_clk_noedge_posedge   : VitalDelayType   := DefSetupHoldCnst;    tsetup_aclr_clk_noedge_posedge : VitalDelayType   := DefSetupHoldCnst;    thold_aclr_clk_noedge_posedge  : VitalDelayType   := DefSetupHoldCnst    );PORT (    d       : IN STD_LOGIC_VECTOR(width - 1 DOWNTO 0);    clk     : IN STD_LOGIC;    ena     : IN STD_LOGIC;    stall : IN STD_LOGIC;    aclr    : IN STD_LOGIC;    devclrn : IN STD_LOGIC;    devpor  : IN STD_LOGIC;    q       : OUT STD_LOGIC_VECTOR(width - 1 DOWNTO 0);    aclrout : OUT STD_LOGIC    );END stratixii_ram_register;ARCHITECTURE reg_arch OF stratixii_ram_register ISSIGNAL d_ipd : STD_LOGIC_VECTOR(width - 1 DOWNTO 0);SIGNAL clk_ipd  : STD_LOGIC;SIGNAL ena_ipd  : STD_LOGIC;SIGNAL aclr_ipd : STD_LOGIC;SIGNAL stall_ipd : STD_LOGIC;BEGINWireDelay : BLOCKBEGIN    loopbits : FOR i in d'RANGE GENERATE        VitalWireDelay (d_ipd(i), d(i), tipd_d(i));    END GENERATE;    VitalWireDelay (clk_ipd, clk, tipd_clk);    VitalWireDelay (aclr_ipd, aclr, tipd_aclr);    VitalWireDelay (ena_ipd, ena, tipd_ena);    VitalWireDelay (stall_ipd, stall, tipd_stall);END BLOCK;   PROCESS (d_ipd,ena_ipd,stall_ipd,clk_ipd,aclr_ipd,devclrn,devpor)VARIABLE Tviol_clk_ena        : STD_ULOGIC := '0';VARIABLE Tviol_clk_aclr       : STD_ULOGIC := '0';VARIABLE Tviol_data_clk       : STD_ULOGIC := '0';VARIABLE TimingData_clk_ena   : VitalTimingDataType := VitalTimingDataInit;VARIABLE TimingData_clk_stall   : VitalTimingDataType := VitalTimingDataInit;VARIABLE TimingData_clk_aclr  : VitalTimingDataType := VitalTimingDataInit;VARIABLE TimingData_data_clk  : VitalTimingDataType := VitalTimingDataInit;VARIABLE Tviol_ena            : STD_ULOGIC := '0';VARIABLE PeriodData_ena       : VitalPeriodDataType := VitalPeriodDataInit;VARIABLE q_VitalGlitchDataArray : VitalGlitchDataArrayType(143 downto 0);VARIABLE CQDelay  : TIME := 0 ns;VARIABLE q_reg    : STD_LOGIC_VECTOR(width - 1 DOWNTO 0) := (OTHERS => preset);BEGIN    IF (aclr_ipd = '1' OR devclrn = '0' OR devpor = '0') THEN        q_reg := (OTHERS => preset);       ELSIF (clk_ipd = '1' AND clk_ipd'EVENT AND ena_ipd = '1' AND stall_ipd = '0') THEN        q_reg := d_ipd;    END IF;    -- Timing checks    VitalSetupHoldCheck (        Violation       => Tviol_clk_ena,        TimingData      => TimingData_clk_ena,        TestSignal      => ena_ipd,        TestSignalName  => "ena",        RefSignal       => clk_ipd,        RefSignalName   => "clk",        SetupHigh       => tsetup_ena_clk_noedge_posedge,        SetupLow        => tsetup_ena_clk_noedge_posedge,        HoldHigh        => thold_ena_clk_noedge_posedge,        HoldLow         => thold_ena_clk_noedge_posedge,        CheckEnabled    => ((aclr_ipd) OR (NOT ena_ipd)) /= '1',        RefTransition   => '/',        HeaderMsg       => "/RAM Register VitalSetupHoldCheck",        XOn           => DefXOnChecks,        MsgOn         => DefMsgOnChecks );  VitalSetupHoldCheck (      Violation       => Tviol_clk_ena,      TimingData      => TimingData_clk_stall,      TestSignal      => stall_ipd,      TestSignalName  => "stall",      RefSignal       => clk_ipd,      RefSignalName   => "clk",      SetupHigh       => tsetup_stall_clk_noedge_posedge,      SetupLow        => tsetup_stall_clk_noedge_posedge,      HoldHigh        => thold_stall_clk_noedge_posedge,      HoldLow         => thold_stall_clk_noedge_posedge,      CheckEnabled    => ((aclr_ipd) OR (NOT ena_ipd)) /= '1',      RefTransition   => '/',      HeaderMsg       => "/RAM Register VitalSetupHoldCheck",      XOn           => DefXOnChecks,      MsgOn         => DefMsgOnChecks );    VitalSetupHoldCheck (        Violation       => Tviol_clk_aclr,        TimingData      => TimingData_clk_aclr,        TestSignal      => aclr_ipd,        TestSignalName  => "aclr",        RefSignal       => clk_ipd,        RefSignalName   => "clk",        SetupHigh       => tsetup_aclr_clk_noedge_posedge,        SetupLow        => tsetup_aclr_clk_noedge_posedge,        HoldHigh        => thold_aclr_clk_noedge_posedge,        HoldLow         => thold_aclr_clk_noedge_posedge,        CheckEnabled    => ((aclr_ipd) OR (NOT ena_ipd)) /= '1',        RefTransition   => '/',        HeaderMsg       => "/RAM Register VitalSetupHoldCheck",        XOn           => DefXOnChecks,        MsgOn         => DefMsgOnChecks );    VitalSetupHoldCheck (        Violation       => Tviol_data_clk,        TimingData      => TimingData_data_clk,        TestSignal      => d_ipd,        TestSignalName  => "data",        RefSignal       => clk_ipd,        RefSignalName   => "clk",        SetupHigh       => tsetup_d_clk_noedge_posedge,        SetupLow        => tsetup_d_clk_noedge_posedge,        HoldHigh        => thold_d_clk_noedge_posedge,        HoldLow         => thold_d_clk_noedge_posedge,        CheckEnabled    => ((aclr_ipd) OR (NOT ena_ipd)) /= '1',        RefTransition   => '/',        HeaderMsg       => "/RAM Register VitalSetupHoldCheck",        XOn           => DefXOnChecks,        MsgOn         => DefMsgOnChecks );    VitalPeriodPulseCheck (        Violation       => Tviol_ena,        PeriodData      => PeriodData_ena,        TestSignal      => ena_ipd,        TestSignalName  => "ena",        PulseWidthHigh  => tpw_ena_posedge,        HeaderMsg       => "/RAM Register VitalPeriodPulseCheck",        XOn           => DefXOnChecks,        MsgOn         => DefMsgOnChecks );    -- Path Delay Selection    CQDelay := SelectDelay (                   Paths => (                       (0 => (clk_ipd'LAST_EVENT,tpd_clk_q_posedge,TRUE),                        1 => (aclr_ipd'LAST_EVENT,tpd_aclr_q_posedge,TRUE))                   )               );    q <= TRANSPORT q_reg AFTER CQDelay;END PROCESS;aclrout <= aclr_ipd;END reg_arch;------------------------------------------------------------------------------ Module Name     : stratixii_ram_pulse_generator-- Description     : Generate pulse to initiate memory read/write operations----------------------------------------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.VITAL_Timing.all;USE IEEE.VITAL_Primitives.all;USE work.stratixii_atom_pack.all;ENTITY stratixii_ram_pulse_generator ISGENERIC (    tipd_clk : VitalDelayType01 := (0.5 ns,0.5 ns);    tipd_ena : VitalDelayType01 := DefPropDelay01;    tpd_clk_pulse_posedge : VitalDelayType01 := DefPropDelay01    );PORT (    clk,ena : IN STD_LOGIC;    pulse,cycle : OUT STD_LOGIC    );ATTRIBUTE VITAL_Level0 OF stratixii_ram_pulse_generator:ENTITY IS TRUE;END stratixii_ram_pulse_generator;ARCHITECTURE pgen_arch OF stratixii_ram_pulse_generator ISATTRIBUTE VITAL_Level0 OF pgen_arch:ARCHITECTURE IS TRUE;SIGNAL clk_ipd,ena_ipd : STD_LOGIC;SIGNAL state : STD_LOGIC;BEGINWireDelay : BLOCKBEGIN    VitalWireDelay (clk_ipd, clk, tipd_clk);    VitalWireDelay (ena_ipd, ena, tipd_ena);END BLOCK;PROCESS (clk_ipd,state)BEGIN    IF (state = '1' AND state'EVENT) THEN        state <= '0';    ELSIF (clk_ipd = '1' AND clk_ipd'EVENT AND ena_ipd = '1') THEN        state <= '1';    END IF;END PROCESS;PathDelay : PROCESS

⌨️ 快捷键说明

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