|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- library ieee;
- use ieee.std_logic_1164.all;
- use ieee.numeric_std.all;
- use ieee.float_pkg.all;
-
- library work;
- use work.reg32.all;
- use work.avalon_slave.all;
- use work.test_utility.all;
- use work.test_avalon_slave.all;
- use work.task.all;
- use work.crc_data.all;
- use work.fft_data.all;
- use work.test_hardware_task.all;
- use work.test_data_channel_pkg.all;
-
- library std;
- use std.env.all;
- use std.textio.all;
-
- entity test_task_crc is
- generic( CHECK_RESULTS : boolean );
- end entity test_task_crc;
-
- architecture test of test_task_crc is
-
- signal clk : std_logic := '0';
- signal reset : std_logic := '1';
-
- signal req : work.avalon_slave.Request;
- signal rsp : work.avalon_slave.Response;
-
- signal data_channel_req : work.avalon_slave.Request;
- signal data_channel_rsp : work.avalon_slave.Response;
-
- signal signal_read : std_logic;
- signal signal_readdata : std_logic_vector( 31 downto 0 );
-
- signal signal_write : std_logic;
- signal signal_writedata : std_logic_vector( 31 downto 0 );
-
- signal data_channel_read : std_logic;
- signal data_channel_readdata : std_logic_vector( 31 downto 0 );
-
- signal index_output : integer range 0 to 1023;
-
- begin
-
- dut : entity work.task_crc
- port map (
- clk => clk,
- reset => reset,
-
- address => req.address,
- read => req.read,
- readdata => rsp.readdata,
- write => req.write,
- writedata => req.writedata,
-
- signal_read => signal_read,
- signal_readdata => signal_readdata,
-
- signal_write => signal_write,
- signal_writedata => signal_writedata
- );
-
- u_data_channel : entity work.data_channel
- port map (
- clk => clk,
- reset => reset,
-
- ctrl_address => data_channel_req.address,
- ctrl_read => data_channel_req.read,
- ctrl_readdata => data_channel_rsp.readdata,
- ctrl_write => data_channel_req.write,
- ctrl_writedata => data_channel_req.writedata,
-
- hw_sink_write => signal_write,
- hw_sink_writedata => signal_writedata,
-
- hw_source_read => data_channel_read,
- hw_source_readdata => data_channel_readdata
- );
-
- clk <= not clk after 10 ns;
-
- reset_release : process is
- begin
- wait for 35 ns;
- reset <= '0';
- wait;
- end process reset_release;
-
- p_number_input_sample: process ( clk, reset ) is
- begin
- if ( reset = '1' ) then
- index_output <= 1;
- signal_readdata <= to_std_logic_vector( to_float( work.fft_data.expected( 0 ) ) );
- elsif ( rising_edge( clk ) ) then
- if signal_read = '1' then
- if index_output /= 1023 then
- index_output <= index_output + 1;
- end if;
- signal_readdata <= to_std_logic_vector( to_float( work.fft_data.expected( index_output ) ) );
- end if;
- end if;
- end process p_number_input_sample;
-
- stimulus: process is
- variable data_channel_config : std_logic_vector( 31 downto 0 ) := x"00000001";
- variable expected_crc_value : std_logic_vector( 31 downto 0 ) := work.crc_data.expected;
- begin
- wait until falling_edge( reset );
-
- work.test_data_channel_pkg.write_and_assert_config( clk => clk,
- req => data_channel_req,
- rsp => data_channel_rsp,
- config => data_channel_config );
-
- test_execute( clk => clk, req => req, rsp => rsp,
- write => signal_write, writedata => signal_writedata );
-
- std.textio.write( std.textio.OUTPUT, " test_crc_value ... " );
-
- assert_read_sw_source_eq( clk => clk,
- req => data_channel_req, rsp => data_channel_rsp,
- expected => expected_crc_value );
-
- std.textio.write( std.textio.OUTPUT, TEST_OK );
-
- finish;
- end process stimulus;
- end architecture test;
-
|