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

📄 idt71v65603.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        IF (wr3) THEN            IF (BWA2 = '0') THEN                IF Violation = 'X' THEN                    MemDataA(MemAddr1) := -1;                ELSE                    MemDataA(MemAddr1) := to_nat(DatAIn);                END IF;            END IF;            IF (BWB2 = '0') THEN                IF Violation = 'X' THEN                    MemDataB(MemAddr1) := -1;                ELSE                    MemDataB(MemAddr1) := to_nat(DatBIn);                END IF;            END IF;            IF (BWC2 = '0') THEN                IF Violation = 'X' THEN                    MemDataC(MemAddr1) := -1;                ELSE                    MemDataC(MemAddr1) := to_nat(DatCIn);                END IF;            END IF;            IF (BWD2 = '0') THEN                IF Violation = 'X' THEN                    MemDataD(MemAddr1) := -1;                ELSE                    MemDataD(MemAddr1) := to_nat(DatDIn);                END IF;            END IF;        END IF;        MemAddr1 := MemAddr;        OBuf2 := OBuf1;        -- The State Machine        CASE state IS            WHEN desel =>                CASE command IS                    WHEN ds =>                        OBuf1 := (others => 'Z');                    WHEN read =>                        state <= begin_rd;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        IF MemDataA(MemAddr) = -2 THEN                            OBuf1(8 downto 0) := (others => 'U');                        ELSIF MemDataA(MemAddr) = -1 THEN                            OBuf1(8 downto 0) := (others => 'X');                        ELSE                            OBuf1(8 downto 0) := to_slv(MemDataA(MemAddr),9);                        END IF;                        IF MemDataB(MemAddr) = -2 THEN                            OBuf1(17 downto 9) := (others => 'U');                        ELSIF MemDataB(MemAddr) = -1 THEN                            OBuf1(17 downto 9) := (others => 'X');                        ELSE                            OBuf1(17 downto 9) := to_slv(MemDataB(MemAddr),9);                        END IF;                        IF MemDataC(MemAddr) = -2 THEN                            OBuf1(26 downto 18) := (others => 'U');                        ELSIF MemDataC(MemAddr) = -1 THEN                            OBuf1(26 downto 18) := (others => 'X');                        ELSE                            OBuf1(26 downto 18) := to_slv(MemDataC(MemAddr),9);                        END IF;                        IF MemDataD(MemAddr) = -2 THEN                            OBuf1(35 downto 27) := (others => 'U');                        ELSIF MemDataD(MemAddr) = -1 THEN                            OBuf1(35 downto 27) := (others => 'X');                        ELSE                            OBuf1(35 downto 27) := to_slv(MemDataD(MemAddr),9);                        END IF;                    WHEN write =>                        state <= begin_wr;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        OBuf1 := (others => 'Z');                        BWA1 := BWANIn;                        BWB1 := BWBNIn;                        BWC1 := BWCNIn;                        BWD1 := BWDNIn;                        wr1  := true;                    WHEN burst =>                        OBuf1 := (others => 'Z');                 END CASE;            WHEN begin_rd =>                Burst_Cnt := 0;                CASE command IS                    WHEN ds =>                        state <= desel;                        OBuf1 := (others => 'Z');                    WHEN read =>                        state <= begin_rd;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        IF MemDataA(MemAddr) = -2 THEN                            OBuf1(8 downto 0) := (others => 'U');                        ELSIF MemDataA(MemAddr) = -1 THEN                            OBuf1(8 downto 0) := (others => 'X');                        ELSE                            OBuf1(8 downto 0) := to_slv(MemDataA(MemAddr),9);                        END IF;                        IF MemDataB(MemAddr) = -2 THEN                            OBuf1(17 downto 9) := (others => 'U');                        ELSIF MemDataB(MemAddr) = -1 THEN                            OBuf1(17 downto 9) := (others => 'X');                        ELSE                            OBuf1(17 downto 9) := to_slv(MemDataB(MemAddr),9);                        END IF;                        IF MemDataC(MemAddr) = -2 THEN                            OBuf1(26 downto 18) := (others => 'U');                        ELSIF MemDataC(MemAddr) = -1 THEN                            OBuf1(26 downto 18) := (others => 'X');                        ELSE                            OBuf1(26 downto 18) := to_slv(MemDataC(MemAddr),9);                        END IF;                        IF MemDataD(MemAddr) = -2 THEN                            OBuf1(35 downto 27) := (others => 'U');                        ELSIF MemDataD(MemAddr) = -1 THEN                            OBuf1(35 downto 27) := (others => 'X');                        ELSE                            OBuf1(35 downto 27) := to_slv(MemDataD(MemAddr),9);                        END IF;                    WHEN write =>                        state <= begin_wr;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        OBuf1 := (others => 'Z');                        BWA1 := BWANIn;                        BWB1 := BWBNIn;                        BWC1 := BWCNIn;                        BWD1 := BWDNIn;                        wr1  := true;                    WHEN burst =>                        state <= burst_rd;                        Burst_Cnt := Burst_Cnt + 1;                        IF (Burst_Cnt = 4) THEN                            Burst_Cnt := 0;                        END IF;                        offset := Burst_Seq(memstart)(Burst_Cnt);                        MemAddr := startaddr + offset;                        IF MemDataA(MemAddr) = -2 THEN                            OBuf1(8 downto 0) := (others => 'U');                        ELSIF MemDataA(MemAddr) = -1 THEN                            OBuf1(8 downto 0) := (others => 'X');                        ELSE                            OBuf1(8 downto 0) := to_slv(MemDataA(MemAddr),9);                        END IF;                        IF MemDataB(MemAddr) = -2 THEN                            OBuf1(17 downto 9) := (others => 'U');                        ELSIF MemDataB(MemAddr) = -1 THEN                            OBuf1(17 downto 9) := (others => 'X');                        ELSE                            OBuf1(17 downto 9) := to_slv(MemDataB(MemAddr),9);                        END IF;                        IF MemDataC(MemAddr) = -2 THEN                            OBuf1(26 downto 18) := (others => 'U');                        ELSIF MemDataC(MemAddr) = -1 THEN                            OBuf1(26 downto 18) := (others => 'X');                        ELSE                            OBuf1(26 downto 18) := to_slv(MemDataC(MemAddr),9);                        END IF;                        IF MemDataD(MemAddr) = -2 THEN                            OBuf1(35 downto 27) := (others => 'U');                        ELSIF MemDataD(MemAddr) = -1 THEN                            OBuf1(35 downto 27) := (others => 'X');                        ELSE                            OBuf1(35 downto 27) := to_slv(MemDataD(MemAddr),9);                        END IF;                 END CASE;            WHEN begin_wr =>                BWA2 := BWA1;                BWB2 := BWB1;                BWC2 := BWC1;                BWD2 := BWD1;                Burst_Cnt := 0;                CASE command IS                    WHEN ds =>                        state <= desel;                        OBuf1 := (others => 'Z');                    WHEN read =>                        state <= begin_rd;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        IF MemDataA(MemAddr) = -2 THEN                            OBuf1(8 downto 0) := (others => 'U');                        ELSIF MemDataA(MemAddr) = -1 THEN                            OBuf1(8 downto 0) := (others => 'X');                        ELSE                            OBuf1(8 downto 0) := to_slv(MemDataA(MemAddr),9);                        END IF;                        IF MemDataB(MemAddr) = -2 THEN                            OBuf1(17 downto 9) := (others => 'U');                        ELSIF MemDataB(MemAddr) = -1 THEN                            OBuf1(17 downto 9) := (others => 'X');                        ELSE                            OBuf1(17 downto 9) := to_slv(MemDataB(MemAddr),9);                        END IF;                        IF MemDataC(MemAddr) = -2 THEN                            OBuf1(26 downto 18) := (others => 'U');                        ELSIF MemDataC(MemAddr) = -1 THEN                            OBuf1(26 downto 18) := (others => 'X');                        ELSE                            OBuf1(26 downto 18) := to_slv(MemDataC(MemAddr),9);                        END IF;                        IF MemDataD(MemAddr) = -2 THEN                            OBuf1(35 downto 27) := (others => 'U');                        ELSIF MemDataD(MemAddr) = -1 THEN                            OBuf1(35 downto 27) := (others => 'X');                        ELSE                            OBuf1(35 downto 27) := to_slv(MemDataD(MemAddr),9);                        END IF;                    WHEN write =>                        state <= begin_wr;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        OBuf1 := (others => 'Z');                        BWA1 := BWANIn;                        BWB1 := BWBNIn;                        BWC1 := BWCNIn;                        BWD1 := BWDNIn;                        wr1  := true;                    WHEN burst =>                        state <= burst_wr;                        Burst_Cnt := Burst_Cnt + 1;                        IF (Burst_Cnt = 4) THEN                            Burst_Cnt := 0;                        END IF;                        offset := Burst_Seq(memstart)(Burst_Cnt);                        MemAddr := startaddr + offset;                        BWA1 := BWANIn;                        BWB1 := BWBNIn;                        BWC1 := BWCNIn;                        BWD1 := BWDNIn;                        wr1  := true;                 END CASE;            WHEN burst_rd =>                CASE command IS                    WHEN ds =>                        state <= desel;                        OBuf1 := (others => 'Z');                    WHEN read =>                        state <= begin_rd;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        IF MemDataA(MemAddr) = -2 THEN                            OBuf1(8 downto 0) := (others => 'U');                        ELSIF MemDataA(MemAddr) = -1 THEN                            OBuf1(8 downto 0) := (others => 'X');                        ELSE                            OBuf1(8 downto 0) := to_slv(MemDataA(MemAddr),9);                        END IF;                        IF MemDataB(MemAddr) = -2 THEN                            OBuf1(17 downto 9) := (others => 'U');                        ELSIF MemDataB(MemAddr) = -1 THEN                            OBuf1(17 downto 9) := (others => 'X');                        ELSE                            OBuf1(17 downto 9) := to_slv(MemDataB(MemAddr),9);                        END IF;                        IF MemDataC(MemAddr) = -2 THEN                            OBuf1(26 downto 18) := (others => 'U');                        ELSIF MemDataC(MemAddr) = -1 THEN                            OBuf1(26 downto 18) := (others => 'X');                        ELSE                            OBuf1(26 downto 18) := to_slv(MemDataC(MemAddr),9);                        END IF;                        IF MemDataD(MemAddr) = -2 THEN                            OBuf1(35 downto 27) := (others => 'U');                        ELSIF MemDataD(MemAddr) = -1 THEN                            OBuf1(35 downto 27) := (others => 'X');                        ELSE                            OBuf1(35 downto 27) := to_slv(MemDataD(MemAddr),9);                        END IF;                    WHEN write =>                        s

⌨️ 快捷键说明

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