URL
https://opencores.org/ocsvn/lattice6502/lattice6502/trunk
Subversion Repositories lattice6502
[/] [lattice6502/] [ghdl/] [ghdl_ram.vhd] - Rev 2
Compare with Previous | Blame | View Log
------------------------------------------------------------------ -- 6502 ghdl RAM module. -- -- Copyright Ian Chapman October 28 2010 -- -- This file is part of the Lattice 6502 project -- It is used to compile with Linux ghdl not ispLeaver. -- The executable code is pasted into this module. -- -- To do -- Complete. -- -- ************************************************************* -- Distributed under the GNU Lesser General Public License. * -- This can be obtained from “www.gnu.org”. * -- ************************************************************* -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/> -- -- ghdl_ram.vhd -- -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- RAM memory is mapped to x0000 -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ library IEEE; --Use standard IEEE libs as recommended by Tristan. use IEEE.STD_LOGIC_1164.ALL; use IEEE.numeric_std.all; entity ghdl_ram is Port ( clk, wr, rst : in std_logic; data_wr: in unsigned(7 downto 0); ram_dat: out unsigned(7 downto 0); address: in unsigned(15 downto 0) ); end ghdl_ram; architecture RTL of ghdl_ram is -- type RamType is array (natural range <>) of std_logic_vector(7 downto 0); --0 to integer'HIGH type RamType is array (0 to 1023) of unsigned(7 downto 0); signal add : unsigned(15 downto 0); signal data_wr_reg : unsigned(7 downto 0); signal wr_reg : std_logic; signal RAM_zero : RamType := ( --signal RAM_zero : RamType(0 to 1023) := ( -- I needed something for data so this is old ROM stuff. X"A9", --0 X"00", X"8D", X"12", X"02", X"A0", X"43", X"20", X"BA", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"A0", X"54", --10 X"20", X"BA", X"FF", X"AD", X"12", X"02", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"A0", X"20", X"72", --20 r X"66", --f X"63", --c X"30", --0 X"35", --0 X"0d", --cr X"18", X"69", X"78", X"20", X"D5", X"FF", X"A0", X"5A", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"F0", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"46", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"43", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"90", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"65", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"10", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"84", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"56", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"50", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"A3", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"AE", X"12", X"02", X"E8", X"8A", X"29", X"0F", X"8D", X"12", X"02", X"A0", X"0A", X"20", X"BA", X"FF", X"4C", X"05", X"FF", X"AD", X"01", X"40", X"29", X"80", X"D0", X"F9", X"8C", X"00", X"40", X"60", X"30", X"31", X"32", X"33", X"34", X"35", X"36", X"37", X"38", X"39", X"41", X"42", X"43", X"44", X"45", X"46", X"8D", X"14", X"02", X"98", X"18", X"6A", X"6A", X"6A", X"6A", X"29", X"0F", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"AD", X"14", X"02", X"29", X"0F", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"60", X"40", X"40", X"EA", X"EA", X"00", X"FF", X"F4", X"FF", X"00", X"FF", X"F5", X"FF", X"72", --100 r X"66", X"30", X"33", X"0d", X"A0", X"43", X"20", X"BA", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"A0", X"54", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"20", X"D5", X"FF", X"A0", X"5A", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"F0", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"46", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"43", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"90", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"65", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"10", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"84", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"56", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"50", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"A3", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"AE", X"12", X"02", X"E8", X"8A", X"29", X"0F", X"8D", X"12", X"02", X"A0", X"0A", X"20", X"BA", X"FF", X"4C", X"05", X"FF", X"AD", X"01", X"40", X"29", X"80", X"D0", X"F9", X"8C", X"00", X"40", X"60", X"30", X"31", X"32", X"33", X"34", X"35", X"EA", X"36", X"37", X"38", X"39", X"41", X"42", X"43", X"44", X"45", X"46", X"8D", X"14", X"02", X"98", X"18", X"6A", X"6A", X"6A", X"6A", X"29", X"0F", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"AD", X"14", X"02", X"29", X"0F", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"60", X"40", X"40", X"EA", X"EA", X"00", X"FF", X"F4", X"FF", X"00", X"FF", X"F5", X"72", --200 r X"66", X"63", X"30", X"34", X"0d", X"39", X"39", X"39", X"39", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"A0", X"54", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"20", X"D5", X"FF", X"A0", X"5A", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"F0", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"72", --240 X"66", X"63", X"30", X"30", X"0d", X"00", X"00", X"20", X"20", X"BA", X"FF", X"A0", X"43", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"90", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"65", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"10", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"84", X"FF", X"00", --281 X"06", --281 X"06", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"56", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"50", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"A3", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"AE", X"12", X"02", X"E8", X"8A", X"29", X"0F", X"8D", X"12", X"02", X"A0", X"0A", X"20", X"BA", X"FF", X"4C", X"05", X"FF", X"AD", X"01", X"40", X"29", X"80", X"D0", X"F9", X"8C", X"00", X"40", X"60", X"30", X"31", X"32", X"33", X"34", X"35", X"EA", X"36", X"37", X"38", X"39", X"41", X"42", X"43", X"44", X"45", X"46", X"8D", X"14", X"02", X"98", X"18", X"6A", X"6A", X"6A", X"6A", X"29", X"0F", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"AD", X"14", X"02", X"29", X"0F", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"60", X"40", X"40", X"EA", X"EA", X"00", X"FF", X"F4", X"FF", X"00", X"FF", X"F5", X"FF", X"A9", X"00", X"8D", X"12", X"02", X"A0", X"43", X"20", X"BA", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"A0", X"54", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"20", X"D5", X"FF", X"A0", X"5A", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"F0", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"46", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"43", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"90", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"65", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"4E", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"10", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"84", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"A0", X"56", X"20", X"BA", X"FF", X"AD", X"12", X"02", X"18", X"69", X"78", X"50", X"08", X"A0", X"31", X"20", X"BA", X"FF", X"4C", X"A3", X"FF", X"A0", X"30", X"20", X"BA", X"FF", X"A0", X"20", X"20", X"BA", X"FF", X"AE", X"12", X"02", X"E8", X"8A", X"29", X"0F", X"8D", X"12", X"02", X"A0", X"0A", X"20", X"BA", X"FF", X"4C", X"05", X"FF", X"AD", X"01", X"40", X"29", X"80", X"D0", X"F9", X"8C", X"00", X"40", X"60", X"30", X"31", X"32", X"33", X"34", X"35", X"EA", X"36", X"37", X"38", X"39", X"41", X"42", X"43", X"44", X"45", X"46", X"8D", X"14", X"02", X"98", X"18", X"6A", X"6A", X"6A", X"6A", X"29", X"0F", X"AA", X"BC", X"C5", X"FF", X"20", X"BA", X"FF", X"AD", X"14", X"29", X"0F", X"AA", X"BC", X"C5", X"C5", X"FF", X"BA", X"40", X"40", X"00", X"FF", X"00", X"FF", X"F4", X"FF", X"00", X"FF", X"F5", X"FF" ) ; begin addressing:process(clk, address, data_wr) begin if rst = '0' then add <= (others => '0'); data_wr_reg <= (others => '0'); wr_reg <= '0'; elsif rising_edge(clk) then add <= address; data_wr_reg <= data_wr; wr_reg <= wr; end if; end process; read_ram:process(wr, add) begin if wr = '0' and add(15 downto 10) = "000000" then --zero page ram_dat <= (RAM_zero(to_integer(unsigned(add(9 downto 0))))); end if; end process; write_ram:process(wr, data_wr_reg, add) begin if rising_edge(clk) then elsif wr_reg = '1' and add(15 downto 10) = "0000000" then RAM_zero(to_integer((add(9 downto 0)))) <= (data_wr_reg); end if; end process; end RTL ;