📄 fifo7881.vhd
字号:
END IF ; ------------------------------------------------------------------------ -- Set IR high after reset ------------------------------------------------------------------------ IF ((WCLK_ipd'EVENT) AND (To_X01(WCLK_ipd) = '1') AND (To_X01(RSNeg_ipd) = '1') AND (wordcounter = 0) AND (rst = 0) AND (irflag = 0)) THEN wrtclkcount := wrtclkcount + 1 ; d_temp := TO_X01(d) ; CASE wrtclkcount IS WHEN 1 => NULL ; WHEN 2 => flagstate := "0101" ; IRF_zd := flagstate(3) ; irflag := 1 ; wrtclkcount := 0 ; WHEN OTHERS => NULL ; END CASE ; END IF ; ------------------------------------------------------------------------ -- Determine the status of the FIFO and assign the flag pins ------------------------------------------------------------------------ ae_limit := ae_offset ; af_limit := 1024 - af_offset ; hf_limit := 512 ; f_limit := 1024 ; IF not Is_X(d) THEN CASE flagstate IS WHEN "X10X" => NULL ; WHEN "X100" => NULL ; WHEN "0100" => NULL ; WHEN "0101" => IF ((wordcounter > ae_limit) AND (wordcounter < hf_limit)) THEN flagstate := "0001" ; orflag := 0 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "0001" => IF ((wordcounter > 0) AND (wordcounter <= ae_limit)) THEN flagstate := "0101" ; orflag := 0 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; IF ((wordcounter >= hf_limit) AND (wordcounter < af_limit)) THEN flagstate := "0011" ; orflag := 0 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "0011" => IF ((wordcounter > ae_limit) AND (wordcounter < hf_limit)) THEN flagstate := "0001" ; orflag := 0 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; IF ((wordcounter >= af_limit) AND (wordcounter < f_limit )) THEN flagstate := "0111" ; orflag := 0 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "0111" => IF ((wordcounter >= hf_limit) AND (wordcounter < af_limit)) THEN flagstate := "0011" ; orflag := 0 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; IF (wordcounter = f_limit ) THEN flagstate := "0110" ; orflag := 0 ; irflag := 0 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "0110" => NULL ; WHEN "1101" => -- IF (wordcounter = 0) THEN -- flagstate := "0101" ; -- orflag := 0 ; -- irflag := 1 ; -- ORF_zd := flagstate(0) ; -- AF_zd := flagstate(1) ; -- HF_zd := flagstate(2) ; -- IRF_zd := flagstate(3) ; -- END IF ; IF ((wordcounter > ae_limit) AND (wordcounter < hf_limit)) THEN flagstate := "1001" ; orflag := 1 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "1001" => IF ((wordcounter > 0) AND (wordcounter <= ae_limit)) THEN flagstate := "1101" ; orflag := 1 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; IF ((wordcounter >= hf_limit) AND (wordcounter < af_limit)) THEN flagstate := "1011" ; orflag := 1 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "1011" => IF ((wordcounter > ae_limit) AND (wordcounter < hf_limit)) THEN flagstate := "1001" ; orflag := 1 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; IF ((wordcounter >= af_limit) AND (wordcounter < f_limit )) THEN flagstate := "1111" ; orflag := 1 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "1111" => IF ((wordcounter >= hf_limit) AND (wordcounter < af_limit)) THEN flagstate := "1011" ; orflag := 1 ; irflag := 1 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; IF (wordcounter = f_limit ) THEN flagstate := "1110" ; orflag := 1 ; irflag := 0 ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END IF ; WHEN "1110" => NULL ; WHEN OTHERS => flagstate := "XXXX" ; ORF_zd := flagstate(0) ; AF_zd := flagstate(1) ; HF_zd := flagstate(2) ; IRF_zd := flagstate(3) ; END CASE ; END IF ; ------------------------------------------------------------------------ -- Path Delay Section ------------------------------------------------------------------------ VitalPathDelay01 ( OutSignal => ORF, OutSignalName => "ORF", OutTemp => ORF_zd, XOn => XOn, MsgOn => MsgOn, Paths => ( 0 => (InputChangeTime => RSNeg_ipd'LAST_EVENT, PathDelay => (0 ns, 0 ns), PathCondition => (RSNeg_ipd = '0') ), 1 => (InputChangeTime => RCLK_ipd'LAST_EVENT, PathDelay => tpd_RCLK_ORF, PathCondition => TRUE ) ), GlitchData => ORF_GlitchData ); VitalPathDelay01 ( OutSignal => IRF, OutSignalName => "IRF", OutTemp => IRF_zd, XOn => XOn, MsgOn => MsgOn, Paths => ( 0 => (InputChangeTime => RSNeg_ipd'LAST_EVENT, PathDelay => (0 ns, 0 ns), PathCondition => (RSNeg_ipd = '0') ), 1 => (InputChangeTime => WCLK_ipd'LAST_EVENT, PathDelay => tpd_WCLK_IRF, PathCondition => TRUE ) ), GlitchData => IRF_GlitchData ); VitalPathDelay01 ( OutSignal => AF, OutSignalName => "AF", OutTemp => AF_zd, XOn => XOn, MsgOn => MsgOn, Paths => ( 0 => (InputChangeTime => RSNeg_ipd'LAST_EVENT, PathDelay => tpd_RSNeg_AF, PathCondition => (RSNeg_ipd = '0') ), 1 => (InputChangeTime => RCLK_ipd'LAST_EVENT, PathDelay => tpd_RCLK_AF, PathCondition => TRUE ) ), GlitchData => AF_GlitchData ); VitalPathDelay01 ( OutSignal => HF, OutSignalName => "HF", OutTemp => HF_zd, XOn => XOn, MsgOn => MsgOn, Paths => ( 0 => (InputChangeTime => RSNeg_ipd'LAST_EVENT, PathDelay => tpd_RSNeg_HF, PathCondition => (RSNeg_ipd = '0') ), 1 => (InputChangeTime => RCLK_ipd'LAST_EVENT, PathDelay => tpd_RCLK_HF, PathCondition => TRUE ) ), GlitchData => HF_GlitchData ); VitalPathDelay01Z ( OutSignal => Q17, OutSignalName => "Q17", OutTemp => Q_zd(17), XOn => XOn, MsgOn => MsgOn, Paths => ( 0 => (InputChangeTime => OE_ipd'LAST_EVENT, PathDelay => tpd_OE_Q0, PathCondition => TRUE ), 1 => (InputChangeTime => RCLK_ipd'LAST_EVENT, PathDelay => tpd_RCLK_Q0, PathCondition => TRUE ) ), GlitchData => Q_GlitchData ); VitalPathDelay01Z ( OutSignal => Q16, OutSignalName => "Q16", OutTemp => Q_zd(16), XOn => XOn, MsgOn => MsgOn, Paths => ( 0 => (InputChangeTime => OE_ipd'LAST_EVENT, PathDelay => tpd_OE_Q0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -