diff --git a/applications/compaan/designs/compaan_unb1_10g_bg_db/src/vhdl/compaan_unb1_10g_bg_db.vhd b/applications/compaan/designs/compaan_unb1_10g_bg_db/src/vhdl/compaan_unb1_10g_bg_db.vhd index 05dafb030e743e4e12a08eb93074ab1975cb1093..aef09a6bac616ebe632c368708af351ff611a9c2 100644 --- a/applications/compaan/designs/compaan_unb1_10g_bg_db/src/vhdl/compaan_unb1_10g_bg_db.vhd +++ b/applications/compaan/designs/compaan_unb1_10g_bg_db/src/vhdl/compaan_unb1_10g_bg_db.vhd @@ -119,8 +119,8 @@ ARCHITECTURE str OF compaan_unb1_10g_bg_db IS -- Block generator CONSTANT c_bg_addr_w : NATURAL := 9; CONSTANT c_bg_block_size : NATURAL := 8; - CONSTANT c_bg_gapsize : NATURAL := 9*c_bg_block_size; -- Full (no gaps in data) BG output rate = 200MHz * 32b = 6.4Gbps. Including gap size: (2200/(2200+19800))*6.4Gbps=640Mbps. - CONSTANT c_bg_blocks_per_sync : NATURAL := sel_a_b(g_sim, 10, 200000); -- 200000*(900+100) = 200000000 cycles = 1 second + CONSTANT c_bg_gapsize : NATURAL := 3000; -- Full (no gaps in data) BG output rate = 200MHz * 32b = 6.4Gbps. Including gap size: (2200/(2200+19800))*6.4Gbps=640Mbps. + CONSTANT c_bg_blocks_per_sync : NATURAL := 200000; CONSTANT c_bg_ctrl : t_diag_block_gen := ('0', -- enable '0', -- enable_sync TO_UVEC( c_bg_block_size, c_diag_bg_samples_per_packet_w), @@ -130,7 +130,7 @@ ARCHITECTURE str OF compaan_unb1_10g_bg_db IS TO_UVEC( c_bg_block_size-1, c_diag_bg_mem_high_adrs_w), TO_UVEC( 0, c_diag_bg_bsn_init_w)); - -- dp_offload_tx + -- dp_offload_tx -- . IP total length : 2948 (UDP total lenth) + 20 (Ip header length) = 2968 -- . UDP total length: 8 (UDP header) + 20 (usr header) + 2920 (payload bytes) = 2948 -- 1488 CONSTANT c_ip_length : NATURAL := c_bg_block_size*8 + 50; --2970; @@ -169,9 +169,9 @@ ARCHITECTURE str OF compaan_unb1_10g_bg_db IS - CONSTANT c_bypass_rx_filter : BOOLEAN := FALSE; + CONSTANT c_bypass_rx_filter : BOOLEAN := TRUE; - CONSTANT c_hdr_field_ovr_init : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "111"&"111111111111"&"0011"&"101111111"&"0"; + CONSTANT c_hdr_field_ovr_init : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "111"&"111111111111"&"0011"&"001111111"&"0"; CONSTANT c_fifo_size : NATURAL := 2*c_bg_block_size; @@ -185,7 +185,7 @@ ARCHITECTURE str OF compaan_unb1_10g_bg_db IS CONSTANT c_nof_crc_words : NATURAL := 0; CONSTANT c_max_nof_words_per_block : NATURAL := c_bg_block_size; CONSTANT c_min_nof_words_per_block : NATURAL := 1; - CONSTANT c_def_nof_words_per_block : NATURAL := sel_a_b(c_use_1GbE, c_def_1GbE_block_size, c_bg_block_size); + CONSTANT c_def_nof_words_per_block : NATURAL := 8; CONSTANT c_def_nof_blocks_per_packet : NATURAL := 1; SIGNAL hdr_fields_in_arr : t_slv_1024_arr(c_nof_streams-1 DOWNTO 0); @@ -278,6 +278,8 @@ ARCHITECTURE str OF compaan_unb1_10g_bg_db IS SIGNAL dp_offload_tx_src_out_arr : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0); SIGNAL dp_offload_tx_src_in_arr : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0); + + SIGNAL dp_offload_rx_restored_src_out_arr : t_dp_sosi_arr(c_nof_10GbE_streams-1 DOWNTO 0) := (OTHERS=> c_dp_sosi_rst); SIGNAL dp_offload_rx_snk_in_arr : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0); SIGNAL dp_offload_rx_snk_out_arr : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0); @@ -448,9 +450,15 @@ BEGIN gen_dp_fifo_sc : FOR i IN 0 TO c_nof_streams-1 GENERATE u_dp_fifo_sc : ENTITY dp_lib.dp_fifo_sc - GENERIC MAP ( - g_data_w => c_data_w, - g_fifo_size => 3*c_bg_block_size + GENERIC MAP ( + g_bsn_w => c_dp_stream_bsn_w, + g_use_bsn => TRUE, + g_use_empty => TRUE, + g_use_channel => TRUE, + g_use_error => TRUE, + g_use_sync => TRUE, + g_data_w => c_data_w, + g_fifo_size => 3*c_bg_block_size ) PORT MAP ( rst => dp_rst, @@ -470,7 +478,7 @@ BEGIN ----------------------------------------------------------------------------- u_dp_offload_tx : ENTITY dp_lib.dp_offload_tx GENERIC MAP ( - g_nof_streams => c_nof_streams, + g_nof_streams => c_nof_10GbE_streams, g_data_w => c_data_w, g_use_complex => FALSE, -- g_max_nof_words_per_block => c_max_nof_words_per_block, @@ -516,8 +524,8 @@ BEGIN hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "udp_src_port" ) DOWNTO field_lo(c_hdr_field_arr, "udp_src_port" )) <= TO_UVEC(4000+i, 16); hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "udp_dst_port" ) DOWNTO field_lo(c_hdr_field_arr, "udp_dst_port" )) <= TO_UVEC(4000+i, 16); - hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_sync" ) DOWNTO field_lo(c_hdr_field_arr, "usr_sync" )) <= slv(block_gen_src_out_arr(i).sync); - hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_bsn" ) DOWNTO field_lo(c_hdr_field_arr, "usr_bsn" )) <= block_gen_src_out_arr(i).bsn(59 DOWNTO 0); + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_sync" ) DOWNTO field_lo(c_hdr_field_arr, "usr_sync" )) <= slv(dp_offload_tx_snk_in_arr(i).sync); + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_bsn" ) DOWNTO field_lo(c_hdr_field_arr, "usr_bsn" )) <= dp_offload_tx_snk_in_arr(i).bsn(59 DOWNTO 0); hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_hdr_word_align") DOWNTO field_lo(c_hdr_field_arr, "usr_hdr_word_align" )) <= TO_UVEC(0, 16); hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "ip_total_length" ) DOWNTO field_lo(c_hdr_field_arr, "ip_total_length" )) <= TO_UVEC(c_ip_length, 16); @@ -552,10 +560,22 @@ BEGIN hdr_fields_out_arr => hdr_fields_out_arr ); + + -- Restore the sync and bsn signals to the offload_rx output + gen_restore_sync_bsn : FOR i IN 0 TO c_nof_10GbE_streams-1 GENERATE + dp_offload_rx_restored_src_out_arr(i).sync <= sl(hdr_fields_out_arr(i)(field_hi(c_hdr_field_arr, "usr_sync") DOWNTO field_lo(c_hdr_field_arr, "usr_sync" ))); + dp_offload_rx_restored_src_out_arr(i).bsn <= RESIZE_UVEC(hdr_fields_out_arr(i)(field_hi(c_hdr_field_arr, "usr_bsn" ) DOWNTO field_lo(c_hdr_field_arr, "usr_bsn" )), c_dp_stream_bsn_w); + + dp_offload_rx_restored_src_out_arr(i).data <= dp_offload_rx_src_out_arr(i).data; + dp_offload_rx_restored_src_out_arr(i).valid <= dp_offload_rx_src_out_arr(i).valid; + dp_offload_rx_restored_src_out_arr(i).sop <= dp_offload_rx_src_out_arr(i).sop; + dp_offload_rx_restored_src_out_arr(i).eop <= dp_offload_rx_src_out_arr(i).eop; + dp_offload_rx_restored_src_out_arr(i).err <= dp_offload_rx_src_out_arr(i).err; + END GENERATE; + ------------------------- --WORK IN PROGRESS ------------------------- - PROCESS(hdr_fields_in_arr) BEGIN hdr_fields_in_rx_arr <= hdr_fields_in_arr; @@ -584,7 +604,7 @@ BEGIN reg_dp_offload_rx_filter_hdr_fields_mosi => reg_dp_offload_rx_filter_hdr_fields_mosi, reg_dp_offload_rx_filter_hdr_fields_miso => reg_dp_offload_rx_filter_hdr_fields_miso, - snk_in_arr => dp_offload_rx_src_out_arr, + snk_in_arr => dp_offload_rx_restored_src_out_arr, snk_out_arr => dp_offload_rx_src_in_arr, src_out_arr => dp_offload_rx_filter_src_out_arr, @@ -625,7 +645,7 @@ BEGIN bsn_monitor_snk_in_arr(2) <= dp_offload_rx_snk_in_arr(0); bsn_monitor_snk_out_arr(2) <= dp_offload_rx_snk_out_arr(0); - bsn_monitor_snk_in_arr(3) <= dp_offload_rx_src_out_arr(0); + bsn_monitor_snk_in_arr(3) <= dp_offload_rx_restored_src_out_arr(0); bsn_monitor_snk_out_arr(3) <= dp_offload_rx_src_in_arr(0); bsn_monitor_snk_in_arr(4) <= block_gen_src_out_arr(0); @@ -695,7 +715,7 @@ BEGIN dp_rst => dp_rst, dp_clk => dp_clk, - dp_pps => OPEN, + dp_pps => dp_pps, dp_rst_in => dp_rst, dp_clk_in => dp_clk,