Skip to content
Snippets Groups Projects
Commit 200a14a9 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Verify requested dump page range.

parent 317389b7
Branches
No related tags found
1 merge request!444Resolve L2SDP-1087 "B"
Pipeline #116275 passed
......@@ -97,9 +97,10 @@ entity tb_lofar2_unb2c_sdp_station_tbuf_one is
g_rs_record_nof_block : natural := 10;
g_rs_nof_periods_per_block : real := 1.17; -- number of WG periods per rs_block for WG in g_sp
g_dump_inter_packet_gap : natural := 0;
g_dump_page_offset : natural := 0; -- offset relative to recorded_first_page
g_dump_nof_pages : natural := 2; -- <= c_nof_pages_in_buffer
g_dump_enables : std_logic_vector(c_sdp_A_pn - 1 downto 0) := "000001"
g_dump_page_offset : natural := 1; -- offset relative to recorded_first_page
g_dump_nof_pages : natural := 2; -- g_dump_page_offset + g_dump_nof_pages <= c_nof_pages_in_buffer, else
-- there will occur read RSN errors for pages that are not available
g_dump_enables : std_logic_vector(c_sdp_A_pn - 1 downto 0) := "000010"
);
port (
tb_end : out std_logic
......@@ -157,9 +158,10 @@ architecture tb of tb_lofar2_unb2c_sdp_station_tbuf_one is
constant c_page_meta_size : natural := func_sdp_tbuf_calculate_page_meta_size(g_rs_block_size);
constant c_page_size : natural := c_page_data_size + c_page_meta_size;
constant c_nof_pages_in_buffer : natural := func_sdp_tbuf_calculate_nof_pages(c_ddr_buffer_size, c_page_size);
constant c_dump_nof_pages : natural := smallest(g_dump_nof_pages, c_nof_pages_in_buffer);
constant c_dump_nof_pages_rw : natural := g_dump_nof_pages;
constant c_dump_nof_pages_actual : natural := smallest(g_dump_nof_pages, c_nof_pages_in_buffer);
constant c_bs_start_latency : natural := c_bs_block_size * 2;
constant c_record_min_nof_pages : natural := g_dump_page_offset + c_dump_nof_pages;
constant c_record_min_nof_pages : natural := g_dump_page_offset + c_dump_nof_pages_rw;
constant c_record_min_nof_clk : natural := c_bs_start_latency + g_rs_block_size * c_record_min_nof_pages;
constant c_exp_read_rate_Gbps : real := func_sdp_tbuf_dump_rate_bps(g_rs_block_size, g_dump_inter_packet_gap) /
......@@ -169,8 +171,8 @@ architecture tb of tb_lofar2_unb2c_sdp_station_tbuf_one is
constant c_dump_nof_ai : natural := vector_sum(g_dump_enables);
constant c_dump_ai_indices : t_nat_integer_arr(g_dump_enables'range) := vector_one_indices(g_dump_enables);
constant c_read_nof_packets_per_ai : natural := c_dump_nof_pages;
constant c_read_total_nof_packets : natural := c_dump_nof_ai * c_dump_nof_pages;
constant c_read_nof_packets_per_ai : natural := c_dump_nof_pages_actual;
constant c_read_total_nof_packets : natural := c_dump_nof_ai * c_dump_nof_pages_actual;
constant c_read_nof_crc_errors : natural := sel_a_b(g_verify_crc_error, c_read_total_nof_packets, 0);
constant c_read_nof_rsn_errors : natural := sel_a_b(c_verify_err, c_read_total_nof_packets, 0);
constant c_dump_nof_packets_per_ai : natural := sel_a_b(c_verify_err, 0, c_read_nof_packets_per_ai);
......@@ -893,13 +895,15 @@ begin
variable v_End : natural;
variable v_Period : real := 0.0;
variable v_dump_rate_Gbps : real := 0.0;
variable v_dump_start_page : natural;
variable v_dump_start_rsn : std_logic_vector(c_sdp_W_rsn - 1 downto 0);
begin
-- Init tbuf_registers_wr record
tbuf_registers_wr.record_all <= '1'; -- 2
tbuf_registers_wr.record_enable <= '1'; -- 3
tbuf_registers_wr.dump_inter_packet_gap <= g_dump_inter_packet_gap; -- 11
tbuf_registers_wr.dump_start_page <= 0; -- 12
tbuf_registers_wr.dump_nof_pages <= c_dump_nof_pages; -- 13
tbuf_registers_wr.dump_nof_pages <= c_dump_nof_pages_rw; -- 13
tbuf_registers_wr.dump_start_rsn <= (others => 'X'); -- 14
tbuf_registers_wr.dump_enables <= (others => '0'); -- 16
......@@ -970,7 +974,7 @@ begin
-- Read TBuf state
mmf_mm_bus_rd(c_mm_file_reg_tbuf, 19, rd_data_state, tb_clk);
proc_common_wait_some_cycles(tb_clk, 1);
v_bool := func_sdp_tbuf_print_state(rd_data_state);
v_bool := func_sdp_tbuf_print_state(c_tb_str, rd_data_state);
-- Recording
proc_common_wait_some_cycles(ext_clk, g_rs_block_size * g_rs_record_nof_block);
......@@ -1125,14 +1129,22 @@ begin
c_mm_clk_period, c_ext_clk_period, c_common_cross_clock_domain_latency * 2);
-- Set dump interval and antenna inputs
-- . when g_verify_crc_error then read from last g_dump_nof_pages in the buffer. These pages still contain 0
-- . when g_verify_crc_error then read from last c_dump_nof_pages_rw in the buffer. These pages still contain 0,
-- because they have not been recorded, so these will yield a CRC error (and also a RSN error) for each page.
v_dump_start_page := tbuf_registers_ro.recorded_first_page + g_dump_page_offset;
if v_dump_start_page >= c_nof_pages_in_buffer then
-- Wrap from begin of buffer when v_dump_start_page is just beyond the end of buffer. Do not use modulo
-- c_nof_pages_in_buffer to be able to simulate effect of a much to large v_dump_start_page due to
-- g_dump_page_offset >= c_nof_pages_in_buffer
v_dump_start_page := v_dump_start_page - c_nof_pages_in_buffer;
end if;
tbuf_registers_wr.dump_start_page <= sel_a_b(g_verify_crc_error,
c_nof_pages_in_buffer - g_dump_nof_pages,
tbuf_registers_ro.recorded_first_page + g_dump_page_offset);
c_nof_pages_in_buffer - c_dump_nof_pages_rw,
v_dump_start_page);
-- . when g_verify_rsn_error then write a wrong dump_start_rsn.
tbuf_registers_wr.dump_start_rsn <= incr_uvec(tbuf_registers_ro.recorded_first_rsn,
g_dump_page_offset * g_rs_block_size + to_int(g_verify_rsn_error));
v_dump_start_rsn := incr_uvec(tbuf_registers_ro.recorded_first_rsn, g_dump_page_offset * g_rs_block_size);
v_dump_start_rsn := incr_uvec(v_dump_start_rsn, to_int(g_verify_rsn_error));
tbuf_registers_wr.dump_start_rsn <= v_dump_start_rsn;
tbuf_registers_wr.dump_enables <= g_dump_enables;
proc_common_wait_some_cycles(tb_clk, 1);
mmf_mm_bus_wr(c_mm_file_reg_tbuf, 12, tbuf_registers_wr.dump_start_page, tb_clk);
......
......@@ -20,8 +20,11 @@
-- Purpose: Regression multi tb for tb_lofar2_unb2c_sdp_station_tbuf_one
-- Description:
-- Usage:
-- . Modelsim:
-- > as 4
-- > run -all
-- . Terminal:
-- > cat transcript | grep Error:
library IEEE, common_lib;
use IEEE.std_logic_1164.all;
......@@ -96,6 +99,16 @@ begin
generic map(false, 7, false, false, false, false, 3, 100, 4096, 2000, 3, 1.17, 50, 0, 1, "000011")
port map (tb_end_vec(7));
-- g_dump_nof_pages = 10 > c_nof_pages_in_buffer = 7
u_dump_nof_pages_limit : entity work.tb_lofar2_unb2c_sdp_station_tbuf_one
generic map(false, 8, false, false, false, false, 3, 100, 256, 100, 10, 1.17, 0, 0, 10, "000010")
port map (tb_end_vec(8));
-- g_dump_page_offset + g_dump_nof_pages = 6 + 1 = c_nof_pages_in_buffer = 7
u_dump_page_offset_limit : entity work.tb_lofar2_unb2c_sdp_station_tbuf_one
generic map(false, 9, false, false, false, false, 3, 100, 256, 100, 10, 1.17, 0, 6, 1, "000010")
port map (tb_end_vec(9));
tb_end <= '1' after 1 us when tb_end_vec = c_tb_end_vec else '0';
proc_common_stop_simulation(tb_end);
end tb;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment