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

📄 idt72t36135m.vhd

📁 VHDL的ram和fifo model code 包含众多的厂家
💻 VHD
📖 第 1 页 / 共 5 页
字号:
            VARIABLE CntWCLKforResPAF_1   : INTEGER;            VARIABLE CntWCLKforSetIR      : INTEGER;            VARIABLE CntRCLKforSetPAE     : INTEGER;            VARIABLE CntRCLKforSetPAE_1   : INTEGER;            VARIABLE CntRCLKforResPAE     : INTEGER;            VARIABLE CntRCLKforResPAE_1   : INTEGER;            VARIABLE CountForSerial       : INTEGER := 0;            VARIABLE TmpMemLocRead_H      : std_logic_vector(17 DOWNTO 0);            VARIABLE TmpMemLocRead_L      : std_logic_vector(17 DOWNTO 0);            VARIABLE TmpMemLocRead        : std_logic_vector(35 DOWNTO 0)                                                       := (OTHERS => '0');            VARIABLE TmpOffset            : std_logic_vector(37 DOWNTO 0);            VARIABLE TmpEmptyOffset       : std_logic_vector(18 DOWNTO 0);            VARIABLE TmpFullOffset        : std_logic_vector(18 DOWNTO 0);            VARIABLE TmpMemLocOE          : std_logic_vector(35 DOWNTO 0)                                                       := (OTHERS => '0');            VARIABLE TmpOffsetRead        : std_logic_vector(18 DOWNTO 0);            VARIABLE MemDataHigh     : MemStore;            VARIABLE MemDataLow      : MemStore;            VARIABLE time_OE       : TIME := 0 ns;            VARIABLE time_RCLK     : TIME := 0 ns;            VARIABLE TimeForFlag   : TIME := 0 ns;            VARIABLE TimeForFlag_1 : TIME := 0 ns;           -- Output Glitch Detection Variables        PROCEDURE SetFlagForOE        IS        BEGIN            IF OENeg = '1' THEN                FlagForOE <= '1','0' AFTER TimeForFlag;            END IF;        END SetFlagForOE;        PROCEDURE Pointer        IS        BEGIN            IF Retransmit = done THEN                RefPointer := RdPointer;            ELSE                RefPointer := MarkedPointer;            END IF;        END Pointer;        PROCEDURE SetFlags (ValueForPAE : IN INTEGER;                            ValueForPAF : IN INTEGER)        IS        BEGIN            IF (WrPointer > RdPointer AND                WrPointer - RdPointer >= ValueForPAE+1) OR               (WrPointer < RdPointer AND               TotalLoc - RdPointer + WrPointer >= ValueForPAE) OR               (WrPointer = RdPointer AND Mode = FWFTMode AND                CopyFFNeg = '1') OR               (WrPointer = RdPointer AND Mode = IDTStandard AND                CopyFFNeg = '0') THEN                ResetPAEabd := yes;                CntRCLKforResPAE := 2;            ELSE                SetPAEabd := yes;                CntRCLKforSetPAE := 2;            END IF;            Pointer;            IF (WrPointer > RefPointer AND               WrPointer - RefPointer >= ValueForPAF+1) OR               (WrPointer < RefPointer AND                TotalLoc - RefPointer + WrPointer >= ValueForPAF)OR               (WrPointer = RefPointer AND Mode = FWFTMode AND                CopyFFNeg = '1') OR               (WrPointer = RefPointer AND Mode = IDTStandard AND                CopyFFNeg = '0')THEN                SetPAFabd := yes;                CntWCLKforSetPAF := 2;            ELSE                ResetPAFabd := yes;                CntWCLKforResPAF := 2;            END IF;        END SetFlags;        PROCEDURE SetFlagsRt (ValueForPAE : IN INTEGER;                              ValueForPAF : IN INTEGER)        IS        BEGIN            IF (WrPointer > RdPointer AND                WrPointer - RdPointer >= ValueForPAE+1) OR               (WrPointer < RdPointer AND               TotalLoc - RdPointer + WrPointer >= ValueForPAE) OR               (WrPointer = RdPointer AND Mode = FWFTMode AND                CopyFFNeg = '1') OR               (WrPointer = RdPointer AND Mode = IDTStandard AND                CopyFFNeg = '0') THEN                ResetPAE := yes;                CntRCLKforResPAE := 1;            ELSE                SetPAE := yes;                CntRCLKforSetPAE := 1;            END IF;            Pointer;            IF (WrPointer > RefPointer AND               WrPointer - RefPointer >= ValueForPAF+1) OR               (WrPointer < RefPointer AND                TotalLoc - RefPointer + WrPointer >= ValueForPAF) OR               (WrPointer = RefPointer AND Mode = FWFTMode AND                CopyFFNeg = '1') OR               (WrPointer = RefPointer AND Mode = IDTStandard                AND CopyFFNeg = '0') THEN                SetPAF := yes;                CntWCLKforSetPAF := 1;            ELSE                ResetPAF := yes;                CntWCLKforResPAF := 1;            END IF;        END SetFlagsRt;        PROCEDURE SetFlagsWrite (ValueForPAE_Wr : IN INTEGER;                                 ValueForPAF_Wr : IN INTEGER)        IS        BEGIN            IF WrPointer >= RdPointer THEN                IF (WrPointer > RdPointer AND                    WrPointer - RdPointer = ValueForPAE_Wr+1) OR                   (WrPointer = RdPointer AND                    TotalLoc = ValueForPAE_Wr) THEN                    IF ProgFlagMode = Asynchronous THEN                        PAENeg_zd <= (OTHERS => '1');                        CopyPAE <= '1';                    ELSE                        ResetPAE := yes;                        CntRCLKforResPAE := 1;                    END IF;                END IF;            ELSE                IF TotalLoc - RdPointer + WrPointer = ValueForPAE_Wr THEN                    IF ProgFlagMode = Asynchronous THEN                        PAENeg_zd <= (OTHERS => '1');                        CopyPAE <= '1';                    ELSE                        ResetPAE_1 := yes;                        CntRCLKforResPAE_1 := 1;                    END IF;                END IF;            END IF;            Pointer;            IF WrPointer >= RefPointer THEN                IF (WrPointer > RefPointer AND                    WrPointer - RefPointer = ValueForPAF_Wr+1) OR                   (WrPointer = RefPointer AND                    WrPointer - RefPointer = ValueForPAF_Wr) THEN                    IF ProgFlagMode = Asynchronous THEN                        PAFNeg_zd <= (OTHERS => '0');                        CopyPAF <= '0';                    ELSE                        SetPAF := yes;                        CntWCLKforSetPAF := 2;                    END IF;                END IF;            ELSE                IF TotalLoc - RefPointer + WrPointer = ValueForPAF_Wr THEN                    IF ProgFlagMode = Asynchronous THEN                        PAFNeg_zd <= (OTHERS => '0');                        CopyPAF <= '0';                    ELSE                        SetPAF_1 := yes;                        CntWCLKforSetPAF_1 := 2;                    END IF;                END IF;            END IF;        END SetFlagsWrite;        PROCEDURE SetFlagsRead (ValueForPAE_Rd : IN INTEGER;                                ValueForPAF_Rd : IN INTEGER)        IS        BEGIN            IF WrPointer >= RdPointer THEN                IF WrPointer - RdPointer = ValueForPAE_Rd THEN                    IF ProgFlagMode = Asynchronous THEN                        PAENeg_zd <= (OTHERS => '0');                        CopyPAE <= '0';                    ELSE                        SetPAE := yes;                        CntRCLKforSetPAE := 2;                    END IF;                END IF;            ELSE                IF TotalLoc - RdPointer + WrPointer = ValueForPAE_Rd-1 THEN                    IF ProgFlagMode = Asynchronous THEN                        PAENeg_zd <= (OTHERS => '0');                        CopyPAE <= '0';                    ELSE                        SetPAE_1 := yes;                        CntRCLKforSetPAE_1 := 2;                    END IF;                END IF;            END IF;            Pointer;            IF WrPointer >= RefPointer THEN                IF (WrPointer > RefPointer AND                    WrPointer - RefPointer = ValueForPAF_Rd) OR                    (WrPointer = RefPointer AND                    TotalLoc = ValueForPAF_Rd)THEN                    IF ProgFlagMode = Asynchronous THEN                        PAFNeg_zd <= (OTHERS => '1');                        CopyPAF <= '1';                    ELSE                        ResetPAF := yes;                        CntWCLKforResPAF := 1;                    END IF;                END IF;            ELSE                IF TotalLoc - RefPointer + WrPointer = ValueForPAF_Rd-1 THEN                    IF ProgFlagMode = Asynchronous THEN                        PAFNeg_zd <= (OTHERS => '1');                        CopyPAF <= '1';                    ELSE                        ResetPAF_1 := yes;                        CntWCLKforResPAF_1 := 1;                    END IF;                END IF;            END IF;        END SetFlagsRead;        PROCEDURE CountCLK (Counter : INOUT INTEGER;                            Condition : INOUT yesno;                            SIGNAL CopyFlag : OUT std_ulogic;                            SIGNAL Flag: OUT std_logic_vector(1 TO 2);                            SIGNAL SkewFlag : IN std_ulogic;                            SIGNAL Value : IN std_ulogic;                            abd      : IN yesno := no)        IS        BEGIN            IF Counter = 0 THEN                Flag <= (OTHERS => Value);                CopyFlag <= Value;                Condition := no;                IF abd = yes THEN                    FlagAbd <= '1', '0' AFTER 1 ns;                END IF;            ELSE                IF SkewFlag = '0' THEN                    Counter := Counter-1;                END IF;            END IF;        END CountCLK;        PROCEDURE ParallelLoad        IS        BEGIN            IF ByteOffset = LSBEmptyOffset THEN                IF Violation = '0' THEN                    TmpEmptyOffset := B"111" & DIn(15 DOWNTO 0);                ELSE                    PaLdEmptyOk := no;                END IF;                ByteOffset := MSBEmptyOffset;            ELSIF ByteOffset = MSBEmptyOffset THEN                IF Violation = '0' THEN                    TmpEmptyOffset :=                    TmpEmptyOffset AND (DIn(2 DOWNTO 0) & X"FFFF");                ELSE                    PaLdEmptyOk := no;                END IF;                PaLdEmptyEnd := yes;                ByteOffset := LSBFullOffset;            ELSIF ByteOffset = LSBFullOffset THEN                IF Violation = '0' THEN                    TmpFullOffset := B"111" & DIn(15 DOWNTO 0);                ELSE                    PaLdFullOk := no;                END IF;                ByteOffset := MSBFullOffset;            ELSE                IF Violation = '0' THEN                    TmpFullOffset :=                     TmpFullOffset AND (DIn(2 DOWNTO 0) & X"FFFF");                ELSE                    PaLdFullOk := no;                END IF;                ByteOffset := LSBEmptyOffset;                PaLdFullEnd := yes;            END IF;        END ParallelLoad;        PROCEDURE SerialLoad        IS        BEGIN            IF Violation = '0' THEN

⌨️ 快捷键说明

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