library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.numeric_std.all;
|
|
|
|
--+ including vhdl 2008 libraries
|
|
--+ These lines can be commented out when using
|
|
--+ a simulator with built-in VHDL 2008 support
|
|
--library ieee_proposed;
|
|
-- use ieee_proposed.standard_additions.all;
|
|
-- use ieee_proposed.std_logic_1164_additions.all;
|
|
-- use ieee_proposed.numeric_std_additions.all;
|
|
|
|
library osvvm;
|
|
use osvvm.RandomPkg.all;
|
|
|
|
library libvhdl;
|
|
use libvhdl.AssertP.all;
|
|
use libvhdl.StackP.all;
|
|
|
|
|
|
|
|
entity StackT is
|
|
end entity StackT;
|
|
|
|
|
|
|
|
architecture sim of StackT is
|
|
|
|
|
|
constant C_STACK_DEPTH : natural := 64;
|
|
|
|
type t_scoreboard is array (natural range <>) of std_logic_vector(7 downto 0);
|
|
|
|
shared variable sv_stack : t_stack;
|
|
|
|
|
|
begin
|
|
|
|
|
|
StackInitP : process is
|
|
begin
|
|
sv_stack.init(false);
|
|
wait;
|
|
end process StackInitP;
|
|
|
|
|
|
StackTestP : process is
|
|
variable v_data : std_logic_vector(7 downto 0);
|
|
begin
|
|
-- check initial emptiness
|
|
assert_true(sv_stack.is_empty, "Stack should be empty!");
|
|
for i in 0 to C_STACK_DEPTH-1 loop
|
|
sv_stack.push(std_logic_vector(to_unsigned(i, 8)));
|
|
end loop;
|
|
-- check that it's full
|
|
assert_equal(sv_stack.fillstate, C_STACK_DEPTH, "Stack should have" & integer'image(C_STACK_DEPTH) & "entries");
|
|
-- empty the queue
|
|
for i in C_STACK_DEPTH-1 downto 0 loop
|
|
sv_stack.pop(v_data);
|
|
assert_equal(v_data, std_logic_vector(to_unsigned(i, 8)));
|
|
end loop;
|
|
-- check emptiness
|
|
assert_true(sv_stack.is_empty, "Stack should be empty!");
|
|
report "INFO: t_stack test finished successfully";
|
|
wait;
|
|
end process StackTestP;
|
|
|
|
|
|
end architecture sim;
|