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

Subversion Repositories tinycpu

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /tinycpu
    from Rev 9 to Rev 10
    Reverse comparison

Rev 9 → Rev 10

/trunk/testbench/blockram_tb.vhd
11,7 → 11,7
component blockram
port(
Address: in std_logic_vector(11 downto 0); --memory address
Address: in std_logic_vector(7 downto 0); --memory address
WriteEnable: in std_logic_vector(1 downto 0); --write or read
Enable: in std_logic;
Clock: in std_logic;
22,7 → 22,7
 
--Inputs
signal Address: std_logic_vector(11 downto 0) := (others => '0');
signal Address: std_logic_vector(7 downto 0) := (others => '0');
signal WriteEnable: std_logic_vector(1 downto 0) := (others => '0');
signal DataIn: std_logic_vector(15 downto 0) := (others => '0');
signal Enable: std_logic := '0';
69,7 → 69,7
WriteEnable(0) <= '0';
WriteEnable(1) <= '0';
wait for 10 ns;
Address <= x"001";
Address <= x"01";
DataIn <= "1000000000001000";
WriteEnable(0) <= '1';
WriteEnable(1) <= '1';
80,7 → 80,7
assert (DataOut="1000000000001000") report "Storage error case 1" severity error;
 
--case 2
Address <= x"033";
Address <= x"33";
DataIn <= "1000000000001100";
WriteEnable(0) <= '1';
WriteEnable(1) <= '1';
91,7 → 91,7
assert (DataOut="1000000000001100") report "memory selection error case 2" severity error;
 
-- case 3
Address <= x"001";
Address <= x"01";
wait for 10 ns;
assert (DataOut="1000000000001000") report "memory retention error case 3" severity error;
/trunk/src/blockram.vhd
11,11 → 11,22
use IEEE.NUMERIC_STD.ALL;
use ieee.std_logic_unsigned.all;
 
--if WriteEnable(0) = '1' then
-- di0 <= DataIn(7 downto 0);
-- else
--di0 := RAM(conv_integer(Address))(7 downto 0);
-- di0 <= do(7 downto 0);
--end if;
--if WriteEnable(1) = '1' then
-- di1 <= DataIn(15 downto 8);
--else
--di1 <= RAM(conv_integer(Address))(15 downto 8);
-- di1 <= do(15 downto 8);
--end if;
 
 
entity blockram is
port(
Address: in std_logic_vector(11 downto 0); --memory address
Address: in std_logic_vector(7 downto 0); --memory address
WriteEnable: in std_logic_vector(1 downto 0); --write 1 byte at a time option
Enable: in std_logic;
Clock: in std_logic;
25,33 → 36,24
end blockram;
 
architecture Behavioral of blockram is
type ram_type is array (4095 downto 0) of std_logic_vector (15 downto 0);
type ram_type is array (255 downto 0) of std_logic_vector (15 downto 0);
signal RAM: ram_type;
signal di0, di1, do0, do1: std_logic_vector(7 downto 0); --data inputs and outputs for byte-enable
signal di0, di1: std_logic_vector(7 downto 0);
signal do : std_logic_vector(15 downto 0);
begin
process (WriteEnable,DataIn)
begin
if WriteEnable(0) = '1' then
di0 <= DataIn(7 downto 0);
else
di0 <= RAM(conv_integer(Address))(7 downto 0);
do0 <= RAM(conv_integer(Address))(7 downto 0);
end if;
if WriteEnable(1)= '1' then
di1 <= DataIn(15 downto 8);
else
di1 <= RAM(conv_integer(Address))(15 downto 8);
do1 <= RAM(conv_integer(Address))(15 downto 8);
end if;
end process;
di0 <= DataIn(7 downto 0) when WriteEnable(0)='1' else do(7 downto 0);
di1 <= DataIn(15 downto 8) when WriteEnable(1)='1' else do(15 downto 8);
process (Clock)
begin
if rising_edge(Clock) then
if Enable = '1' then
DataOut <= do1 & do0;
if WriteEnable(0)='1' or WriteEnable(1)='1' then
RAM(conv_integer(Address)) <= di1 & di0;
else
do <= RAM(conv_integer(Address)) ;
end if;
end if;
end if;
end process;
 
DataOut <= do;
end Behavioral;

powered by: WebSVN 2.1.0

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