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

Subversion Repositories copyblaze

[/] [copyblaze/] [trunk/] [copyblaze/] [rtl/] [vhdl/] [ip/] [wb_sram/] [wb_sram.vhd] - Rev 71

Go to most recent revision | Compare with Previous | Blame | View Log

--------------------------------------------------------------------------------
-- Company: 
--
-- File: wb_sram.vhd
--
-- Description:
--	projet copyblaze
--	wishbone 8bit data Memory 
--
-- File history:
-- v1.0: 08/12/11: Creation
--
-- Targeted device: ProAsic A3P250 VQFP100
-- Author: AbdAllah Meziti
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.all;
 
use	work.Usefull_Pkg.all;		-- Usefull Package
 
--------------------------------------------------------------------------------
-- Entity: wb_sram
--
-- Description:
--	
--	REMARQUE:
--
--	
-- History:
-- 08/12/11 AM: Creation
-- ---------------------
-- xx/xx/xx AM: 
--				
--------------------------------------------------------------------------------
entity wb_sram is
	generic
	(
		GEN_WIDTH_DATA		: positive := 8;
		GEN_DEPTH_MEM		: positive := 64
	);
	port
	(
		clk      : in  std_ulogic;
		reset    : in  std_ulogic;
		-- Wishbone bus
		wb_adr_i : in  std_ulogic_vector(GEN_WIDTH_DATA-1 downto 0);
		wb_dat_i : in  std_ulogic_vector(GEN_WIDTH_DATA-1 downto 0);
		wb_dat_o : out std_ulogic_vector(GEN_WIDTH_DATA-1 downto 0);
		wb_cyc_i : in  std_ulogic;
		wb_stb_i : in  std_ulogic;
		wb_ack_o : out std_ulogic;
		wb_we_i  : in  std_ulogic
	);
end wb_sram;
 
--------------------------------------------------------------------------------
-- Architecture: RTL
-- of entity : wb_sram
--------------------------------------------------------------------------------
architecture rtl of wb_sram is
 
	type	MEM_TYPE is array(0 to GEN_DEPTH_MEM-1) of std_ulogic_vector(GEN_WIDTH_DATA-1 downto 0);
 
	signal	iMemArray		: MEM_TYPE;
	signal	iMemDataIn		,
			iMemDataOut		: std_ulogic_vector( GEN_WIDTH_DATA-1 downto 0 );
	signal	iMemAddr		: std_ulogic_vector( log2(GEN_DEPTH_MEM)-1 downto 0 );
	signal	iMemWrite		: std_ulogic;
 
begin
 
	-- ============== --
	-- Memory Process --
	-- ============== --
	Mem_Proc : process(reset, clk)
	begin
		if ( reset='0' ) then
		-- For Simulation only
			for i in 0 to GEN_DEPTH_MEM-1 loop
				iMemArray(i)	<=	(others=>'0');
				--iMemArray(i)	<=	std_ulogic_vector(to_unsigned(GEN_DEPTH_MEM-i, GEN_WIDTH_DATA));
			end loop;		
		elsif ( rising_edge(clk) ) then
			if ( iMemWrite = '1' ) then
				iMemArray( to_integer(unsigned(iMemAddr)) )	<= iMemDataIn;
			end if;
		end if;
	end process Mem_Proc;
	iMemDataOut	<=	iMemArray( to_integer(unsigned(iMemAddr)) );
 
	-- ================== --
	-- Wishbone Interface --
	-- ================== --
	wb_dat_o	<=	iMemDataOut;
	wb_ack_o	<=	wb_stb_i;
 
	iMemWrite	<=	wb_stb_i and wb_we_i;
	iMemDataIn	<=	wb_dat_i;
	iMemAddr	<=	wb_adr_i(iMemAddr'range);
 
 
end rtl;

Go to most recent revision | 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.