📄 cy7c199.vhd
字号:
AddressIn(0) => A0_ipd, AddressIn(1) => A1_ipd, AddressIn(2) => A2_ipd, AddressIn(3) => A3_ipd, AddressIn(4) => A4_ipd, AddressIn(5) => A5_ipd, AddressIn(6) => A6_ipd, AddressIn(7) => A7_ipd, AddressIn(8) => A8_ipd, AddressIn(9) => A9_ipd, AddressIn(10) => A10_ipd, AddressIn(11) => A11_ipd, AddressIn(12) => A12_ipd, AddressIn(13) => A13_ipd, AddressIn(14) => A14_ipd, OENegIn => OENeg_ipd, WENegIn => WENeg_ipd, CENegIn => CENeg_ipd ); SIGNAL D_zd : std_logic_vector(HiDbit DOWNTO 0); BEGIN ------------------------------------------------------------------------ -- Behavior Process ------------------------------------------------------------------------ Behavior : PROCESS (OENegIn, WENegIn, CENegIn, AddressIn, DataIn) -- Timing Check Variables VARIABLE Tviol_D0_WENeg : X01 := '0'; VARIABLE TD_D0_WENeg : VitalTimingDataType; VARIABLE Tviol_CENeg_WENeg : X01 := '0'; VARIABLE TD_CENeg_WENeg : VitalTimingDataType; VARIABLE Tviol_D0_CENeg : X01 := '0'; VARIABLE TD_D0_CENeg : VitalTimingDataType; VARIABLE Pviol_WENeg : X01 := '0'; VARIABLE PD_WENeg : VitalPeriodDataType := VitalPeriodDataInit; -- Memory array declaration TYPE MemStore IS ARRAY (0 to TotalLOC) OF NATURAL RANGE 0 TO MaxData; -- Functionality Results Variables VARIABLE Violation : X01 := '0'; VARIABLE DataDrive : std_logic_vector(HiDbit DOWNTO 0) := (OTHERS => 'X'); VARIABLE DataTemp : NATURAL RANGE 0 TO MaxData := 0; VARIABLE Location : NATURAL RANGE 0 TO TotalLOC := 0; VARIABLE MemData : MemStore; -- No Weak Values Variables VARIABLE OENeg_nwv : UX01 := 'X'; VARIABLE WENeg_nwv : UX01 := 'X'; VARIABLE CENeg_nwv : UX01 := 'X'; BEGIN OENeg_nwv := To_UX01 (s => OENegIn); WENeg_nwv := To_UX01 (s => WENegIn); CENeg_nwv := To_UX01 (s => CENegIn); -------------------------------------------------------------------- -- Timing Check Section -------------------------------------------------------------------- IF (TimingChecksOn) THEN VitalSetupHoldCheck ( TestSignal => DataIn, TestSignalName => "Data", RefSignal => WENeg, RefSignalName => "WENeg", SetupHigh => tsetup_D0_WENeg, SetupLow => tsetup_D0_WENeg, HoldHigh => thold_D0_WENeg, HoldLow => thold_D0_WENeg, CheckEnabled => (CENeg ='0' and OENeg ='1'), RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_D0_WENeg, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_D0_WENeg ); VitalSetupHoldCheck ( TestSignal => CENeg, TestSignalName => "CENeg", RefSignal => WENeg, RefSignalName => "WENeg", SetupLow => tsetup_CENeg_WENeg, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_CENeg_WENeg, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_CENeg_WENeg ); VitalSetupHoldCheck ( TestSignal => DataIn, TestSignalName => "Data", RefSignal => CENeg, RefSignalName => "CENeg", SetupHigh => tsetup_D0_CENeg, SetupLow => tsetup_D0_CENeg, CheckEnabled => (WENeg ='0' and OENeg ='1'), RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_D0_CENeg, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_D0_CENeg ); VitalPeriodPulseCheck ( TestSignal => WENegIn, TestSignalName => "WENeg", PulseWidthLow => tpw_WENeg_negedge, PeriodData => PD_WENeg, XOn => XOn, MsgOn => MsgOn, Violation => Pviol_WENeg, HeaderMsg => InstancePath & PartID, CheckEnabled => TRUE ); Violation := Pviol_WENeg OR Tviol_D0_WENeg OR Tviol_D0_CENeg OR Tviol_CENeg_WENeg; ASSERT Violation = '0' REPORT InstancePath & partID & ": simulation may be" & " inaccurate due to timing violations" SEVERITY SeverityMode; END IF; -- Timing Check Section -------------------------------------------------------------------- -- Functional Section -------------------------------------------------------------------- DataDrive := (OTHERS => 'Z'); IF (CENeg_nwv = '0') THEN IF (OENeg_nwv = '0' OR WENeg_nwv = '0') THEN Location := To_Nat(AddressIn); IF (OENeg_nwv = '0' AND WENeg_nwv = '1') THEN DataTemp := MemData(Location); DataDrive := To_slv(DataTemp, DataWidth); ELSE DataTemp := To_Nat(DataIn); MemData(Location) := DataTemp; END IF; END IF; END IF; -------------------------------------------------------------------- -- Output Section -------------------------------------------------------------------- D_zd <= DataDrive; END PROCESS; ------------------------------------------------------------------------ -- Path Delay Processes generated as a function of data width ------------------------------------------------------------------------ DataOut_Width : FOR i IN HiDbit DOWNTO 0 GENERATE DataOut_Delay : PROCESS (D_zd(i)) VARIABLE D_GlitchData:VitalGlitchDataArrayType(HiDbit Downto 0); BEGIN VitalPathDelay01Z ( OutSignal => DataOut(i), OutSignalName => "Data", OutTemp => D_zd(i), Mode => OnEvent, GlitchData => D_GlitchData(i), Paths => ( 0 => (InputChangeTime => OENeg_ipd'LAST_EVENT, PathDelay => tpd_OENeg_D0, PathCondition => TRUE), 1 => (InputChangeTime => CENeg_ipd'LAST_EVENT, PathDelay => tpd_CENeg_D0, PathCondition => TRUE), 2 => (InputChangeTime => AddressIn(0)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 3 => (InputChangeTime => AddressIn(1)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 4 => (InputChangeTime => AddressIn(2)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 5 => (InputChangeTime => AddressIn(3)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 6 => (InputChangeTime => AddressIn(4)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 7 => (InputChangeTime => AddressIn(5)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 8 => (InputChangeTime => AddressIn(6)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 9 => (InputChangeTime => AddressIn(7)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 10 => (InputChangeTime => AddressIn(8)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 11 => (InputChangeTime => AddressIn(9)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 12 => (InputChangeTime => AddressIn(10)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 13 => (InputChangeTime => AddressIn(11)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 14 => (InputChangeTime => AddressIn(12)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 15 => (InputChangeTime => AddressIn(13)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE), 16 => (InputChangeTime => AddressIn(14)'LAST_EVENT, PathDelay => VitalExtendToFillDelay(tpd_A0_D0), PathCondition => TRUE) ) ); END PROCESS; END GENERATE; END BLOCK;END vhdl_behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -