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

📄 mt46v16m16.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 4 页
字号:
            IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN                IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1)  OR                    (Burst_length_4 = '1' AND Count_precharge(3) >= 2)  OR                    (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN                    Pc_b3 := '1';                    Act_b3 := '0';                    RP_chk3 := NOW;                    Read_precharge(3) := '0';                END IF;            END IF;            -- Write with AutoPrecharge Calculation            --      The device start internal precharge when:            --          1.  Meet tRAS requirement            --          2.  Two clock after last burst            -- Since tWR is time base, the model will compensate tRP            IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN                IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR                    (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR                    (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN                    Pc_b0 := '1';                    Act_b0 := '0';                    RP_chk0 := NOW - ((2 * tCK) - tWR);                    Write_precharge(0) := '0';                END IF;            END IF;            IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN                IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR                    (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR                    (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN                    Pc_b1 := '1';                    Act_b1 := '0';                    RP_chk1 := NOW - ((2 * tCK) - tWR);                    Write_precharge(1) := '0';                END IF;            END IF;            IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN                IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR                    (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR                    (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN                    Pc_b2 := '1';                    Act_b2 := '0';                    RP_chk2 := NOW - ((2 * tCK) - tWR);                    Write_precharge(2) := '0';                END IF;            END IF;            IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN                IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR                    (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR                    (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN                    Pc_b3 := '1';                    Act_b3 := '0';                    RP_chk3 := NOW - ((2 * tCK) - tWR);                    Write_precharge(3) := '0';                END IF;            END IF;        END IF;                --        -- DLL Counter        --        IF Sys_clk'EVENT AND Sys_clk = '1' THEN            IF (DLL_Reset = '1' AND DLL_done = '0') THEN                DLL_count := DLL_count + 1;                IF (DLL_count >= 200) THEN                    DLL_done := '1';                END IF;            END IF;        END IF;        --        -- Control Logic        --        IF Sys_clk'EVENT AND Sys_clk = '1' THEN            -- Auto Refresh            IF Aref_enable = '1' THEN                -- Auto Refresh to Auto Refresh                ASSERT (NOW - RFC_chk >= tRFC)                    REPORT "tRFC violation during Auto Refresh"                    SEVERITY WARNING;                -- Precharge to Auto Refresh                ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND                        (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))                    REPORT "tRP violation during Auto Refresh"                    SEVERITY WARNING;                -- Precharge to Auto Refresh                ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')                    REPORT "All banks must be Precharge before Auto Refresh"                    SEVERITY WARNING;                -- Record current tRFC time                RFC_chk := NOW;            END IF;            -- Extended Load Mode Register            IF Ext_mode_enable = '1' THEN                IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN                    IF (Addr (0) = '0') THEN                        DLL_enable := '1';                    ELSE                        DLL_enable := '0';                    END IF;                END IF;                                -- Precharge to EMR                ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')                    REPORT "All bank must be Precharged before Extended Mode Register"                    SEVERITY WARNING;                                -- Precharge to EMR                ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND                        (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))                    REPORT "tRP violation during Extended Load Register"                    SEVERITY WARNING;                -- LMR/EMR to EMR                ASSERT (NOW - MRD_chk >= tMRD)                    REPORT "tMRD violation during Extended Mode Register"                    SEVERITY WARNING;                -- Record current tMRD time                MRD_chk := NOW;            END IF;            -- Load Mode Register            IF Mode_reg_enable = '1' THEN                -- Register mode                Mode_reg <= Addr;                                -- DLL Reset                IF (DLL_enable = '1' AND Addr (8) = '1') THEN                    DLL_reset := '1';                    DLL_done  := '0';                    DLL_count := 0;                ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN                    ASSERT (FALSE)                        REPORT "DLL is ENABLE: DLL RESET is require"                        SEVERITY WARNING;                ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN                    ASSERT (FALSE)                        REPORT "DLL is DISABLE: DLL RESET will be ignored"                        SEVERITY WARNING;                END IF;                -- Precharge to LMR                ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')                    REPORT "All bank must be Precharged before Load Mode Register"                    SEVERITY WARNING;                -- Precharge to EMR                ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND                        (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))                    REPORT "tRP violation during Load Mode Register"                    SEVERITY WARNING;                -- LMR/ELMR to LMR                ASSERT (NOW - MRD_chk >= tMRD)                    REPORT "tMRD violation during Load Mode Register"                    SEVERITY WARNING;                -- Check for invalid Burst Length                ASSERT ((Addr (2 DOWNTO 0) = "001") OR      -- BL = 2                        (Addr (2 DOWNTO 0) = "010") OR      -- BL = 4                        (Addr (2 DOWNTO 0) = "011"))        -- BL = 8                    REPORT "Invalid Burst Length during Load Mode Register"                    SEVERITY WARNING;                -- Check for invalid CAS Latency                ASSERT ((Addr (6 DOWNTO 4) = "010") OR      -- CL = 2.0                        (Addr (6 DOWNTO 4) = "110"))        -- CL = 2.5                    REPORT "Invalid CAS Latency during Load Mode Register"                    SEVERITY WARNING;                -- Record current tMRD time                MRD_chk := NOW;            END IF;            -- Active Block (latch Bank and Row Address)            IF Active_enable = '1' THEN                -- Activate an OPEN bank can corrupt data                ASSERT ((Ba = "00" AND Act_b0 = '0') OR                        (Ba = "01" AND Act_b1 = '0') OR                        (Ba = "10" AND Act_b2 = '0') OR                        (Ba = "11" AND Act_b3 = '0'))                    REPORT "Bank is already activated - data can be corrupted"                    SEVERITY WARNING;                -- Activate Bank 0                IF Ba = "00" AND Pc_b0 = '1' THEN                    -- Activate to Activate (same bank)                    ASSERT (NOW - RC_chk0 >= tRC)                        REPORT "tRC violation during Activate Bank 0"                        SEVERITY WARNING;                    -- Precharge to Active                    ASSERT (NOW - RP_chk0 >= tRP)                        REPORT "tRP violation during Activate Bank 0"                        SEVERITY WARNING;                    -- Record Variables for checking violation                    Act_b0 := '1';                    Pc_b0 := '0';                    B0_row_addr := Addr;                    RC_chk0 := NOW;                    RCD_chk0 := NOW;                    RAS_chk0 := NOW;                    RAP_chk0 := NOW;                END IF;                -- Activate Bank 1                IF Ba = "01" AND Pc_b1 = '1' THEN                    -- Activate to Activate (same bank)                    ASSERT (NOW - RC_chk1 >= tRC)                        REPORT "tRC violation during Activate Bank 1"                        SEVERITY WARNING;                    -- Precharge to Active                    ASSERT (NOW - RP_chk1 >= tRP)                        REPORT "tRP violation during Activate Bank 1"                        SEVERITY WARNING;                    -- Record Variables for checking violation                    Act_b1 := '1';                    Pc_b1 := '0';                    B1_row_addr := Addr;                    RC_chk1 := NOW;                    RCD_chk1 := NOW;                    RAS_chk1 := NOW;                    RAP_chk1 := NOW;                END IF;                -- Activate Bank 2                IF Ba = "10" AND Pc_b2 = '1' THEN                    -- Activate to Activate (same bank)                    ASSERT (NOW - RC_chk2 >= tRC)                        REPORT "tRC violation during Activate Bank 2"                        SEVERITY WARNING;                    -- Precharge to Active                    ASSERT (NOW - RP_chk2 >= tRP)                        REPORT "tRP violation during Activate Bank 2"                        SEVERITY WARNING;                    -- Record Variables for checking violation                    Act_b2 := '1';                    Pc_b2 := '0';                    B2_row_addr := Addr;                    RC_chk2 := NOW;                    RCD_chk2 := NOW;                    RAS_chk2 := NOW;                    RAP_chk2 := NOW;                END IF;                -- Activate Bank 3                IF Ba = "11" AND Pc_b3 = '1' THEN                    -- Activate to Activate (same bank)                    ASSERT (NOW - RC_chk3 >= tRC)                        REPORT "tRC violation during Activate Bank 3"                        SEVERITY WARNING;                    -- Precharge to Active                    ASSERT (NOW - RP_chk3 >= tRP)                        REPORT "tRP violation during Activate Bank 3"                        SEVERITY WARNING;                    -- Record Variables for checking violation                    Act_b3 := '1';                    Pc_b3 := '0';                    B3_row_addr := Addr;                    RC_chk3 := NOW;                    RCD_chk3 := NOW;                    RAS_chk3 := NOW;                    RAP_chk3 := NOW;                END IF;                -- Activate Bank A to Activate Bank B                IF (Prev_bank /= Ba) THEN                    ASSERT (NOW - RRD_chk >= tRRD)                        REPORT "tRRD violation during Activate"                        SEVERITY WARNING;                END IF;                                -- AutoRefresh to Activate                ASSERT (NOW - RFC_chk >= tRFC)                    REPORT "tRFC violation during Activate"                    SEVERITY WARNING;                                -- Record Variables for Checking Violation                RRD_chk := NOW;                Prev_bank := Ba;            END IF;            -- Precharge Block - Consider NOP if bank already precharged or in process of precharging            IF Prech_enable = '1' THEN                -- EMR or LMR to Precharge                ASSERT (NOW - MRD_chk >= tMRD)                    REPORT "tMRD violation during Precharge"                    SEVERITY WARNING;                -- Precharge Bank 0                IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN                    Act_b0 := '0';                    Pc_b0 := '1';                    RP_chk0 := NOW;                    -- Activate to Precharge bank 0                    ASSERT (NOW - RAS_chk0 >= tRAS)                        REPORT "tRAS violation during Precharge"                        SEVERITY WARNING;                    -- tWR violation check for Write                    ASSERT (NOW - WR_chk0 >= tWR)                        REPORT "tWR violation during Precharge"                        SEVERITY WARNING;                END IF;                -- Precharge Bank 1                IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN                    Act_b1 := '0';                    Pc_b1 := '1';                    RP_chk1 := NOW;                    -- Activate to Precharge                    ASSERT (NOW - RAS_chk1 >= tRAS)                        REPORT "tRAS violation during Precharge"                        SEVERITY WARNING;                    -- tWR violation check for Write                    ASSERT (NOW - WR_chk1 >= tWR)                        REPORT "tWR violation during Precharge"                        SEVERITY WARNING;                END IF;                -- Precharge Bank 2                IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN                    Act_b2 := '0';                    Pc_b2 := '1';                    RP_chk2 := NOW;                    -- Activate to Precharge                    ASSERT (NOW - RAS_chk2 >= tRAS)                        REPORT "tRAS violation during Precharge"                        SEVERITY WARNING;                    -- tWR violation check for Write                    ASSERT (NOW - WR_chk2 >= tWR)                        REPORT "tWR violation during Precharge"                        SEVERITY WARNING;                END IF;                -- Precharge Bank 3                IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN                    Act_b3 := '0';                    Pc_b3 := '1';                    RP_chk3 := NOW;                    -- Activate to Precharge                    ASSERT (NOW - RAS_chk3 >= tRAS)                        REPORT "tRAS violation during Precharge"                        SEVERITY WARNING;                    -- tWR violation check for Write                    ASSERT (NOW - WR_chk3 >= tWR)

⌨️ 快捷键说明

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