Files
lt16lab/soc/testbench/dmem_test.vhd
Thomas Fehmel 657a54ba18 Initial Commit
2016-10-18 14:21:45 +02:00

114 lines
2.4 KiB
VHDL

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
library work;
use work.lt16x32_global.all;
use work.wishbone.all;
use work.config.all;
use work.wb_tp.all;
ENTITY dmem_test IS
END dmem_test;
ARCHITECTURE behavior OF dmem_test IS
COMPONENT wb_dmem is
generic(
memaddr : generic_addr_type;
addrmask : generic_mask_type := CFG_MADR_DMEM
);
port(
clk : in std_logic;
rst : in std_logic;
wslvi : in wb_slv_in_type;
wslvo : out wb_slv_out_type
);
end COMPONENT;
--Inputs
signal clk : std_logic := '0';
signal rst : std_logic := '0';
signal wslvi : wb_slv_in_type := wbs_in_none;
--Outputs
signal wslvo : wb_slv_out_type;
-- Clock period definitions
constant clk_period : time := 10 ns;
type block_array is array (0 to 63) of std_logic_vector(7 downto 0);
type ram_array is array (0 to 3) of block_array;
constant test_values : ram_array := (
(x"00", x"04", x"08", others=>x"00"),
(x"01", x"05", x"09", others=>x"00"),
(x"02", x"06", x"0a", others=>x"00"),
(x"03", x"07", x"0b", others=>x"00")
);
signal readdata : std_logic_vector(WB_PORT_SIZE -1 downto 0);
signal writedata : std_logic_vector(WB_PORT_SIZE -1 downto 0);
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: wb_dmem
generic map(memaddr=>0)
PORT MAP(clk => clk, rst => rst, wslvi => wslvi, wslvo => wslvo);
-- Clock process definitions
clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
rst <= '1';
wait for 100 ns;
rst <= '0';
wait until falling_edge(clk);
for i in 0 to 63 loop
--test 1: write word, read bytes
-- assume word data is always given in little endian
writedata <= test_values(3)(i) & test_values(2)(i) & test_values(1)(i) & test_values(0)(i);
wait until falling_edge(clk);
generate_async_wb_slave_writeaccess(
slvi=>wslvi,
slvo=>wslvo,
writedata=>writedata
);
wait for clk_period;
for j in 0 to 3 loop
generate_async_wb_slave_readaccess(
slvi=>wslvi,
slvo=>wslvo,
readdata=>readdata,
adr_offset=>j,
size=>"00"
);
--wait for 1 ps;
assert readdata(7 downto 0)=test_values(j)(i) report "Wrong value read!" severity error;
wait until falling_edge(clk);
end loop;
end loop;
wait for clk_period*10;
assert false report "Simulation Finished!" severity failure;
end process;
END;