⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cy7c453.vhd

📁 VHDL的ram和fifo model code 包含众多的厂家
💻 VHD
📖 第 1 页 / 共 3 页
字号:
                    END IF;                END IF;            END IF;               IF Start = '1' THEN   -- Read/Write Cycles                DataReg := Data;                -- Write Cycle                IF rising_edge(CKW) AND ENWNeg ='0' THEN                    IF wr_stat=act  AND NOT wr_inhibit THEN                        IF parity_enable THEN                            IF parity_generate THEN                                 DataReg := GenParity(Data,parity_odd_even,8);                            ELSE                                check_parity:=CheckParity(Data,                                              parity_odd_even,9);                                IF check_parity=Data(8) THEN                                    DataReg(8) := '1';                                ELSE                                    DataReg(8) :='0';                                END IF;                            END IF;                        END IF;                        IF Violation ='0' THEN                            FIFOMemory( WritePointer ) := to_nat(DataReg);                        ELSE                            FIFOMemory( WritePointer ) := -1;                        END IF;                         IF WritePointer < FIFOSize THEN                            WritePointer <=WritePointer + 1;                        ELSE                            WritePointer <=0;                        END IF;                        CountPointer <= CountPointer + 1;                        IF CountPointer >  (FIFOSize - FullOffReg - 1) THEN                            IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd <= '0';                            ELSE XONeg_zd <= '0' AFTER (tCKW);                            END IF;                        END IF;                        IF CountPointer = FIFOSize - 1  THEN                            IF tSKEW_CKR_CKW >= tSKEW1 THEN ENeg_zd <= '0';                            ELSE ENeg_zd <= '0' AFTER (tCKW);                            END IF;                            wr_inhibit := TRUE;                        END IF;                            IF CountPointer < FIFOSize/2 - 1   THEN                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd <= '1';                            ELSE HFNeg_zd <= '1' AFTER (tCKW);                            END IF;                        ELSE                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd <= '0';                            ELSE HFNeg_zd <= '0' AFTER (tCKW);                            END IF;                        END IF;                        IF fifo_mode/=single THEN                            IF CountPointer = FIFOSize - 1 THEN                                IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd <= '0';                                ELSE XONeg_zd <= '0' AFTER (tCKW);                                END IF;                            ELSE                                IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd <= '1';                                ELSE XONeg_zd <= '1' AFTER (tCKW);                                END IF;                            END IF;                        END IF;                    END IF;                END IF;  -- End of Write Cycle                      -- Read Cycle                IF rising_edge(CKR) AND ENRNeg = '0' THEN                    IF  rd_stat=act THEN                        wr_inhibit := FALSE;                        IF ReadPointer= FIFOSize THEN                           ReadPointer<=0;                        ELSE                             ReadPointer<=ReadPointer + 1;                        END IF;                        CountPointer <= CountPointer - 1;                        IF CountPointer = 1 THEN                            rd_stat := inact;                            IF tSKEW_CKW_CKR >= tSKEW1 THEN ENeg_zd <= '0';                            ELSE ENeg_zd <= '0' AFTER (tCKR);                            END IF;                        ELSE                             IF tSKEW_CKW_CKR >= tSKEW1 THEN ENeg_zd <= '1';                            ELSE ENeg_zd <= '1' AFTER (tCKR);                            END IF;                        END IF;                        IF fifo_mode = single THEN                             IF CountPointer <= EmptyOffReg + 1 THEN                                IF tSKEW_CKW_CKR >= tSKEW2 THEN XONeg_zd <= '0';                                ELSE XONeg_zd <= '0' AFTER (tCKR);                                END IF;                            ELSE                                IF tSKEW_CKW_CKR >= tSKEW2 THEN XONeg_zd <= '1';                                ELSE XONeg_zd <= '1' AFTER (tCKR);                                END IF;                            END IF;                        END IF;                        IF fifo_mode /= single AND CountPointer = 0 THEN                            IF tSKEW_CKW_CKR >= tSKEW2 THEN XONeg_zd <= '1';                            ELSE XONeg_zd <= '1' AFTER (tCKR);                            END IF;                            rd_stat := inact;                        END IF;                    END IF;                    IF OENeg = '0' THEN                        IF (FIFOMemory(ReadPointer)>=0) THEN                            Q_zd <= to_slv(FIFOMemory(ReadPointer),9);                        ELSE                            Q_zd <= (OTHERS=>'X');                        END IF;                    END IF;                END IF; -- End of Read Cycle                IF falling_edge(FLNeg) THEN -- Expansion Check                    IF XINeg='0' THEN                        ReadPointer <= 0;                        CountPointer <= WritePointer;                        IF CountPointer = 0 THEN                            IF tSKEW_CKR_CKW >= tSKEW1 THEN ENeg_zd  <= '0';                            ELSE ENeg_zd  <= '0' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd  <= '1';                            ELSE HFNeg_zd  <= '0' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd  <=  '0';                            ELSE XONeg_zd  <=  '0' AFTER (tCKR);                            END IF;                        ELSIF CountPointer < EmptyOffReg THEN                            IF tSKEW_CKR_CKW >= tSKEW1 THEN ENeg_zd  <= '1';                            ELSE ENeg_zd  <= '1' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd  <= '1' ;                            ELSE HFNeg_zd  <= '1' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd  <=  '0';                            ELSE XONeg_zd  <=  '0' AFTER (tCKR);                            END IF;                        ELSIF CountPointer < FIFOSize/2 THEN                            IF tSKEW_CKR_CKW >= tSKEW1 THEN ENeg_zd  <= '1';                            ELSE ENeg_zd  <= '1' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd  <= '0' ;                            ELSE HFNeg_zd  <= '0' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd  <=  '1';                            ELSE XONeg_zd  <=  '1' AFTER (tCKR);                            END IF;                        ELSIF CountPointer < FIFOSize-FullOffReg THEN                            IF tSKEW_CKR_CKW >= tSKEW1 THEN ENeg_zd  <= '1';                            ELSE ENeg_zd  <= '1' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd  <= '0' ;                            ELSE HFNeg_zd  <= '0' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd  <=  '1';                            ELSE XONeg_zd  <=  '1' AFTER (tCKR);                            END IF;                        ELSIF CountPointer < FIFOSize THEN                            IF tSKEW_CKR_CKW >= tSKEW1 THEN ENeg_zd  <= '1';                            ELSE ENeg_zd  <= '1' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd  <= '0' ;                            ELSE HFNeg_zd  <= '0' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd  <=  '1';                            ELSE XONeg_zd  <=  '1' AFTER (tCKR);                            END IF;                        ELSE                            IF tSKEW_CKR_CKW >= tSKEW1 THEN ENeg_zd  <= '0';                            ELSE ENeg_zd  <= '0' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW1 THEN HFNeg_zd  <= '0' ;                            ELSE HFNeg_zd  <= '0' AFTER (tCKW);                            END IF;                            IF tSKEW_CKR_CKW >= tSKEW2 THEN XONeg_zd  <=  '0';                            ELSE XONeg_zd  <=  '0' AFTER (tCKR);                            END IF;                        END IF;                    ELSE                        IF ENWNeg='1' AND ENRNeg='1' THEN                            ReadPointer <= 0; -- Retransmit                        END IF;                    END IF;                ELSIF falling_edge(XINeg) AND fifo_mode = other_exp THEN                    IF wr_stat = inact THEN                        wr_stat := act;                    ELSE                        rd_stat := act;                    END IF;                END IF;    -- End of Expansion Checking                IF rising_edge(OENeg) THEN                    Q_zd <= ( OTHERS => 'Z' );                END IF;         END IF;    -- End of Start    END PROCESS MainReadWrite;    ------------------------------------------------------------------------    -- Detection of the actual tSKEW vals                                 --    ------------------------------------------------------------------------    SkewDetector: PROCESS(CKR, CKW)        VARIABLE tCKRposedge : Time := 0 ns;        VARIABLE tCKWposedge : Time := 0 ns;                BEGIN            IF CKR'event AND CKR = '1'            THEN tCKRposedge := Now;                 tSKEW_CKW_CKR <= Now - tCKWposedge;            END IF;            IF CKW'event AND CKW = '1'            THEN tCKWposedge := Now;                 tSKEW_CKR_CKW <= Now - tCKRposedge;            END IF;        END PROCESS SkewDetector;        ------------------------------------------------------------------------        -- Path delay section                                                 --        ------------------------------------------------------------------------        -- path delay for ENeg        EFPathDelay: PROCESS (ENeg_zd)        VARIABLE ENeg_GlitchData  : VitalGlitchDataType;        BEGIN           VitalPathDelay01               (OutSignal     => ENeg,                OutSignalName => "ENeg",                OutTemp       => ENeg_zd,                GlitchData    => ENeg_GlitchData,                Paths         => (0 => (InputChangeTime => MRNeg'LAST_EVENT,                                        PathDelay       => tpd_MRNeg_ENeg,                                        PathCondition   => true),                                  1 => (InputChangeTime => CKR'LAST_EVENT,                                        PathDelay       => tpd_CKW_ENeg,                                        PathCondition   => true),                                  2 => (InputChangeTime => CKW'LAST_EVENT,                                        PathDelay       => tpd_CKW_ENeg,                                        PathCondition   => true)));        END PROCESS EFPathDelay;        -- path delay for XONeg        PAEPathDelay: PROCESS (XONeg_zd)           VARIABLE XONeg_GlitchData  : VitalGlitchDataType;        BEGIN           VitalPathDelay01               (OutSignal     => XONeg,                OutSignalName => "XONeg",                OutTemp       => XONeg_zd,                GlitchData    => XONeg_GlitchData,                Paths         => (0 => (InputChangeTime => MRNeg'LAST_EVENT,                                        PathDelay       => tpd_MRNeg_ENeg,                                        PathCondition   => true),                                  1 => (InputChangeTime => CKR'LAST_EVENT,                                        PathDelay       => tpd_CKW_ENeg,                                        PathCondition   => true),                                  2 => (InputChangeTime => CKW'LAST_EVENT,                                        PathDelay       => tpd_CKW_ENeg,                                        PathCondition   => true)));        END PROCESS PAEPathDelay;        -- path delay for HFNeg        HFPathDelay: PROCESS (HFNeg_zd)           VARIABLE HFNeg_GlitchData  : VitalGlitchDataType;        BEGIN           VitalPathDelay01               (OutSignal     => HFNeg,                OutSignalName => "HFNeg",                OutTemp       => HFNeg_zd,                GlitchData    => HFNeg_GlitchData,                Paths         => (0 => (InputChangeTime => MRNeg'LAST_EVENT,                                        PathDelay       => tpd_MRNeg_ENeg,                                        PathCondition   => true),                                  1 => (InputChangeTime => CKW'LAST_EVENT,                                        PathDelay       => tpd_CKW_ENeg,                                        PathCondition   => true)));                                          END PROCESS HFPathDelay;        -- path delay for ENeg        QPathDelay_Gen: FOR i IN FIFOWordLenght-1 DOWNTO 0 GENERATE            PROCESS (Q_zd(i))                VARIABLE Q_GlitchData  : VitalGlitchDataType;            BEGIN                VitalPathDelay01Z                    (OutSignal     => Q(i),                     OutSignalName => "Q",                     OutTemp       => Q_zd(i),                     GlitchData    => Q_GlitchData,                     Paths         =>(0 =>(InputChangeTime => MRNeg'LAST_EVENT,                                           PathDelay       =>                                           VitalExtendToFillDelay(tpd_MRNeg_Q0),                                           PathCondition   =>true),                                      1 =>(InputChangeTime => CKR'LAST_EVENT,                                           PathDelay =>                                           VitalExtendToFillDelay(tpd_CKR_Q0),                                           PathCondition   =>true),                                      2 =>(InputChangeTime =>OENeg'LAST_EVENT,                                           PathDelay       =>tpd_OENeg_Q0,                                           PathCondition   =>TRUE)));            END PROCESS;        END GENERATE QPathDelay_Gen;    END BLOCK VitalBehavior;END vhdl_behavioral;

⌨️ 快捷键说明

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