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

📄 mt48lc16m16a2.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 5 页
字号:
                            Dq (15 DOWNTO 8)  <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 8)) AFTER tAC;                            Dq (7 DOWNTO 0)  <= TRANSPORT (OTHERS => 'Z') AFTER tAC;                        ELSIF Dqm_reg0 = "10" THEN                            Dq (15 DOWNTO 8)  <= TRANSPORT (OTHERS => 'Z') AFTER tAC;                            Dq (7 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (7 DOWNTO 0)) AFTER tAC;                        END IF;                    ELSIF Bank = "11" THEN                        Dq_temp := Bank3 (Row_index) (Col_index);                        IF Dqm_reg0 = "00" THEN                            Dq (15 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 0)) AFTER tAC;                        ELSIF Dqm_reg0 = "01" THEN                            Dq (15 DOWNTO 8)  <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 8)) AFTER tAC;                            Dq (7 DOWNTO 0)  <= TRANSPORT (OTHERS => 'Z') AFTER tAC;                        ELSIF Dqm_reg0 = "10" THEN                            Dq (15 DOWNTO 8)  <= TRANSPORT (OTHERS => 'Z') AFTER tAC;                            Dq (7 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (7 DOWNTO 0)) AFTER tAC;                        END IF;                    END IF;                ELSE                      Dq <= TRANSPORT (OTHERS => 'Z') AFTER tHZ;                END IF;                Burst_decode;            END IF;        ELSIF Sys_clk'event AND Sys_clk = '1' AND Load = '1' AND Dump = '0' THEN 		--'            Operation <= LOAD_FILE;	    load := '0';--            ASSERT (FALSE) REPORT "Reading memory array from file.  This operation may take several minutes.  Please wait..."--                SEVERITY NOTE;            WHILE NOT endfile(file_load) LOOP                readline(file_load, l);                read(l, ch);                if (ch /= 'S') or (ch /= 's') then                  hexread(l, rectype);                  hexread(l, reclen);		  recaddr := (others => '0');		  case rectype is 		  when "0001" =>                    hexread(l, recaddr(15 downto 0));		  when "0010" =>                    hexread(l, recaddr(23 downto 0));		  when "0011" =>                    hexread(l, recaddr);		    recaddr(31 downto 24) := (others => '0');		  when others => next;		  end case;	 	  if true then                    hexread(l, recdata);		    Bank_Load := recaddr(25 downto 24);		    Rows_Load := recaddr(23 downto 11);		    Cols_Load := recaddr(10 downto 2);                    Init_Mem (Bank_Load, To_Integer(Rows_Load));                    IF Bank_Load = "00" THEN		      for i in 0 to 3 loop                        Bank0 (To_Integer(Rows_Load)) (To_Integer(Cols_Load)+i) := ('1' & recdata(i*32+index to i*32+index+15));		      end loop;                    ELSIF Bank_Load = "01" THEN		      for i in 0 to 3 loop                        Bank1 (To_Integer(Rows_Load)) (To_Integer(Cols_Load)+i) := ('1' & recdata(i*32+index to i*32+index+15));		      end loop;                    ELSIF Bank_Load = "10" THEN		      for i in 0 to 3 loop                        Bank2 (To_Integer(Rows_Load)) (To_Integer(Cols_Load)+i) := ('1' & recdata(i*32+index to i*32+index+15));		      end loop;                    ELSIF Bank_Load = "11" THEN		      for i in 0 to 3 loop                        Bank3 (To_Integer(Rows_Load)) (To_Integer(Cols_Load)+i) := ('1' & recdata(i*32+index to i*32+index+15));		      end loop;                    END IF;                  END IF;                END IF;            END LOOP;        ELSIF Sys_clk'event AND Sys_clk = '1' AND Load = '0' AND Dump = '1' THEN 		--'            Operation <= DUMP_FILE;            ASSERT (FALSE) REPORT "Writing memory array to file.  This operation may take several minutes.  Please wait..."                SEVERITY NOTE;            WRITE (l, string'("# Micron Technology, Inc. (FILE DUMP / MEMORY DUMP)")); 		--'            WRITELINE (file_dump, l);            WRITE (l, string'("# BA ROWS          COLS      DQ")); 		--'            WRITELINE (file_dump, l);            WRITE (l, string'("# -- ------------- --------- ----------------")); 		--'            WRITELINE (file_dump, l);            -- Dumping Bank 0            FOR i IN 0 TO 2**addr_bits -1 LOOP                -- Check if ROW is NULL                IF Bank0 (i) /= NULL THEN                    For j IN 0 TO 2**col_bits - 1 LOOP                        -- Check if COL is NULL                        NEXT WHEN Bank0 (i) (j) (data_bits) = '0';                        WRITE (l, string'("00"), right, 4); 		--'                        WRITE (l, To_BitVector(Conv_Std_Logic_Vector(i, addr_bits)), right, addr_bits+1);                        WRITE (l, To_BitVector(Conv_std_Logic_Vector(j, col_bits)), right, col_bits+1);                        WRITE (l, Bank0 (i) (j) (data_bits -1 DOWNTO 0), right, data_bits+1);                        WRITELINE (file_dump, l);                    END LOOP;                END IF;            END LOOP;            -- Dumping Bank 1            FOR i IN 0 TO 2**addr_bits -1 LOOP                -- Check if ROW is NULL                IF Bank1 (i) /= NULL THEN                    For j IN 0 TO 2**col_bits - 1 LOOP                        -- Check if COL is NULL                        NEXT WHEN Bank1 (i) (j) (data_bits) = '0';                        WRITE (l, string'("01"), right, 4); 		--'                        WRITE (l, To_BitVector(Conv_Std_Logic_Vector(i, addr_bits)), right, addr_bits+1);                        WRITE (l, To_BitVector(Conv_std_Logic_Vector(j, col_bits)), right, col_bits+1);                        WRITE (l, Bank1 (i) (j) (data_bits -1 DOWNTO 0), right, data_bits+1);                        WRITELINE (file_dump, l);                    END LOOP;                END IF;            END LOOP;            -- Dumping Bank 2            FOR i IN 0 TO 2**addr_bits -1 LOOP                -- Check if ROW is NULL                IF Bank2 (i) /= NULL THEN                    For j IN 0 TO 2**col_bits - 1 LOOP                        -- Check if COL is NULL                        NEXT WHEN Bank2 (i) (j) (data_bits) = '0';                        WRITE (l, string'("10"), right, 4); 		--'                        WRITE (l, To_BitVector(Conv_Std_Logic_Vector(i, addr_bits)), right, addr_bits+1);                        WRITE (l, To_BitVector(Conv_std_Logic_Vector(j, col_bits)), right, col_bits+1);                        WRITE (l, Bank2 (i) (j) (data_bits -1 DOWNTO 0), right, data_bits+1);                        WRITELINE (file_dump, l);                    END LOOP;                END IF;            END LOOP;            -- Dumping Bank 3            FOR i IN 0 TO 2**addr_bits -1 LOOP                -- Check if ROW is NULL                IF Bank3 (i) /= NULL THEN                    For j IN 0 TO 2**col_bits - 1 LOOP                        -- Check if COL is NULL                        NEXT WHEN Bank3 (i) (j) (data_bits) = '0';                        WRITE (l, string'("11"), right, 4); 		--'                        WRITE (l, To_BitVector(Conv_Std_Logic_Vector(i, addr_bits)), right, addr_bits+1);                        WRITE (l, To_BitVector(Conv_std_Logic_Vector(j, col_bits)), right, col_bits+1);                        WRITE (l, Bank3 (i) (j) (data_bits -1 DOWNTO 0), right, data_bits+1);                        WRITELINE (file_dump, l);                    END LOOP;                END IF;            END LOOP;        END IF;        -- Write with AutoPrecharge Calculation        --      The device start internal precharge when:        --          1.  tWR cycles after command        --      and 2.  Meet tRAS requirement        --       or 3.  Interrupt by a Read or Write (with or without Auto Precharge)        IF ((Auto_precharge(0) = '1') AND (Write_precharge(0) = '1')) THEN            IF (((NOW - RAS_chk0 >= tRAS) AND               (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(0) >= 1 AND NOW - Count_time(0) >= tWRa)  OR                 (Burst_length_2 = '1'                             AND Count_precharge(0) >= 2 AND NOW - Count_time(0) >= tWRa)  OR                 (Burst_length_4 = '1'                             AND Count_precharge(0) >= 4 AND NOW - Count_time(0) >= tWRa)  OR                 (Burst_length_8 = '1'                             AND Count_precharge(0) >= 8 AND NOW - Count_time(0) >= tWRa))) OR                 (RW_interrupt_write(0) = '1' AND WR_counter(0) >= 1 AND NOW - WR_time(0) >= tWRa)) THEN                Auto_precharge(0) := '0';                Write_precharge(0) := '0';                RW_interrupt_write(0) := '0';                Pc_b0 := '1';                Act_b0 := '0';                RP_chk0 := NOW;                ASSERT FALSE REPORT "Start Internal Precharge Bank 0" SEVERITY NOTE;            END IF;        END IF;        IF ((Auto_precharge(1) = '1') AND (Write_precharge(1) = '1')) THEN            IF (((NOW - RAS_chk1 >= tRAS) AND               (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(1) >= 1 AND NOW - Count_time(1) >= tWRa)  OR                 (Burst_length_2 = '1'                             AND Count_precharge(1) >= 2 AND NOW - Count_time(1) >= tWRa)  OR                 (Burst_length_4 = '1'                             AND Count_precharge(1) >= 4 AND NOW - Count_time(1) >= tWRa)  OR                 (Burst_length_8 = '1'                             AND Count_precharge(1) >= 8 AND NOW - Count_time(1) >= tWRa))) OR                 (RW_interrupt_write(1) = '1' AND WR_counter(1) >= 1 AND NOW - WR_time(1) >= tWRa)) THEN                Auto_precharge(1) := '0';                Write_precharge(1) := '0';                RW_interrupt_write(1) := '0';                Pc_b1 := '1';                Act_b1 := '0';                RP_chk1 := NOW;            END IF;        END IF;        IF ((Auto_precharge(2) = '1') AND (Write_precharge(2) = '1')) THEN            IF (((NOW - RAS_chk2 >= tRAS) AND               (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(2) >= 1 AND NOW - Count_time(2) >= tWRa)  OR                 (Burst_length_2 = '1'                             AND Count_precharge(2) >= 2 AND NOW - Count_time(2) >= tWRa)  OR                 (Burst_length_4 = '1'                             AND Count_precharge(2) >= 4 AND NOW - Count_time(2) >= tWRa)  OR                 (Burst_length_8 = '1'                             AND Count_precharge(2) >= 8 AND NOW - Count_time(2) >= tWRa))) OR                 (RW_interrupt_write(2) = '1' AND WR_counter(2) >= 1 AND NOW - WR_time(2) >= tWRa)) THEN                Auto_precharge(2) := '0';                Write_precharge(2) := '0';                RW_interrupt_write(2) := '0';                Pc_b2 := '1';                Act_b2 := '0';                RP_chk2 := NOW;            END IF;        END IF;        IF ((Auto_precharge(3) = '1') AND (Write_precharge(3) = '1')) THEN            IF (((NOW - RAS_chk3 >= tRAS) AND               (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(3) >= 1 AND NOW - Count_time(3) >= tWRa)  OR                 (Burst_length_2 = '1'                             AND Count_precharge(3) >= 2 AND NOW - Count_time(3) >= tWRa)  OR                 (Burst_length_4 = '1'                             AND Count_precharge(3) >= 4 AND NOW - Count_time(3) >= tWRa)  OR                 (Burst_length_8 = '1'                             AND Count_precharge(3) >= 8 AND NOW - Count_time(3) >= tWRa))) OR                 (RW_interrupt_write(0) = '1' AND WR_counter(0) >= 1 AND NOW - WR_time(3) >= tWRa)) THEN                Auto_precharge(3) := '0';                Write_precharge(3) := '0';                RW_interrupt_write(3) := '0';                Pc_b3 := '1';                Act_b3 := '0';                RP_chk3 := NOW;            END IF;        END IF;        -- Checking internal wires (Optional for debug purpose)        Pre_chk (0) <= Pc_b0;        Pre_chk (1) <= Pc_b1;        Pre_chk (2) <= Pc_b2;        Pre_chk (3) <= Pc_b3;        Act_chk (0) <= Act_b0;        Act_chk (1) <= Act_b1;        Act_chk (2) <= Act_b2;        Act_chk (3) <= Act_b3;        Dq_in_chk   <= Data_in_enable;        Dq_out_chk  <= Data_out_enable;        Bank_chk    <= Bank;        Row_chk     <= Row;        Col_chk     <= Col;    END PROCESS;                                                -- Clock timing checks--    Clock_check : PROCESS--        VARIABLE Clk_low, Clk_high : TIME := 0 ns;--    BEGIN       --        WAIT ON Clk;--        IF (Clk = '1' AND NOW >= 10 ns) THEN--            ASSERT (NOW - Clk_low >= tCL)--                REPORT "tCL violation"--                SEVERITY WARNING;--            ASSERT (NOW - Clk_high >= tCK)--                REPORT "tCK violation"--                SEVERITY WARNING;--            Clk_high := NOW;--        ELSIF (Clk = '0' AND NOW /= 0 ns) THEN--            ASSERT (NOW - Clk_high >= tCH)--                REPORT "tCH violation"--                SEVERITY WARNING;--            Clk_low := NOW;--        END IF;--    END PROCESS;                            -- Setup timing checks    Setup_check : PROCESS    BEGIN       	wait;        WAIT ON Clk;        IF Clk = '1' THEN            ASSERT(Cke'LAST_EVENT >= tCKS) 		--'                REPORT "CKE Setup time violation -- tCKS"                SEVERITY WARNING;            ASSERT(Cs_n'LAST_EVENT >= tCMS) 		--'                REPORT "CS# Setup time violation -- tCMS"                SEVERITY WARNING;            ASSERT(Cas_n'LAST_EVENT >= tCMS) 		--'                REPORT "CAS# Setup time violation -- tCMS"                SEVERITY WARNING;            ASSERT(Ras_n'LAST_EVENT >= tCMS) 		--'                REPORT "RAS# Setup time violation -- tCMS"                SEVERITY WARNING;            ASSERT(We_n'LAST_EVENT >= tCMS) 		--'                REPORT "WE# Setup time violation -- tCMS"                SEVERITY WARNING;            ASSERT(Dqm'LAST_EVENT >= tCMS) 		--'                REPORT "Dqm Setup time violation -- tCMS"                SEVERITY WARNING;            ASSERT(Addr'LAST_EVENT >= tAS) 		--'                REPORT "ADDR Setup time violation -- tAS"                SEVERITY WARNING;            ASSERT(Ba'LAST_EVENT >= tAS) 		--'                REPORT "BA Setup time violation -- tAS"                SEVERITY WARNING;            ASSERT(Dq'LAST_EVENT >= tDS) 		--'                REPORT "Dq Setup time violation -- tDS"                SEVERITY WARNING;        END IF;       END PROCESS;    -- Hold timing checks    Hold_check : PROCESS    BEGIN	wait;        WAIT ON Clk'DELAYED (tCKH), Clk'DELAYED (tCMH), Clk'DELAYED (tAH), Clk'DELAYED 

⌨️ 快捷键说明

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