?? cy2313anz.vhd
字號:
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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -