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

Subversion Repositories lxp32

[/] [lxp32/] [trunk/] [verify/] [lxp32/] [src/] [tb/] [tb_pkg_body.vhd] - Rev 9

Compare with Previous | Blame | View Log

---------------------------------------------------------------------
-- LXP32 testbench package body
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Auxiliary package body for the LXP32 testbench
---------------------------------------------------------------------
 
use std.textio.all;
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.common_pkg.all;
 
package body tb_pkg is
	procedure load_ram(
		filename: string;
		signal clk: in std_logic;
		signal soc_in: out soc_wbs_in_type;
		signal soc_out: in soc_wbs_out_type
	) is
		file f: text open read_mode is filename;
		variable i: integer:=0;
		variable l: line;
		variable v: bit_vector(31 downto 0);
	begin
		wait until rising_edge(clk);
 
		report "Loading program RAM from """&filename&"""";
 
		while not endfile(f) loop
			readline(f,l);
			read(l,v);
 
			assert i<c_max_program_size report "Error: program size is too large" severity failure;
 
			soc_in.cyc<='1';
			soc_in.stb<='1';
			soc_in.we<='1';
			soc_in.sel<=(others=>'1');
			soc_in.adr<=std_logic_vector(to_unsigned(i,30));
			soc_in.dat<=to_stdlogicvector(v);
 
			wait until rising_edge(clk) and soc_out.ack='1';
 
			i:=i+1;
		end loop;
 
		report integer'image(i)&" words loaded from """&filename&"""";
 
		soc_in.cyc<='0';
		soc_in.stb<='0';
 
		wait until rising_edge(clk);
	end procedure;
 
	procedure run_test(
		filename: string;
		signal clk: in std_logic;
		signal globals: out soc_globals_type;
		signal soc_in: out soc_wbs_in_type;
		signal soc_out: in soc_wbs_out_type;
		signal result: in monitor_out_type
	) is
	begin
		-- Assert SoC and CPU resets
		wait until rising_edge(clk);
		globals.rst_i<='1';
		globals.cpu_rst_i<='1';
		wait until rising_edge(clk);
 
		-- Deassert SoC reset, leave CPU in reset state for now
		globals.rst_i<='0';
		wait until rising_edge(clk);
 
		-- Load RAM
		load_ram(filename,clk,soc_in,soc_out);
 
		-- Deassert CPU reset
		globals.cpu_rst_i<='0';
 
		while result.valid/='1' loop
			wait until rising_edge(clk);
		end loop;
 
		-- Analyze result
 
		if result.data=X"00000001" then
			report "TEST """&filename&""" RESULT: SUCCESS (return code 0x"&
				hex_string(result.data)&")";
		else
			report "TEST """&filename&""" RESULT: FAILURE (return code 0x"&
				hex_string(result.data)&")" severity failure;
		end if;
	end procedure;
end package body;
 

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.