90 lines
2.7 KiB
VHDL
90 lines
2.7 KiB
VHDL
library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.numeric_std.all;
|
|
|
|
library work;
|
|
use work.reg32.all;
|
|
use work.avalon_slave.all;
|
|
|
|
package test_avalon_slave is
|
|
|
|
procedure read( signal clk : in std_logic;
|
|
variable address : in std_logic_vector;
|
|
signal req : out work.avalon_slave.Request;
|
|
signal rsp : in work.avalon_slave.Response;
|
|
variable data : out std_logic_vector );
|
|
|
|
procedure assert_readdata_eq( signal clk : in std_logic;
|
|
variable address : in std_logic_vector;
|
|
signal req : out work.avalon_slave.Request;
|
|
signal rsp : in work.avalon_slave.Response;
|
|
variable expected : in std_logic_vector;
|
|
constant message : in string );
|
|
|
|
procedure write( signal clk : in std_logic;
|
|
variable address : in std_logic_vector;
|
|
signal req : out work.avalon_slave.Request;
|
|
variable data : in std_logic_vector );
|
|
|
|
end package test_avalon_slave;
|
|
|
|
package body test_avalon_slave is
|
|
|
|
procedure read( signal clk : in std_logic;
|
|
variable address : in std_logic_vector;
|
|
signal req : out work.avalon_slave.Request;
|
|
signal rsp : in work.avalon_slave.Response;
|
|
variable data : out std_logic_vector ) is
|
|
begin
|
|
|
|
req.read <= '1';
|
|
req.write <= '0';
|
|
req.address <= address;
|
|
wait until falling_edge( clk );
|
|
wait until falling_edge( clk );
|
|
req.read <= '0';
|
|
data := rsp.readdata;
|
|
wait until falling_edge( clk );
|
|
|
|
end procedure read;
|
|
|
|
procedure assert_readdata_eq( signal clk : in std_logic;
|
|
variable address : in std_logic_vector;
|
|
signal req : out work.avalon_slave.Request;
|
|
signal rsp : in work.avalon_slave.Response;
|
|
variable expected :in std_logic_vector;
|
|
constant message : in string ) is
|
|
|
|
variable readdata : std_logic_vector( expected'range );
|
|
begin
|
|
|
|
read( clk => clk,
|
|
address => address,
|
|
req => req,
|
|
rsp => rsp,
|
|
data => readdata );
|
|
|
|
assert( readdata = expected )
|
|
report message & LF &
|
|
" expected: " & to_string( expected ) & LF &
|
|
" actual: " & to_string( readdata ) & LF
|
|
severity error;
|
|
end procedure assert_readdata_eq;
|
|
|
|
procedure write( signal clk : in std_logic;
|
|
variable address : in std_logic_vector;
|
|
signal req : out work.avalon_slave.Request;
|
|
variable data : in std_logic_vector ) is
|
|
begin
|
|
|
|
req.read <= '0';
|
|
req.write <= '1';
|
|
req.address <= address;
|
|
req.writedata <= data;
|
|
wait until falling_edge( clk );
|
|
req.write <= '0';
|
|
|
|
end procedure write;
|
|
|
|
end package body test_avalon_slave;
|