cy2313anz.vhd

来自「Vhdl cod for a clock for sp3e」· VHDL 代码 · 共 552 行 · 第 1/2 页

VHD
552
字号
            GlitchData      => SDR5_GlitchData );        VitalPathDelay01Z (            OutSignal       =>  SDR6,            OutSignalName   =>  "SDR6",            OutTemp         =>  SDR6_zd,            Paths           => (               0 => (InputChangeTime   => BUFIN_ipd'LAST_EVENT,                    PathDelay         => VitalExtendToFillDelay(tpd_BUFIN_SDR0),                     PathCondition     => (Byte1(0) = '1')),               1 => (InputChangeTime   => Byte1(0)'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDR0,                     PathCondition     => TRUE ) ),            GlitchData      => SDR6_GlitchData );        VitalPathDelay01Z (            OutSignal       =>  SDR7,            OutSignalName   =>  "SDR7",            OutTemp         =>  SDR7_zd,            Paths           => (               0 => (InputChangeTime   => BUFIN_ipd'LAST_EVENT,                    PathDelay         => VitalExtendToFillDelay(tpd_BUFIN_SDR0),                     PathCondition     => (Byte1(1) = '1')),               1 => (InputChangeTime   => Byte1(1)'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDR0,                     PathCondition     => TRUE ) ),            GlitchData      => SDR7_GlitchData );        VitalPathDelay01Z (            OutSignal       =>  SDR8,            OutSignalName   =>  "SDR8",            OutTemp         =>  SDR8_zd,            Paths           => (               0 => (InputChangeTime   => BUFIN_ipd'LAST_EVENT,                    PathDelay         => VitalExtendToFillDelay(tpd_BUFIN_SDR0),                     PathCondition     => (Byte1(4) = '1')),               1 => (InputChangeTime   => Byte1(4)'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDR0,                     PathCondition     => TRUE ) ),            GlitchData      => SDR8_GlitchData );        VitalPathDelay01Z (            OutSignal       =>  SDR9,            OutSignalName   =>  "SDR9",            OutTemp         =>  SDR9_zd,            Paths           => (               0 => (InputChangeTime   => BUFIN_ipd'LAST_EVENT,                    PathDelay         => VitalExtendToFillDelay(tpd_BUFIN_SDR0),                     PathCondition     => (Byte1(5) = '1')),               1 => (InputChangeTime   => Byte1(5)'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDR0,                     PathCondition     => TRUE ) ),            GlitchData      => SDR9_GlitchData );        VitalPathDelay01Z (            OutSignal       =>  SDR10,            OutSignalName   =>  "SDR10",            OutTemp         =>  SDR10_zd,            Paths           => (               0 => (InputChangeTime   => BUFIN_ipd'LAST_EVENT,                    PathDelay         => VitalExtendToFillDelay(tpd_BUFIN_SDR0),                     PathCondition     => (Byte1(6) = '1')),               1 => (InputChangeTime   => Byte1(6)'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDR0,                     PathCondition     => TRUE ) ),            GlitchData      => SDR10_GlitchData );        VitalPathDelay01Z (            OutSignal       =>  SDR11,            OutSignalName   =>  "SDR11",            OutTemp         =>  SDR11_zd,            Paths           => (               0 => (InputChangeTime   => BUFIN_ipd'LAST_EVENT,                    PathDelay         => VitalExtendToFillDelay(tpd_BUFIN_SDR0),                     PathCondition     => (Byte1(7) = '1')),               1 => (InputChangeTime   => Byte1(7)'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDR0,                     PathCondition     => TRUE ) ),            GlitchData      => SDR11_GlitchData );        VitalPathDelay01Z (            OutSignal       =>  SDR12,            OutSignalName   =>  "SDR12",            OutTemp         =>  SDR12_zd,            Paths           => (               0 => (InputChangeTime   => BUFIN_ipd'LAST_EVENT,                    PathDelay         => VitalExtendToFillDelay(tpd_BUFIN_SDR0),                     PathCondition     => (Byte2(6) = '1')),               1 => (InputChangeTime   => Byte2(6)'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDR0,                     PathCondition     => TRUE ) ),            GlitchData      => SDR12_GlitchData );    END PROCESS VitalBehavior1;    VitalBehavior2 : PROCESS (SDATA_ipd, SCLK_ipd)        -- Type definitions        TYPE I2C_State IS (Stop,                           Start,                           Ignore,                           Read                          );        VARIABLE State     : I2C_State;        VARIABLE BitCount  : natural range 0 to 7;        VARIABLE ByteCount : natural range 0 to 4;        VARIABLE TmpByte   : std_logic_vector(7 downto 0);        VARIABLE SDATA_nwv : X01;        VARIABLE SCLK_nwv  : X01;        VARIABLE Ack       : boolean := false;        -- Timing Check Variables        VARIABLE Tviol_SDATA_SCLK  : X01 := '0';        VARIABLE TD_SDATA_SCLK     : VitalTimingDataType;        VARIABLE Pviol_SCLK        : X01 := '0';        VARIABLE PD_SCLK           : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Violation         : X01 := '0';        -- Functionality Results Variables        VARIABLE SDATA_zd          : std_ulogic;        -- Output Glitch Detection Variables        VARIABLE SDATA_GlitchData  : VitalGlitchDataType;    BEGIN        SDATA_nwv := to_X01(SDATA_ipd);        SCLK_nwv := to_X01(SCLK_ipd);        ------------------------------------------------------------------------        -- Timing Check Section        ------------------------------------------------------------------------        IF (TimingChecksOn) THEN            VitalSetupHoldCheck (                TestSignal      => SDATA_ipd,                TestSignalName  => "SDATA",                RefSignal       => SCLK_ipd,                RefSignalName   => "SCLK",                SetupHigh       => tsetup_SDATA_SCLK,                SetupLow        => tsetup_SDATA_SCLK,                HoldHigh        => thold_SDATA_SCLK,                HoldLow         => thold_SDATA_SCLK,                CheckEnabled    => TRUE,                RefTransition   => '*',                HeaderMsg       => InstancePath & "/cy2313anz",                TimingData      => TD_SDATA_SCLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_SDATA_SCLK            );            VitalPeriodPulseCheck (                TestSignal      => SCLK_ipd,                TestSignalName  => "SCLK",                Period          => tperiod_SCLK_posedge,                PulseWidthHigh  => tpw_SCLK_posedge,                PulseWidthLow   => tpw_SCLK_negedge,                CheckEnabled    => TRUE,                HeaderMsg       => InstancePath & "/cy2313anz",                PeriodData      => PD_SCLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Pviol_SCLK            );        END IF;        ------------------------------------------------------------------------        -- Functionality Section        ------------------------------------------------------------------------        Violation := Tviol_SDATA_SCLK OR Pviol_SCLK;        ASSERT Violation = '0'        REPORT InstancePath & " control registers may be" &                            " incorret due to I2C timing violation(s)"        SEVERITY Warning;        IF (falling_edge(SDATA_ipd) AND SCLK_ipd'stable AND SCLK_nwv = '1') THEN            State := Start;            BitCount := 0;            ByteCount := 0;        ELSIF (rising_edge(SDATA_ipd) AND SCLK_ipd'stable AND SCLK_nwv = '1')             THEN            State := Stop;        END IF;        IF (rising_edge(SCLK_ipd) AND Ack = false) THEN            CASE State IS                WHEN Start =>                    TmpByte(BitCount) := SDATA_nwv;                    IF (BitCount < 7) THEN                        BitCount := BitCount + 1;                    ELSIF (TmpByte = Address) THEN                        State := Read;                        Ack := true;                    ELSE                        State := Ignore;                    END IF;                WHEN Read =>                    CASE ByteCount IS                        WHEN 0 | 1 =>      -- throw away first 2 bytes                            IF (BitCount < 7) THEN                                BitCount := BitCount + 1;                            ELSE                                ByteCount := ByteCount + 1;                                Ack := true;                            END IF;                        WHEN 2 =>                            Byte0(BitCount) <= SDATA_nwv;                            IF (BitCount < 7) THEN                                BitCount := BitCount + 1;                            ELSE                                ByteCount := ByteCount + 1;                                Ack := true;                            END IF;                        WHEN 3 =>                            Byte1(BitCount) <= SDATA_nwv;                            IF (BitCount < 7) THEN                                BitCount := BitCount + 1;                            ELSE                                ByteCount := ByteCount + 1;                                Ack := true;                            END IF;                        WHEN 4 =>                            Byte2(BitCount) <= SDATA_nwv;                            IF (BitCount < 7) THEN                                BitCount := BitCount + 1;                            ELSE                                Ack := true;                            END IF;                    END CASE;                WHEN Stop =>                    NULL;                WHEN Ignore =>                    NULL;           END CASE;        END IF;        IF (falling_edge(SCLK_ipd) AND Ack = true) THEN            IF (SDATA_zd = '0') THEN                Ack := false;                SDATA_zd := 'Z';                BitCount := 0;            ELSE                SDATA_zd := '0';            END IF;        END IF;        ------------------------------------------------------------------------        -- Path Delay Section        ------------------------------------------------------------------------        VitalPathDelay01Z (            OutSignal       =>  SDATA,            OutSignalName   =>  "SDATA",            OutTemp         =>  SDATA_zd,            Paths           => (               0 => (InputChangeTime   => SCLK_ipd'LAST_EVENT,                     PathDelay         => tpd_SCLK_SDATA,                     PathCondition     => TRUE ) ),            GlitchData      => SDATA_GlitchData );    END PROCESS VitalBehavior2;END vhdl_behavioral;

⌨️ 快捷键说明

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