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;