Files
es-praktikum/Milestone2/axis_audio_bitcrusher_tb.vhd
2024-10-28 22:34:35 +01:00

87 lines
2.5 KiB
VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity axis_audio_bitcrusher_tb is
end;
architecture rtl of axis_audio_bitcrusher_tb is
constant EXT_CLOCK_FREQ : integer := 125000000;
constant SCK_FREQ : integer := 1000000;
constant has_last : boolean := true;
constant bit_reduction : integer := 8;
constant clk_half_period : time := 1 sec / EXT_CLOCK_FREQ / 2;
signal axis_clk : std_logic := '0';
signal axis_reset : std_logic := '1';
signal s_axis_tdata : std_logic_vector(15 downto 0) := (others=>'0') ;
signal s_axis_tvalid : std_logic := '0';
signal s_axis_tlast : std_logic := '0';
signal s_axis_tready : std_logic;
signal m_axis_tdata : std_logic_vector(15 downto 0) := (others=>'0') ;
signal m_axis_tvalid : std_logic;
signal m_axis_tlast : std_logic;
signal m_axis_tready : std_logic := '0';
begin
clk_proc: process (axis_clk)
begin
axis_clk <= not axis_clk after clk_half_period;
end process;
stim: process
begin
axis_reset <= '0' after 100 * clk_half_period;
wait until axis_reset = '0';
wait until rising_edge(axis_clk);
s_axis_tdata <= x"1234";
s_axis_tvalid <= '1';
s_axis_tlast <= '0';
loop
wait until rising_edge(axis_clk);
if s_axis_tready = '1' then
s_axis_tvalid <= '0';
s_axis_tlast <= '0';
elsif m_axis_tvalid = '1' and m_axis_tlast = '1' then
exit;
elsif m_axis_tvalid = '1' and m_axis_tlast = '0' then
m_axis_tready <= '1';
s_axis_tdata <= x"5678";
s_axis_tvalid <= '1';
s_axis_tlast <= '1';
end if;
end loop;
wait;
end process;
dut: entity work.axis_audio_bitcrusher
generic map (
BIT_REDUCTION => bit_reduction,
HAS_LAST => has_last
)
port map (
AXIS_ACLK => axis_clk,
AXIS_ARESETN => axis_reset,
-- AXI Streaming Target Port
S_AXIS_TVALID => s_axis_tvalid ,
S_AXIS_TDATA => s_axis_tdata,
S_AXIS_TLAST => s_axis_tlast,
S_AXIS_TREADY => s_axis_tready,
-- AXI Streaming Initiator Port
M_AXIS_TVALID => m_axis_tvalid ,
M_AXIS_TDATA => m_axis_tdata,
M_AXIS_TLAST => m_axis_tlast,
M_AXIS_TREADY => m_axis_tready
);
end architecture;