library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library Testbench_Lib3; use Testbench_Lib3.rtps_package.all; use Testbench_Lib3.user_config.all; use Testbench_Lib3.rtps_config_package.all; use Testbench_Lib3.rtps_test_package.all; use Testbench_Lib3.Type1_package.all; entity L2_Testbench_Lib3 is port ( -- SYSTEM clk : in std_logic; reset : in std_logic; time : in TIME_TYPE; -- INPUT empty : in std_logic; rd : out std_logic; data_in : in std_logic_vector(WORD_WIDTH-1 downto 0); -- OUTPUT data_out : out std_logic_vector(WORD_WIDTH-1 downto 0); wr : out std_logic; full : in std_logic; -- TO USER ENTITY start_user : in std_logic; ack_user : out std_logic; opcode_user : in DDS_READER_OPCODE_TYPE; instance_state_user : in std_logic_vector(INSTANCE_STATE_KIND_WIDTH-1 downto 0); view_state_user : in std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0); sample_state_user : in std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0); instance_handle_user : in INSTANCE_HANDLE_TYPE; max_samples_user : in std_logic_vector(MAX_SAMPLES_WIDTH-1 downto 0); get_data_user : in std_logic; done_user : out std_logic; return_code_user : out std_logic_vector(RETURN_CODE_WIDTH-1 downto 0); -- Sample Info si_sample_state_user : out std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0); si_view_state_user : out std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0); si_instance_state_user : out std_logic_vector(INSTANCE_STATE_KIND_WIDTH-1 downto 0); si_source_timestamp_user : out TIME_TYPE; si_instance_handle_user : out INSTANCE_HANDLE_TYPE; si_publication_handle_user : out INSTANCE_HANDLE_TYPE; si_disposed_generation_count_user : out std_logic_vector(DISPOSED_GENERATION_COUNT_WIDTH-1 downto 0); si_no_writers_generation_count_user : out std_logic_vector(NO_WRITERS_GENERATION_COUNT_WIDTH-1 downto 0); si_sample_rank_user : out std_logic_vector(SAMPLE_RANK_WIDTH-1 downto 0); si_generation_rank_user : out std_logic_vector(GENERATION_RANK_WIDTH-1 downto 0); si_absolute_generation_rank_user : out std_logic_vector(ABSOLUTE_GENERATION_COUNT_WIDTH-1 downto 0); si_valid_data_user : out std_logic; si_valid_user : out std_logic; si_ack_user : in std_logic; eoc_user : out std_logic; -- Communication Status status_user : out std_logic_vector(STATUS_KIND_WIDTH-1 downto 0); decode_error : out std_logic; -- ###GENERATED START### id : out std_logic_vector(CDR_LONG_WIDTH-1 downto 0); a : out std_logic_vector(CDR_LONG_WIDTH-1 downto 0); -- ###GENERATED END### valid : out std_logic ); end entity; architecture arch of L2_Testbench_Lib3 is type ENDPOINT_DATA_TYPE is array (0 to NUM_ENDPOINTS) of std_logic_vector(WORD_WIDTH downto 0); -- INTERCONNECT signal start_wr_dds, ack_wr_dds, get_data_wr_dds, done_wr_dds, ready_in_wr_dds, valid_in_wr_dds, last_word_in_wr_dds, si_valid_data_wr_dds, si_valid_wr_dds, si_ack_wr_dds, eoc_wr_dds : std_logic; signal opcode_wr_dds : DDS_READER_OPCODE_TYPE; signal instance_state_wr_dds, si_instance_state_wr_dds : std_logic_vector(INSTANCE_STATE_KIND_WIDTH-1 downto 0); signal view_state_wr_dds, si_view_state_wr_dds : std_logic_vector(VIEW_STATE_KIND_WIDTH-1 downto 0); signal sample_state_wr_dds, si_sample_state_wr_dds : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0); signal instance_handle_wr_dds, si_instance_handle_wr_dds : INSTANCE_HANDLE_TYPE; signal max_samples_wr_dds : std_logic_vector(MAX_SAMPLES_WIDTH-1 downto 0); signal return_code_wr_dds : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0); signal data_in_wr_dds : std_logic_vector(WORD_WIDTH-1 downto 0); signal si_source_timestamp_wr_dds : TIME_TYPE; signal si_publication_handle_wr_dds : INSTANCE_HANDLE_TYPE; signal si_disposed_generation_count_wr_dds : std_logic_vector(DISPOSED_GENERATION_COUNT_WIDTH-1 downto 0); signal si_no_writers_generation_count_wr_dds : std_logic_vector(NO_WRITERS_GENERATION_COUNT_WIDTH-1 downto 0); signal si_sample_rank_wr_dds : std_logic_vector(SAMPLE_RANK_WIDTH-1 downto 0); signal si_generation_rank_wr_dds : std_logic_vector(GENERATION_RANK_WIDTH-1 downto 0); signal si_absolute_generation_rank_wr_dds : std_logic_vector(ABSOLUTE_GENERATION_COUNT_WIDTH-1 downto 0); signal status_wr_dds : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0); signal start_dds_rtps, ack_dds_rtps, done_dds_rtps, valid_in_dds_rtps, ready_in_dds_rtps, last_word_in_dds_rtps : std_logic; signal opcode_dds_rtps : HISTORY_CACHE_OPCODE_TYPE; signal ret_dds_rtps : HISTORY_CACHE_RESPONSE_TYPE; signal data_in_dds_rtps : std_logic_vector(WORD_WIDTH-1 downto 0); signal empty_rh, full_rh, rd_rh, wr_rh : std_logic_vector(0 to NUM_ENDPOINTS); signal data_in_rh, data_out_rh : ENDPOINT_DATA_TYPE; signal empty_rtps, full_rtps, rd_rtps, wr_rtps, alive_sig_rtps : std_logic_vector(0 to NUM_ENDPOINTS); signal data_in_rtps, data_out_rtps : ENDPOINT_DATA_TYPE; signal wr_rtps_out, rd_rtps_out, full_rtps_out, empty_rtps_out : std_logic_vector(0 to NUM_ENDPOINTS); signal data_out_rtps_out, data_in_rtps_out : ENDPOINT_DATA_TYPE; signal last_word_out_rbe : std_logic; signal data_out_rbe : std_logic_vector(WORD_WIDTH-1 downto 0); signal last_word_out_rh_be_s, last_word_out_rh_ue_s : std_logic; signal data_out_rh_be_s, data_out_rh_ue_s : std_logic_vector(WORD_WIDTH-1 downto 0); signal data_rtps_out_s : RTPS_OUT_DATA_TYPE; signal last_word_rtps_out_s : std_logic_vector(0 to NUM_ENDPOINTS); begin Type1_reader_wrapper_r_inst : entity Testbench_Lib3.Type1_reader_wrapper(arch) port map ( -- SYSTEM clk => clk, reset => reset, -- FROM DDS READER start_dds => start_wr_dds, ack_dds => ack_wr_dds, opcode_dds => opcode_wr_dds, instance_state_dds => instance_state_wr_dds, view_state_dds => view_state_wr_dds, sample_state_dds => sample_state_wr_dds, instance_handle_dds => instance_handle_wr_dds, max_samples_dds => max_samples_wr_dds, get_data_dds => get_data_wr_dds, done_dds => done_wr_dds, return_code_dds => return_code_wr_dds, ready_in_dds => ready_in_wr_dds, valid_in_dds => valid_in_wr_dds, data_in_dds => data_in_wr_dds, last_word_in_dds => last_word_in_wr_dds, -- Sample Info si_sample_state_dds => si_sample_state_wr_dds, si_view_state_dds => si_view_state_wr_dds, si_instance_state_dds => si_instance_state_wr_dds, si_source_timestamp_dds => si_source_timestamp_wr_dds, si_instance_handle_dds => si_instance_handle_wr_dds, si_publication_handle_dds => si_publication_handle_wr_dds, si_disposed_generation_count_dds => si_disposed_generation_count_wr_dds, si_no_writers_generation_count_dds => si_no_writers_generation_count_wr_dds, si_sample_rank_dds => si_sample_rank_wr_dds, si_generation_rank_dds => si_generation_rank_wr_dds, si_absolute_generation_rank_dds => si_absolute_generation_rank_wr_dds, si_valid_data_dds => si_valid_data_wr_dds, si_valid_dds => si_valid_wr_dds, si_ack_dds => si_ack_wr_dds, eoc_dds => eoc_wr_dds, -- Communication Status status_dds => status_wr_dds, -- TO USER ENTITY start_user => start_user, ack_user => ack_user, opcode_user => opcode_user, instance_state_user => instance_state_user, view_state_user => view_state_user, sample_state_user => sample_state_user, instance_handle_user => instance_handle_user, max_samples_user => max_samples_user, get_data_user => get_data_user, done_user => done_user, return_code_user => return_code_user, -- Sample Info si_sample_state_user => si_sample_state_user, si_view_state_user => si_view_state_user, si_instance_state_user => si_instance_state_user, si_source_timestamp_user => si_source_timestamp_user, si_instance_handle_user => si_instance_handle_user, si_publication_handle_user => si_publication_handle_user, si_disposed_generation_count_user => si_disposed_generation_count_user, si_no_writers_generation_count_user => si_no_writers_generation_count_user, si_sample_rank_user => si_sample_rank_user, si_generation_rank_user => si_generation_rank_user, si_absolute_generation_rank_user => si_absolute_generation_rank_user, si_valid_data_user => si_valid_data_user, si_valid_user => si_valid_user, si_ack_user => si_ack_user, eoc_user => eoc_user, -- Communication Status status_user => status_user, decode_error => open, -- ###GENERATED START### id => id, a => a, -- ###GENERATED END### valid => valid ); dds_reader_r_inst : entity Testbench_Lib3.dds_reader(arch) generic map ( ID => 0, PAYLOAD_FRAME_SIZE => MAX_TYPE1_SIZE, MAX_SAMPLES => int(5,CDR_LONG_WIDTH), MAX_INSTANCES => int(5,CDR_LONG_WIDTH) ) port map ( -- SYSTEM clk => clk, reset => reset, time => time, -- FROM RTPS ENDPOINT start_rtps => start_dds_rtps, opcode_rtps => opcode_dds_rtps, ack_rtps => ack_dds_rtps, done_rtps => done_dds_rtps, ret_rtps => ret_dds_rtps, data_in_rtps => data_in_dds_rtps, valid_in_rtps => valid_in_dds_rtps, ready_in_rtps => ready_in_dds_rtps, last_word_in_rtps => last_word_in_dds_rtps, -- TO USER ENTITY start_dds => start_wr_dds, ack_dds => ack_wr_dds, opcode_dds => opcode_wr_dds, instance_state_dds => instance_state_wr_dds, view_state_dds => view_state_wr_dds, sample_state_dds => sample_state_wr_dds, instance_handle_dds => instance_handle_wr_dds, max_samples_dds => max_samples_wr_dds, get_data_dds => get_data_wr_dds, done_dds => done_wr_dds, return_code_dds => return_code_wr_dds, ready_out_dds => ready_in_wr_dds, valid_out_dds => valid_in_wr_dds, data_out_dds => data_in_wr_dds, last_word_out_dds => last_word_in_wr_dds, -- Sample Info si_sample_state => si_sample_rank_wr_dds, si_view_state => si_view_state_wr_dds, si_instance_state => si_instance_state_wr_dds, si_source_timestamp => si_source_timestamp_wr_dds, si_instance_handle => si_instance_handle_wr_dds, si_publication_handle => si_publication_handle_wr_dds, si_disposed_generation_count => si_disposed_generation_count_wr_dds, si_no_writers_generation_count => si_no_writers_generation_count_wr_dds, si_sample_rank => si_sample_rank_wr_dds, si_generation_rank => si_generation_rank_wr_dds, si_absolute_generation_rank => si_absolute_generation_rank_wr_dds, si_valid_data => si_valid_data_wr_dds, si_valid => si_valid_wr_dds, si_ack => si_ack_wr_dds, eoc => eoc_wr_dds, -- Communication Status status => status_wr_dds ); rtps_reader_r_inst : entity Testbench_Lib3.rtps_reader(arch) generic map ( ID => 0, MAX_REMOTE_ENDPOINTS => 5 ) port map ( -- SYSTEM clk => clk, reset => reset, time => time, -- FROM RTPS_HANDLER (USER TRAFFIC) empty_user => empty_rh(0), rd_user => rd_rh(0), data_in_user => data_out_rh(0)(WORD_WIDTH-1 downto 0), last_word_in_user => data_out_rh(0)(WORD_WIDTH), -- FROM RTPS_BUILTIN_ENDPOINT (META TRAFFIC) empty_meta => empty_rtps(0), rd_meta => rd_rtps(0), data_in_meta => data_out_rtps(0)(WORD_WIDTH-1 downto 0), last_word_in_meta => data_out_rtps(0)(WORD_WIDTH), -- RTPS OUTPUT wr_ro => wr_rtps_out(0), full_ro => full_rtps_out(0), data_out_ro => data_in_rtps_out(0)(WORD_WIDTH-1 downto 0), last_word_out_ro => data_in_rtps_out(0)(WORD_WIDTH), -- TO HISTORY CACHE start_hc => start_dds_rtps, opcode_hc => opcode_dds_rtps, ack_hc => ack_dds_rtps, done_hc => done_dds_rtps, ret_hc => ret_dds_rtps, data_out_hc => data_in_dds_rtps, valid_out_hc => valid_in_dds_rtps, ready_out_hc => ready_in_dds_rtps, last_word_out_hc => last_word_in_dds_rtps ); rtps_builtin_endpoint_r_inst : entity Testbench_Lib3.rtps_builtin_endpoint(arch) generic map ( MAX_REMOTE_PARTICIPANTS => 5 ) port map ( clk => clk, reset => reset, time => time, -- FROM RTPS HANDLER empty => empty_rh(NUM_ENDPOINTS), rd => rd_rh(NUM_ENDPOINTS), data_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0), last_word_in => data_out_rh(NUM_ENDPOINTS)(WORD_WIDTH), -- FROM USER ENDPOINTS alive => alive_sig_rtps(0 to NUM_ENDPOINTS-1), -- TO USER ENDPOINTS full_ue => full_rtps(0 to NUM_ENDPOINTS-1), wr_ue => wr_rtps(0 to NUM_ENDPOINTS-1), data_out_ue => data_out_rbe, last_word_out_ue => last_word_out_rbe, -- TO RTPS OUT full_ro => full_rtps_out(NUM_ENDPOINTS), wr_ro => wr_rtps_out(NUM_ENDPOINTS), data_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH-1 downto 0), last_word_out_ro => data_in_rtps_out(NUM_ENDPOINTS)(WORD_WIDTH) ); data_in_rtps(0 to NUM_ENDPOINTS-1) <= (others => (last_word_out_rbe & data_out_rbe)); rtps_handler_r_inst : entity Testbench_Lib3.rtps_handler(arch) port map ( -- SYSTEM clk => clk, reset => reset, -- INPUT empty => empty, rd => rd, data_in => data_in, -- TO RTPS BUILTIN ENDPOINT full_be => full_rh(NUM_ENDPOINTS), wr_be => wr_rh(NUM_ENDPOINTS), data_out_be => data_out_rh_be_s, last_word_out_be => last_word_out_rh_be_s, -- TO RTPS ENDPOINT full_ue => full_rh(0 to NUM_ENDPOINTS-1), wr_ue => wr_rh(0 to NUM_ENDPOINTS-1), data_out_ue => data_out_rh_ue_s, last_word_out_ue => last_word_out_rh_ue_s ); data_in_rh <= (NUM_ENDPOINTS => (last_word_out_rh_be_s & data_out_rh_be_s), others => (last_word_out_rh_ue_s & data_out_rh_ue_s)); rtps_out_r_inst : entity Testbench_Lib3.rtps_out(arch) port map ( clk => clk, reset => reset, -- INPUT data_in => data_rtps_out_s, last_word_in => last_word_rtps_out_s, rd => rd_rtps_out, empty => empty_rtps_out, -- OUTPUT data_out => data_out, wr => wr, full => full ); rh_fifo_gen : for i in 0 to NUM_ENDPOINTS generate begin fifo_inst : entity Testbench_Lib3.FWFT_FIFO(arch) generic map ( FIFO_DEPTH => 2, DATA_WIDTH => WORD_WIDTH+1 ) port map ( reset => reset, clk => clk, data_in => data_in_rh(i), write => wr_rh(i), read => rd_rh(i), data_out => data_out_rh(i), empty => empty_rh(i), full => full_rh(i), free => open ); end generate; rtps_out_fifo_gen : for i in 0 to NUM_ENDPOINTS generate begin fifo_inst : entity Testbench_Lib3.FWFT_FIFO(arch) generic map ( FIFO_DEPTH => 2, DATA_WIDTH => WORD_WIDTH+1 ) port map ( reset => reset, clk => clk, data_in => data_in_rtps_out(i), write => wr_rtps_out(i), read => rd_rtps_out(i), data_out => data_out_rtps_out(i), empty => empty_rtps_out(i), full => full_rtps_out(i), free => open ); data_rtps_out_s(i) <= data_out_rtps_out(i)(WORD_WIDTH-1 downto 0); last_word_rtps_out_s(i) <= data_out_rtps_out(i)(WORD_WIDTH); end generate; rtps_fifo_gen : for i in 0 to NUM_ENDPOINTS-1 generate begin fifo_inst : entity Testbench_Lib3.FWFT_FIFO(arch) generic map ( FIFO_DEPTH => 2, DATA_WIDTH => WORD_WIDTH+1 ) port map ( reset => reset, clk => clk, data_in => data_in_rtps(i), write => wr_rtps(i), read => rd_rtps(i), data_out => data_out_rtps(i), empty => empty_rtps(i), full => full_rtps(i), free => open ); end generate; end architecture;