OpenCores
URL https://opencores.org/ocsvn/lattice6502/lattice6502/trunk

Subversion Repositories lattice6502

[/] [lattice6502/] [ghdl/] [ghdl_rom.vhd] - Rev 2

Compare with Previous | Blame | View Log

------------------------------------------------------------------
--	6502 ghdl ROM 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_rom.vhd
--	******************************************************************************
--	ROM memory is mapped to xFC00                                                *
--	******************************************************************************
 
--	************************************************************************
--	ROM read only memory to test the 65C02 micro                           *
--	IRQ, Reset and NMI at the top of memory                                *
--	Test vectors mapped to my test set up                                  *
--	I pulled most it from tutorials, if you use it take care             *
--	I do not have the copyright and forgot where I got it.                 *
--	I'm sure it's generic.                                                 *
--	I only use it with ghdl and to make a working FPGA                     *
--	I use the Lattice EBR Embedded Block RAM.  If I ever get there.        *
--	************************************************************************
 
library IEEE;			--Use standard IEEE libs as recommended by Tristan.
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
 
entity ghdl_rom is
Port (
	rom_dat : out unsigned(7 downto 0);
	clk, rst, wr : in std_logic;
	address : in unsigned(15 downto 0)
    );
end ghdl_rom;
 
architecture RTL of ghdl_rom is
type RomType is array (natural range <>) of unsigned(7 downto 0);
 
signal add : unsigned(15 downto 0);
 
signal ROM_hi : RomType(0 to 1023) := (	--FC00
--	The filename.bin is pasted here, all of it.
X"E8", 
X"CA", 
X"E8", 
X"A2", 
X"55", 
X"6C", 
X"15", 
X"FC", 
X"CA", 
X"E8", 
X"CA", 
X"4C", 
X"00", 
X"FC", 
X"A0", 
X"AA", 
X"C8", 
X"88", 
X"4C", 
X"08", 
X"FC", 
X"0E", 
X"FC", 
X"EA", 
X"40", 
X"EA", 
X"40", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"EA", 
X"00", 
X"FC", 
X"17", 
X"FC", 
X"00", 
X"FC", 
X"19", 
X"FC" )  ; 
--	Ths stuff you past in ends here, make sure the close bracket and semi-colon are there.
begin
 
addressing:process(clk, address)
begin
if rst = '0' then
	add <= (others => '0');
elsif rising_edge(clk) then
	add <= address;
end if;
end process;
 
read_rom:process(add, wr)
begin
if wr = '0' and add(15 downto 10) = "111111" then
	rom_dat <= unsigned(ROM_hi(to_integer(unsigned(add(9 downto 0))))) ;
 
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.