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

📄 mt48lc16m16a2.vhd

📁 The GRLIB IP Library is an integrated set of reusable IP cores, designed for system-on-chip (SOC) de
💻 VHD
📖 第 1 页 / 共 5 页
字号:
            -- Read or Write with Auto Precharge Counter            IF Auto_precharge (0) = '1' THEN                Count_precharge (0) := Count_precharge (0) + 1;            END IF;            IF Auto_precharge (1) = '1' THEN                Count_precharge (1) := Count_precharge (1) + 1;            END IF;            IF Auto_precharge (2) = '1' THEN                Count_precharge (2) := Count_precharge (2) + 1;            END IF;            IF Auto_precharge (3) = '1' THEN                Count_precharge (3) := Count_precharge (3) + 1;            END IF;                        -- Auto Precharge Timer for tWR            if (Burst_length_1 = '1' OR Write_burst_mode = '1') then                if (Count_precharge(0) = 1) then                    Count_time(0) := NOW;                end if;                if (Count_precharge(1) = 1) then                    Count_time(1) := NOW;                end if;                if (Count_precharge(2) = 1) then                    Count_time(2) := NOW;                end if;                if (Count_precharge(3) = 1) then                    Count_time(3) := NOW;                end if;            elsif (Burst_length_2 = '1') then                if (Count_precharge(0) = 2) then                    Count_time(0) := NOW;                end if;                if (Count_precharge(1) = 2) then                    Count_time(1) := NOW;                end if;                if (Count_precharge(2) = 2) then                    Count_time(2) := NOW;                end if;                if (Count_precharge(3) = 2) then                    Count_time(3) := NOW;                end if;            elsif (Burst_length_4 = '1') then                if (Count_precharge(0) = 4) then                    Count_time(0) := NOW;                end if;                if (Count_precharge(1) = 4) then                    Count_time(1) := NOW;                end if;                if (Count_precharge(2) = 4) then                    Count_time(2) := NOW;                end if;                if (Count_precharge(3) = 4) then                    Count_time(3) := NOW;                end if;            elsif (Burst_length_8 = '1') then                if (Count_precharge(0) = 8) then                    Count_time(0) := NOW;                end if;                if (Count_precharge(1) = 8) then                    Count_time(1) := NOW;                end if;                if (Count_precharge(2) = 8) then                    Count_time(2) := NOW;                end if;                if (Count_precharge(3) = 8) then                    Count_time(3) := NOW;                end if;            end if;            -- tMRD Counter            MRD_chk := MRD_chk + 1;            -- tWR Counter            WR_counter(0) := WR_counter(0) + 1;            WR_counter(1) := WR_counter(1) + 1;            WR_counter(2) := WR_counter(2) + 1;            WR_counter(3) := WR_counter(3) + 1;            -- Auto Refresh            IF Aref_enable = '1' THEN                -- Auto Refresh to Auto Refresh                ASSERT (NOW - RC_chk >= tRC)                    REPORT "tRC violation during Auto Refresh"                    SEVERITY WARNING;                -- Precharge to Auto Refresh                ASSERT (NOW - RP_chk0 >= tRP OR NOW - RP_chk1 >= tRP OR NOW - RP_chk2 >= tRP OR NOW - RP_chk3 >= tRP)                    REPORT "tRP violation during Auto Refresh"                    SEVERITY WARNING;                -- All banks must be idle before refresh                IF (Pc_b3 ='0' OR Pc_b2 = '0' OR Pc_b1 ='0' OR Pc_b0 = '0') THEN                    ASSERT (FALSE)                        REPORT "All banks must be Precharge before Auto Refresh"                        SEVERITY WARNING;                END IF;                -- Record current tRC time                RC_chk := NOW;            END IF;                        -- Load Mode Register            IF Mode_reg_enable = '1' THEN                Mode_reg <= TO_BITVECTOR (Addr);                IF (Pc_b3 ='0' OR Pc_b2 = '0' OR Pc_b1 ='0' OR Pc_b0 = '0') THEN                    ASSERT (FALSE)                        REPORT "All bank must be Precharge before Load Mode Register"                        SEVERITY WARNING;                END IF;                -- REF to LMR                ASSERT (NOW - RC_chk >= tRC)                    REPORT "tRC violation during Load Mode Register"                    SEVERITY WARNING;                -- LMR to LMR                ASSERT (MRD_chk >= tMRD)                    REPORT "tMRD violation during Load Mode Register"                    SEVERITY WARNING;                -- Record current tMRD time                MRD_chk := 0;            END IF;                        -- Active Block (latch Bank and Row Address)            IF Active_enable = '1' THEN                IF Ba = "00" AND Pc_b0 = '1' THEN                    Act_b0 := '1';                    Pc_b0 := '0';                    B0_row_addr := TO_BITVECTOR (Addr);                    RCD_chk0 := NOW;                    RAS_chk0 := NOW;                    -- Precharge to Active Bank 0                    ASSERT (NOW - RP_chk0 >= tRP)                        REPORT "tRP violation during Activate Bank 0"                        SEVERITY WARNING;                ELSIF Ba = "01" AND Pc_b1 = '1' THEN                    Act_b1 := '1';                    Pc_b1 := '0';                    B1_row_addr := TO_BITVECTOR (Addr);                    RCD_chk1 := NOW;                    RAS_chk1 := NOW;                    -- Precharge to Active Bank 1                    ASSERT (NOW - RP_chk1 >= tRP)                        REPORT "tRP violation during Activate Bank 1"                        SEVERITY WARNING;                ELSIF Ba = "10" AND Pc_b2 = '1' THEN                    Act_b2 := '1';                    Pc_b2 := '0';                    B2_row_addr := TO_BITVECTOR (Addr);                    RCD_chk2 := NOW;                    RAS_chk2 := NOW;                    -- Precharge to Active Bank 2                    ASSERT (NOW - RP_chk2 >= tRP)                        REPORT "tRP violation during Activate Bank 2"                        SEVERITY WARNING;                ELSIF Ba = "11" AND Pc_b3 = '1' THEN                    Act_b3 := '1';                    Pc_b3 := '0';                    B3_row_addr := TO_BITVECTOR (Addr);                    RCD_chk3 := NOW;                    RAS_chk3 := NOW;                    -- Precharge to Active Bank 3                    ASSERT (NOW - RP_chk3 >= tRP)                        REPORT "tRP violation during Activate Bank 3"                        SEVERITY WARNING;                ELSIF Ba = "00" AND Pc_b0 = '0' THEN                    ASSERT (FALSE)                        REPORT "Bank 0 is not Precharged"                        SEVERITY WARNING;                ELSIF Ba = "01" AND Pc_b1 = '0' THEN                    ASSERT (FALSE)                        REPORT "Bank 1 is not Precharged"                        SEVERITY WARNING;                ELSIF Ba = "10" AND Pc_b2 = '0' THEN                    ASSERT (FALSE)                        REPORT "Bank 2 is not Precharged"                        SEVERITY WARNING;                ELSIF Ba = "11" AND Pc_b3 = '0' THEN                    ASSERT (FALSE)                        REPORT "Bank 3 is not Precharged"                        SEVERITY WARNING;                END IF;                -- Active Bank A to Active Bank B                IF ((Previous_bank /= TO_BITVECTOR (Ba)) AND (NOW - RRD_chk < tRRD)) THEN                    ASSERT (FALSE)                        REPORT "tRRD violation during Activate"                        SEVERITY WARNING;                END IF;                -- LMR to ACT                ASSERT (MRD_chk >= tMRD)                    REPORT "tMRD violation during Activate"                    SEVERITY WARNING;                -- AutoRefresh to Activate                ASSERT (NOW - RC_chk >= tRC)                    REPORT "tRC violation during Activate"                    SEVERITY WARNING;                -- Record variable for checking violation                RRD_chk := NOW;                Previous_bank := TO_BITVECTOR (Ba);            END IF;                        -- Precharge Block            IF Prech_enable = '1' THEN                IF Addr(10) = '1' THEN                    Pc_b0 := '1';                     Pc_b1 := '1';                     Pc_b2 := '1';                     Pc_b3 := '1';                    Act_b0 := '0';                    Act_b1 := '0';                    Act_b2 := '0';                    Act_b3 := '0';                    RP_chk0 := NOW;                    RP_chk1 := NOW;                    RP_chk2 := NOW;                    RP_chk3 := NOW;                    -- Activate to Precharge all banks                    ASSERT ((NOW - RAS_chk0 >= tRAS) OR (NOW - RAS_chk1 >= tRAS))                        REPORT "tRAS violation during Precharge all banks"                        SEVERITY WARNING;                    -- tWR violation check for Write                    IF ((NOW - WR_chkp(0) < tWRp) OR (NOW - WR_chkp(1) < tWRp) OR                        (NOW - WR_chkp(2) < tWRp) OR (NOW - WR_chkp(3) < tWRp)) THEN                        ASSERT (FALSE)                            REPORT "tWR violation during Precharge ALL banks"                            SEVERITY WARNING;                    END IF;                ELSIF Addr(10) = '0' THEN                    IF Ba = "00" THEN                        Pc_b0 := '1';                        Act_b0 := '0';                        RP_chk0 := NOW;                        -- Activate to Precharge bank 0                        ASSERT (NOW - RAS_chk0 >= tRAS)                            REPORT "tRAS violation during Precharge bank 0"                            SEVERITY WARNING;                    ELSIF Ba = "01" THEN                        Pc_b1 := '1';                        Act_b1 := '0';                        RP_chk1 := NOW;                        -- Activate to Precharge bank 1                        ASSERT (NOW - RAS_chk1 >= tRAS)                            REPORT "tRAS violation during Precharge bank 1"                            SEVERITY WARNING;                    ELSIF Ba = "10" THEN                        Pc_b2 := '1';                        Act_b2 := '0';                        RP_chk2 := NOW;                        -- Activate to Precharge bank 2                        ASSERT (NOW - RAS_chk2 >= tRAS)                            REPORT "tRAS violation during Precharge bank 2"                            SEVERITY WARNING;                    ELSIF Ba = "11" THEN                        Pc_b3 := '1';                        Act_b3 := '0';                        RP_chk3 := NOW;                        -- Activate to Precharge bank 3                        ASSERT (NOW - RAS_chk3 >= tRAS)                            REPORT "tRAS violation during Precharge bank 3"                            SEVERITY WARNING;                    END IF;                    -- tWR violation check for Write                    ASSERT (NOW - WR_chkp(TO_INTEGER(Ba)) >= tWRp)                        REPORT "tWR violation during Precharge"                        SEVERITY WARNING;                END IF;                -- Terminate a Write Immediately (if same bank or all banks)                IF (Data_in_enable = '1' AND (Bank = TO_BITVECTOR(Ba) OR Addr(10) = '1')) THEN                    Data_in_enable := '0';                END IF;                -- Precharge Command Pipeline for READ                IF CAS_latency_3 = '1' THEN                    Command(2) := PRECH;                    Bank_precharge(2) := TO_BITVECTOR (Ba);                    A10_precharge(2) := TO_BIT(Addr(10));                ELSIF CAS_latency_2 = '1' THEN                    Command(1) := PRECH;                    Bank_precharge(1) := TO_BITVECTOR (Ba);                    A10_precharge(1) := TO_BIT(Addr(10));                END IF;            END IF;                        -- Burst Terminate            IF Burst_term = '1' THEN                -- Terminate a Write immediately                IF Data_in_enable = '1' THEN                    Data_in_enable := '0';                END IF;                -- Terminate a Read depend on CAS Latency                IF CAS_latency_3 = '1' THEN                    Command(2) := BST;                ELSIF CAS_latency_2 = '1' THEN                    Command(1) := BST;                END IF;            END IF;                        -- Read, Write, Column Latch            IF Read_enable = '1' OR Write_enable = '1' THEN

⌨️ 快捷键说明

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