📄 cy7c453.vhd
字号:
VARIABLE wr_stat : stat_type ; VARIABLE wr_inhibit : BOOLEAN := false; VARIABLE program_wr : BOOLEAN := false; VARIABLE DataReg : STD_LOGIC_VECTOR(FIFOWordLenght - 1 DOWNTO 0); -- Timing Check Variables VARIABLE Tviol_D0_CKW : X01 := '0'; VARIABLE TD_D0_CKW : VitalTimingDataType; VARIABLE Tviol_MRNeg_CKW : X01 := '0'; VARIABLE TD_MRNeg_CKW : VitalTimingDataType; VARIABLE Tviol_MRNeg_CKR : X01 := '0'; VARIABLE TD_MRNeg_CKR : VitalTimingDataType; VARIABLE Tviol_ENWNeg_CKW : X01 := '0'; VARIABLE TD_ENWNeg_CKW : VitalTimingDataType; VARIABLE Tviol_ENRNeg_CKR : X01 := '0'; VARIABLE TD_ENRNeg_CKR : VitalTimingDataType; VARIABLE Tviol_CKW_MRNeg : X01 := '0'; VARIABLE TD_CKW_MRNeg : VitalTimingDataType; VARIABLE Tviol_CKR_MRNeg : X01 := '0'; VARIABLE TD_CKR_MRNeg : VitalTimingDataType; VARIABLE Pviol_CKW : X01 := '0'; VARIABLE TD_CKW : VitalPeriodDataType := VitalPeriodDataInit; VARIABLE Pviol_CKR : X01 := '0'; VARIABLE TD_CKR : VitalPeriodDataType := VitalPeriodDataInit; VARIABLE Pviol_FLNeg : X01 := '0'; VARIABLE TD_FLNeg : VitalPeriodDataType := VitalPeriodDataInit; VARIABLE Pviol_MRNeg : X01 := '0'; VARIABLE TD_MRNeg : VitalPeriodDataType := VitalPeriodDataInit; VARIABLE Rviol_CKW_MRNeg : X01 := '0'; VARIABLE RD_CKW_MRNeg : VitalTimingDataType; VARIABLE Rviol_CKR_MRNeg : X01 := '0'; VARIABLE RD_CKR_MRNeg : VitalTimingDataType; VARIABLE Rviol_ENRNeg_FLNeg : X01 := '0'; VARIABLE RD_ENRNeg_FLNeg : VitalTimingDataType; VARIABLE Rviol_ENWNeg_FLNeg : X01 := '0'; VARIABLE RD_ENWNeg_FLNeg : VitalTimingDataType; -- Functionality Results Variables VARIABLE Violation : X01 := '0'; BEGIN -------------------------------------------------------------------- -- Timing Check Section -------------------------------------------------------------------- IF (TimingChecksOn) THEN VitalSetupHoldCheck ( TestSignal => Data, TestSignalName => "D", RefSignal => CKW, RefSignalName => "CKW", SetupHigh => tsetup_D0_CKW, SetupLow => tsetup_D0_CKW, HoldHigh => thold_D0_CKW, HoldLow => thold_D0_CKW, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_D0_CKW, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_D0_CKW); VitalSetupHoldCheck ( TestSignal => ENWNeg, TestSignalName => "ENWNeg", RefSignal => CKW, RefSignalName => "CKW", SetupHigh => tsetup_ENWNeg_CKW, SetupLow => tsetup_ENWNeg_CKW, HoldHigh => thold_ENWNeg_CKW, HoldLow => thold_ENWNeg_CKW, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_ENWNeg_CKW, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_ENWNeg_CKW ); VitalSetupHoldCheck ( TestSignal => ENRNeg, TestSignalName => "ENRNeg", RefSignal => CKR, RefSignalName => "CKR", SetupHigh => tsetup_ENWNeg_CKW, SetupLow => tsetup_ENWNeg_CKW, HoldHigh => thold_ENWNeg_CKW, HoldLow => thold_ENWNeg_CKW, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_ENRNeg_CKR, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_ENRNeg_CKR ); VitalSetupHoldCheck ( TestSignal => CKW, TestSignalName => "RNeg", RefSignal => MRNeg, RefSignalName => "MRNeg", SetupLow => tsetup_CKW_MRNeg, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & PartID, TimingData => TD_CKW_MRNeg, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_CKW_MRNeg ); VitalSetupHoldCheck ( TestSignal => CKR, TestSignalName => "RNeg", RefSignal => MRNeg, RefSignalName => "MRNeg", SetupLow => tsetup_CKW_MRNeg, CheckEnabled => TRUE, RefTransition => '\', HeaderMsg => InstancePath & PartID, TimingData => TD_CKR_MRNeg, XOn => XOn, MsgOn => MsgOn, Violation => Tviol_CKR_MRNeg ); VitalPeriodPulseCheck ( TestSignal => CKR, TestSignalName => "CKR", Period => tperiod_CKR, PulseWidthLow => tpw_CKR_negedge, PulseWidthHigh => tpw_CKR_posedge, PeriodData => TD_CKR, XOn => XOn, MsgOn => MsgOn, HeaderMsg => InstancePath & PartID, CheckEnabled => TRUE, Violation => Pviol_CKR ); VitalPeriodPulseCheck ( TestSignal => CKW, TestSignalName => "CKW", Period => tperiod_CKR, PulseWidthLow => tpw_CKR_negedge, PulseWidthHigh => tpw_CKR_posedge, PeriodData => TD_CKW, XOn => XOn, MsgOn => MsgOn, HeaderMsg => InstancePath & PartID, CheckEnabled => TRUE, Violation => Pviol_CKW ); VitalPeriodPulseCheck ( TestSignal => MRNeg, TestSignalName => "MRNeg", PulseWidthLow => tpw_MRNeg_negedge, PeriodData => TD_MRNeg, XOn => XOn, MsgOn => MsgOn, HeaderMsg => InstancePath & PartID, CheckEnabled => TRUE, Violation => Pviol_MRNeg ); VitalPeriodPulseCheck ( TestSignal => FLNeg, TestSignalName => "MRNeg", PulseWidthLow => tpw_FLNeg_negedge, PeriodData => TD_FLNeg, XOn => XOn, MsgOn => MsgOn, HeaderMsg => InstancePath & PartID, CheckEnabled => TRUE, Violation => Pviol_FLNeg ); VitalRecoveryRemovalCheck ( TestSignal => CKW, TestSignalName => "CKW", RefSignal => MRNeg, RefSignalName => "MRNeg", Recovery => trecovery_CKW_MRNeg, ActiveLow => FALSE, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & partID, TimingData => RD_CKW_MRNeg, XOn => XOn, MsgOn => MsgOn, Violation => Rviol_CKW_MRNeg); VitalRecoveryRemovalCheck ( TestSignal => CKR, TestSignalName => "CKR", RefSignal => MRNeg, RefSignalName => "MRNeg", Recovery => trecovery_CKW_MRNeg, ActiveLow => FALSE, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & partID, TimingData => RD_CKR_MRNeg, XOn => XOn, MsgOn => MsgOn, Violation => Rviol_CKR_MRNeg); VitalRecoveryRemovalCheck ( TestSignal => ENWNeg, TestSignalName => "ENWNeg", RefSignal => FLNeg, RefSignalName => "FLNeg", Recovery => trecovery_ENRNeg_FLNeg, ActiveLow => FALSE, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & partID, TimingData => RD_ENWNeg_FLNeg, XOn => XOn, MsgOn => MsgOn, Violation => Rviol_ENWNeg_FLNeg); VitalRecoveryRemovalCheck ( TestSignal => ENRNeg, TestSignalName => "ENRNeg", RefSignal => FLNeg, RefSignalName => "FLNeg", Recovery => trecovery_ENRNeg_FLNeg, ActiveLow => FALSE, CheckEnabled => TRUE, RefTransition => '/', HeaderMsg => InstancePath & partID, TimingData => RD_ENRNeg_FLNeg, XOn => XOn, MsgOn => MsgOn, Violation => Rviol_ENRNeg_FLNeg); Violation := Tviol_D0_CKW OR Pviol_CKR OR Pviol_CKW OR Pviol_MRNeg OR Rviol_ENWNeg_FLNeg OR Rviol_ENRNeg_FLNeg OR Rviol_CKW_MRNeg OR Rviol_CKR_MRNeg; ASSERT Violation = '0' REPORT InstancePath & partID & " : signal values may be" & " incorrect due timing violation(s)" SEVERITY Warning; END IF; -- Timing Check Section --------------------------------------------------------------- -- Functionality section --------------------------------------------------------------- IF falling_edge(MRNeg) THEN Start <= '0'; WritePointer <= 0; ReadPointer <= 0; CountPointer <= 0; parity_enable <= FALSE; EmptyOffReg <= 16; FullOffReg <= 16; wr_inhibit := FALSE; ELSIF rising_edge(MRNeg) THEN IF NOT program_wr THEN ProgReg <= "000000001"; END IF; ENeg_zd <= '0'; HFNeg_zd <= '1'; XONeg_zd <= '0'; Start <= '1'; IF OENeg = '0' THEN Q_zd <= (OTHERS => '0'); ELSIF OENeg = '1' THEN Q_zd <= (OTHERS => 'Z'); END IF; IF XINeg='0' THEN fifo_mode := single; rd_stat := act; wr_stat := act; ELSIF FLNeg='0' THEN fifo_mode := first_exp; rd_stat := act; wr_stat := act; ELSE fifo_mode := other_exp; rd_stat := inact; wr_stat := inact; END IF; ELSIF MRNeg='0' THEN IF rising_edge(CKW) AND ENWNeg = '0' THEN program_wr:=TRUE; EmptyOffReg <= 16*to_nat(Data(5 DOWNTO 0)); FullOffReg <= 16*to_nat(Data(5 DOWNTO 0)); ProgReg <= Data; IF Data(8)='0' THEN parity_enable<=FALSE; ELSE parity_enable<=TRUE; END IF; IF Data(7)='0' THEN parity_generate<=TRUE; ELSE parity_generate<=FALSE; END IF; parity_odd_even<=Data(6); END IF; IF rising_edge(CKR) AND ENRNeg = '0' THEN IF OENeg = '0' THEN Q_zd <= ProgReg; ELSIF OENeg = '1' THEN Q_zd <= (OTHERS => 'Z');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -