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

📄 idt72v821.vhd

📁 VHDL的ram和fifo model code 包含众多的厂家
💻 VHD
📖 第 1 页 / 共 4 页
字号:
                  END IF;                  IF RCLK'Event AND RCLK = '1' THEN                    IF REN1Neg = '0' AND REN2Neg = '0' AND Pointer > 0 THEN                        IF Pointer = 1 THEN                            IF tSKEW_WCLK_RCLK >= tSKEW1 THEN EFNeg_zd <= '0';                            ELSE EFNeg_zd <= '0' AFTER (tRCLK);                            END IF;                            IF tSKEW_WCLK_RCLK >= tSKEW2 THEN PAENeg_zd <= '0';                            ELSE PAENeg_zd <= '0' AFTER (tRCLK);                            END IF;                            IF OENeg = '0' THEN                                    Q_zd <= FIFOMemory(0);                            END IF;                            Pointer <= Pointer - 1;                            FOR i IN 0 TO Pointer - 1 LOOP                                    FIFOMemory(i) := FIFOMemory(i + 1);                            END LOOP;                        ELSIF Pointer > EmptyOffReg + 1 THEN                            IF tSKEW_WCLK_RCLK >= tSKEW2 THEN PAENeg_zd <= '1';                            ELSE PAENeg_zd <= '1' AFTER (tRCLK);                            END IF;                            IF tSKEW_WCLK_RCLK >= tSKEW1 THEN EFNeg_zd <= '1';                            ELSE EFNeg_zd <= '1' AFTER (tRCLK);                            END IF;                            IF OENeg = '0' THEN                                    Q_zd <= FIFOMemory(0);                            END IF;                            Pointer <= Pointer - 1;                            FOR i IN 0 TO Pointer - 1 LOOP                                    FIFOMemory(i) := FIFOMemory(i + 1);                            END LOOP;                        ELSE                            IF tSKEW_WCLK_RCLK >= tSKEW2 THEN PAENeg_zd <= '0';                            ELSE PAENeg_zd <= '0' AFTER (tRCLK);                            END IF;                            IF tSKEW_WCLK_RCLK >= tSKEW1 THEN EFNeg_zd <= '1';                            ELSE EFNeg_zd <= '1' AFTER (tRCLK);                            END IF;EFNeg_zd <= '1';                            IF OENeg = '0' THEN                                    Q_zd <= FIFOMemory(0);                            END IF;                            Pointer <= Pointer - 1;                            FOR i IN 0 TO Pointer - 1 LOOP                                    FIFOMemory(i) := FIFOMemory(i + 1);                            END LOOP;                        END IF;                    ELSIF Pointer = 0 THEN                            IF tSKEW_WCLK_RCLK >= tSKEW1 THEN EFNeg_zd <= '0';                            ELSE EFNeg_zd <= '0' AFTER (tRCLK);                            END IF;                            IF tSKEW_WCLK_RCLK >= tSKEW2 THEN PAENeg_zd <= '0';                            ELSE PAENeg_zd <= '0' AFTER (tRCLK);                            END IF;                    ELSIF Pointer > EmptyOffReg THEN                            IF tSKEW_WCLK_RCLK >= tSKEW2 THEN PAENeg_zd <= '1';                            ELSE PAENeg_zd <= '1' AFTER (tRCLK);                            END IF;                            IF tSKEW_WCLK_RCLK >= tSKEW1 THEN EFNeg_zd <= '1';                            ELSE EFNeg_zd <= '1' AFTER (tRCLK);                            END IF;                    ELSE                            IF tSKEW_WCLK_RCLK >= tSKEW2 THEN PAENeg_zd <= '0';                            ELSE PAENeg_zd <= '0' AFTER (tRCLK);                            END IF;                            IF tSKEW_WCLK_RCLK >= tSKEW1 THEN EFNeg_zd <= '1';                            ELSE EFNeg_zd <= '1' AFTER (tRCLK);                            END IF;                    END IF;                  END IF;                  IF OENeg'Event AND OENeg = '1' THEN                    Q_zd <= ( OTHERS => 'Z' );                  END IF;                END IF;              END PROCESS MainReadWrite;        SetOffReg: PROCESS( RSNeg, WCLK, RCLK, Pointer )              BEGIN                IF RSNeg'Event AND RSNeg = '0' THEN                          EmptyOffReg <= 7;                          FullOffReg  <= 7;                          OffRegSwitch <= 1;                        ELSIF Start = '1' THEN                          IF  WCLK'Event AND WCLK = '1' THEN                            IF WEN1Neg = '0' AND WEN2LDNeg = '0' THEN                              IF OffRegSwitch = 1 THEN                                -- EMPTY: Least Significant Bit                                EmptyOffReg <= to_nat(D(7 DOWNTO 0));                                OffRegSwitch <= OffRegSwitch + 1;                              ELSIF OffRegSwitch = 2 THEN                                -- EMPTY: Most Significant Bit                                OffRegSwitch <= OffRegSwitch + 1;                              ELSIF OffRegSwitch = 3 THEN                                -- FULL: Least Significant Bit                                    FullOffReg <= to_nat(D(7 DOWNTO 0));                                OffRegSwitch <= OffRegSwitch + 1;                              ELSIF OffRegSwitch = 4 THEN                                -- FULL: Most Significant Bit                                OffRegSwitch <= 1;                              END IF;                            END IF;                          END IF;        END IF;        END PROCESS SetOffReg;        ------------------------------------------------------------------------        -- Detection of the actual tSKEW vals                                --        ------------------------------------------------------------------------        SkewDetector: PROCESS(RCLK, WCLK)            VARIABLE tRCLKposedge : Time := 0 ns;            VARIABLE tWCLKposedge : Time := 0 ns;        BEGIN            IF RCLK'event AND RCLK = '1'            THEN tRCLKposedge := Now;                 tSKEW_WCLK_RCLK <= Now - tWCLKposedge;            END IF;            IF WCLK'event AND WCLK = '1'            THEN tWCLKposedge := Now;                 tSKEW_RCLK_WCLK <= Now - tRCLKposedge;            END IF;        END PROCESS SkewDetector;        ------------------------------------------------------------------------        -- Path delay section                                                 --        ------------------------------------------------------------------------        -- path delay for EFNeg        EFPathDelay: PROCESS (EFNeg_zd)           VARIABLE EFNeg_GlitchData  : VitalGlitchDataType;        BEGIN           VitalPathDelay01               (OutSignal     => EFNeg,                OutSignalName => "EFNeg",                OutTemp       => EFNeg_zd,                GlitchData    => EFNeg_GlitchData,                Paths         => (0 => (InputChangeTime => RSNeg'last_event,                                        PathDelay       => tpd_RSNeg_EFNeg,                                        PathCondition   => true),                                  1 => (InputChangeTime => RCLK'last_event,                                        PathDelay       => tpd_RCLK_EFNeg,                                        PathCondition   => true)));        END PROCESS EFPathDelay;        -- path delay for PAENeg        PAEPathDelay: PROCESS (PAENeg_zd)           VARIABLE PAENeg_GlitchData  : VitalGlitchDataType;        BEGIN           VitalPathDelay01               (OutSignal     => PAENeg,                OutSignalName => "PAENeg",                OutTemp       => PAENeg_zd,                GlitchData    => PAENeg_GlitchData,                Paths         => (0 => (InputChangeTime => RSNeg'last_event,                                        PathDelay       => tpd_RSNeg_EFNeg,                                        PathCondition   => true),                                  1 => (InputChangeTime => RCLK'last_event,                                        PathDelay       => tpd_RCLK_PAENeg,                                        PathCondition   => true)));        END PROCESS PAEPathDelay;        -- path delay for PAFNeg        PAFPathDelay: PROCESS (PAFNeg_zd)           VARIABLE PAFNeg_GlitchData  : VitalGlitchDataType;        BEGIN           VitalPathDelay01               (OutSignal     => PAFNeg,                OutSignalName => "PAFNeg",                OutTemp       => PAFNeg_zd,                GlitchData    => PAFNeg_GlitchData,                Paths         => (0 => (InputChangeTime => RSNeg'last_event,                                        PathDelay       => tpd_RSNeg_EFNeg,                                        PathCondition   => true),                                  1 => (InputChangeTime => WCLK'last_event,                                        PathDelay       => tpd_WCLK_PAFNeg,                                        PathCondition   => true)));        END PROCESS PAFPathDelay;        -- path delay for FFNeg        FFPathDelay: PROCESS (FFNeg_zd)        VARIABLE FFNeg_GlitchData  : VitalGlitchDataType;        BEGIN           VitalPathDelay01               (OutSignal     => FFNeg,                OutSignalName => "FFNeg",                OutTemp       => FFNeg_zd,                GlitchData    => FFNeg_GlitchData,                Paths         => (0 => (InputChangeTime => RSNeg'last_event,                                        PathDelay       => tpd_RSNeg_EFNeg,                                        PathCondition   => true),                                  1 => (InputChangeTime => WCLK'last_event,                                        PathDelay       => tpd_WCLK_FFNeg,                                        PathCondition   => true)));        END PROCESS FFPathDelay;        -- path delay for Q        QPathDelay_Gen: FOR i IN Q'range 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 =>RSNeg'last_event,                                             PathDelay       =>tpd_RSNeg_Q0,                                             PathCondition   =>true),                                       1 => (InputChangeTime =>RCLK'last_event,                                             PathDelay       =>tpd_RCLK_Q0,                                             PathCondition   =>true),                                       2 => (InputChangeTime =>OENeg'last_event,                                             PathDelay       =>tpd_OENeg_Q0,                                             PathCondition   =>OENeg = '1')));            END PROCESS;       END GENERATE QPathDelay_Gen;    END BLOCK VitalBehavior;END vhdl_behavioral;

⌨️ 快捷键说明

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