k7a163600a.vhd

来自「vhdl cod for ram.For sp3e」· VHDL 代码 · 共 1,375 行 · 第 1/5 页

VHD
1,375
字号
                       & "command."                SEVERITY SeverityMode;        END IF;        OBuf2 := OBuf1;        -- The State Machine        CASE state IS            WHEN desel =>                CASE command IS                    WHEN ds =>                        OBuf1 := (others => 'Z');                    WHEN begin_rw =>                        state <= begin_rdwr;                        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 SCwr =>                        state <= SCwrite;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        OBuf1 := (others => 'Z');                        IF GWNIn = '0' THEN                            MemDataA(MemAddr) := -1;                            MemDataB(MemAddr) := -1;                            MemDataC(MemAddr) := -1;                            MemDataD(MemAddr) := -1;                            IF Violation /= 'X' THEN                                MemDataA(MemAddr) := to_nat(DatAIn);                                MemDataB(MemAddr) := to_nat(DatBIn);                                MemDataC(MemAddr) := to_nat(DatCIn);                                MemDataD(MemAddr) := to_nat(DatDIn);                            END IF;                        ELSE                            IF (WEANIn = '0') THEN                                MemDataA(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataA(MemAddr) := to_nat(DatAIn);                                END IF;                            END IF;                            IF (WEBNIn = '0') THEN                                MemDataB(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataB(MemAddr) := to_nat(DatBIn);                                END IF;                            END IF;                            IF (WECNIn = '0') THEN                                MemDataC(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataC(MemAddr) := to_nat(DatCIn);                                END IF;                            END IF;                            IF (WEDNIn = '0') THEN                                MemDataD(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataD(MemAddr) := to_nat(DatDIn);                                END IF;                            END IF;                        END IF;                    WHEN SPwr_burst =>                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                    WHEN SPwr_susp =>                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                    WHEN read_burst =>                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                    WHEN read_susp =>                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                END CASE;            WHEN begin_rdwr =>                Burst_Cnt := 0;                CASE command IS                    WHEN ds =>                        state <= desel;                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                    WHEN begin_rw =>                        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 SCwr =>                        state <= SCwrite;                        MemAddr := to_nat(AddressIn);                        startaddr := MemAddr;                        memstart := to_nat(AddressIn(1 downto 0));                        OBuf1 := (others => 'Z');                         IF GWNIn = '0' THEN                            MemDataA(MemAddr) := -1;                            MemDataB(MemAddr) := -1;                            MemDataC(MemAddr) := -1;                            MemDataD(MemAddr) := -1;                            IF Violation /= 'X' THEN                                MemDataA(MemAddr) := to_nat(DatAIn);                                MemDataB(MemAddr) := to_nat(DatBIn);                                MemDataC(MemAddr) := to_nat(DatCIn);                                MemDataD(MemAddr) := to_nat(DatDIn);                            END IF;                        ELSE                            IF (WEANIn = '0') THEN                                MemDataA(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataA(MemAddr) := to_nat(DatAIn);                                END IF;                            END IF;                            IF (WEBNIn = '0') THEN                                MemDataB(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataB(MemAddr) := to_nat(DatBIn);                                END IF;                            END IF;                            IF (WECNIn = '0') THEN                                MemDataC(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataC(MemAddr) := to_nat(DatCIn);                                END IF;                            END IF;                            IF (WEDNIn = '0') THEN                                MemDataD(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataD(MemAddr) := to_nat(DatDIn);                                END IF;                            END IF;                        END IF;                    WHEN SPwr_burst =>                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                    WHEN SPwr_susp =>                        state <= SPwrite;                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                        IF GWNIn = '0' THEN                            MemDataA(MemAddr) := -1;                            MemDataB(MemAddr) := -1;                            MemDataC(MemAddr) := -1;                            MemDataD(MemAddr) := -1;                            IF Violation /= 'X' THEN                                MemDataA(MemAddr) := to_nat(DatAIn);                                MemDataB(MemAddr) := to_nat(DatBIn);                                MemDataC(MemAddr) := to_nat(DatCIn);                                MemDataD(MemAddr) := to_nat(DatDIn);                            END IF;                        ELSE                            IF (WEANIn = '0') THEN                                MemDataA(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataA(MemAddr) := to_nat(DatAIn);                                END IF;                            END IF;                            IF (WEBNIn = '0') THEN                                MemDataB(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataB(MemAddr) := to_nat(DatBIn);                                END IF;                            END IF;                            IF (WECNIn = '0') THEN                                MemDataC(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataC(MemAddr) := to_nat(DatCIn);                                END IF;                            END IF;                            IF (WEDNIn = '0') THEN                                MemDataD(MemAddr) := -1;                                IF Violation /= 'X' THEN                                    MemDataD(MemAddr) := to_nat(DatDIn);                                END IF;                            END IF;                        END IF;                    WHEN read_burst =>                        state <= read;                        Burst_Cnt := Burst_Cnt + 1;                        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;                    WHEN read_susp =>                        OBuf1 := (others => 'Z');                END CASE;            WHEN SPwrite =>                CASE command IS                    WHEN ds =>                        state <= desel;                        OBuf1 := (others => 'Z');                        OBuf2 := (others => 'Z');                    WHEN begin_rw =>                        state <= begin_rdwr;                        MemAddr := to_nat(AddressIn);                        startaddr := Mem

⌨️ 快捷键说明

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