OpenCores
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 ;
 
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.