diff --git a/libraries/base/dp/src/vhdl/dp_offload_rx.vhd b/libraries/base/dp/src/vhdl/dp_offload_rx.vhd index 20f57ae4b2a8daa417120500f2e9ceeb9d99d7d7..37fe038a0f9641d39c805dea801b4abba307403b 100644 --- a/libraries/base/dp/src/vhdl/dp_offload_rx.vhd +++ b/libraries/base/dp/src/vhdl/dp_offload_rx.vhd @@ -51,7 +51,8 @@ ENTITY dp_offload_rx IS src_out_arr : OUT t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0); src_in_arr : IN t_dp_siso_arr(g_nof_streams-1 DOWNTO 0); - hdr_fields_out_arr : OUT t_slv_1024_arr(g_nof_streams-1 DOWNTO 0) --Valid at src_out_arr(i).sop. + hdr_fields_out_arr : OUT t_slv_1024_arr(g_nof_streams-1 DOWNTO 0); -- Valid at src_out_arr(i).sop, use for sosi.sync + hdr_fields_raw_arr : OUT t_slv_1024_arr(g_nof_streams-1 DOWNTO 0) -- Valid at src_out_arr(i).sop and beyond, use for sosi.bsn ); END dp_offload_rx; @@ -187,11 +188,13 @@ BEGIN nxt_reg_dp_field_blk_slv_out(i) <= dp_field_blk_slv_out(i) WHEN dp_field_blk_slv_out_val(i) = '1' ELSE reg_dp_field_blk_slv_out(i); END GENERATE; - -- Put the fields on the entity output at src_out.sop + -- Put the fields that can only be active at sop on the entity output at src_out.sop (e.g. sosi sync field) gen_hdr_fields_out_arr : FOR i IN 0 TO g_nof_streams-1 GENERATE hdr_fields_out_arr(i) <= reg_dp_field_blk_slv_out(i) WHEN dp_tail_remove_src_out_arr(i).sop='1' ELSE (OTHERS=>'0'); END GENERATE; - + -- Put the fields that can be valid during entire packet on the entity combinatorially (e.g. all sosi slv fields) + hdr_fields_raw_arr <= reg_dp_field_blk_slv_out; + --------------------------------------------------------------------------------------- -- MM control & monitoring --------------------------------------------------------------------------------------- diff --git a/libraries/base/dp/tb/vhdl/tb_dp_concat_field_blk.vhd b/libraries/base/dp/tb/vhdl/tb_dp_concat_field_blk.vhd index ad87a38771c6fcea2ddd8c4d9a751b24e0eb8766..5a9c6de0ca693e18626390c20aa1e11b230a0013 100644 --- a/libraries/base/dp/tb/vhdl/tb_dp_concat_field_blk.vhd +++ b/libraries/base/dp/tb/vhdl/tb_dp_concat_field_blk.vhd @@ -151,6 +151,7 @@ ARCHITECTURE tb OF tb_dp_concat_field_blk IS SIGNAL dp_offload_rx_src_in_arr : t_dp_siso_arr(0 DOWNTO 0); SIGNAL rx_hdr_fields_out_arr : t_slv_1024_arr(0 DOWNTO 0); + SIGNAL rx_hdr_fields_raw_arr : t_slv_1024_arr(0 DOWNTO 0); SIGNAL reg_dp_offload_rx_hdr_dat_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL reg_dp_offload_rx_hdr_dat_miso : t_mem_miso; @@ -243,7 +244,7 @@ BEGIN -- . after the test verify_last_snk_in_evt.sync <= last_snk_in_evt; - verify_last_snk_in_evt.bsn <= '0'; -- in rx_hdr_fields_out_arr from dp_offload_rx output the bsn is only valid at sop + verify_last_snk_in_evt.bsn <= last_snk_in_evt; -- thanks to using rx_hdr_fields_raw_arr for bsn field verify_last_snk_in_evt.data <= last_snk_in_evt; verify_last_snk_in_evt.re <= '0'; verify_last_snk_in_evt.im <= '0'; @@ -374,14 +375,15 @@ BEGIN src_out_arr => dp_offload_rx_src_out_arr, src_in_arr => dp_offload_rx_src_in_arr, - hdr_fields_out_arr => rx_hdr_fields_out_arr + hdr_fields_out_arr => rx_hdr_fields_out_arr, + hdr_fields_raw_arr => rx_hdr_fields_raw_arr ); p_restore_sync_bsn : PROCESS(dp_offload_rx_src_out_arr, rx_hdr_fields_out_arr) BEGIN verify_snk_in <= dp_offload_rx_src_out_arr(0); verify_snk_in.sync <= sl(rx_hdr_fields_out_arr(0)(field_hi(c_udp_offload_hdr_field_arr, "dp_sync") DOWNTO field_lo(c_udp_offload_hdr_field_arr, "dp_sync" ))); - verify_snk_in.bsn <= RESIZE_UVEC(rx_hdr_fields_out_arr(0)(field_hi(c_udp_offload_hdr_field_arr, "dp_bsn" ) DOWNTO field_lo(c_udp_offload_hdr_field_arr, "dp_bsn" )), c_dp_stream_bsn_w); + verify_snk_in.bsn <= RESIZE_UVEC(rx_hdr_fields_raw_arr(0)(field_hi(c_udp_offload_hdr_field_arr, "dp_bsn" ) DOWNTO field_lo(c_udp_offload_hdr_field_arr, "dp_bsn" )), c_dp_stream_bsn_w); END PROCESS; dp_offload_rx_src_in_arr <= (OTHERS=>c_dp_siso_rdy);