diff --git a/libraries/dsp/fft/tb/vhdl/tb_fft_r2_par.vhd b/libraries/dsp/fft/tb/vhdl/tb_fft_r2_par.vhd index 46f16dae5f28a860358fb16eba66c4f275c844b3..94cc2d6811aabde2996aee9eb747a65bd2dd4bf6 100644 --- a/libraries/dsp/fft/tb/vhdl/tb_fft_r2_par.vhd +++ b/libraries/dsp/fft/tb/vhdl/tb_fft_r2_par.vhd @@ -151,16 +151,16 @@ architecture tb of tb_fft_r2_par is constant c_out_dat_w : natural := g_fft.out_dat_w; -- Data file access - constant c_nof_lines_header : natural := 2; - constant c_nof_lines_a_wg_dat : natural := g_data_file_a_nof_lines; -- Real input A via in_re, one value per line - constant c_nof_lines_a_pfft_dat : natural := g_data_file_a_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) - constant c_nof_lines_a_header_wg : natural := c_nof_lines_header + c_nof_lines_a_wg_dat; - constant c_nof_lines_b_wg_dat : natural := g_data_file_b_nof_lines; -- Real input B via in_im, one value per line - constant c_nof_lines_b_pfft_dat : natural := g_data_file_b_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) - constant c_nof_lines_b_header_wg : natural := c_nof_lines_header + c_nof_lines_b_wg_dat; - constant c_nof_lines_c_wg_dat : natural := g_data_file_c_nof_lines; -- Complex input, two values per line (re, im) - constant c_nof_lines_c_pfft_dat : natural := g_data_file_c_nof_lines; -- Full spectrum, two values per line (re, im) - constant c_nof_lines_c_header_wg : natural := c_nof_lines_header + c_nof_lines_c_wg_dat; + constant c_nof_lines_header : natural := 2; + constant c_nof_lines_a_wg_dat : natural := g_data_file_a_nof_lines; -- Real input A via in_re, one value per line + constant c_nof_lines_a_pfft_dat : natural := g_data_file_a_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) + constant c_nof_lines_a_pfft_header : natural := c_nof_lines_header + c_nof_lines_a_wg_dat; + constant c_nof_lines_b_wg_dat : natural := g_data_file_b_nof_lines; -- Real input B via in_im, one value per line + constant c_nof_lines_b_pfft_dat : natural := g_data_file_b_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) + constant c_nof_lines_b_pfft_header : natural := c_nof_lines_header + c_nof_lines_b_wg_dat; + constant c_nof_lines_c_wg_dat : natural := g_data_file_c_nof_lines; -- Complex input, two values per line (re, im) + constant c_nof_lines_c_pfft_dat : natural := g_data_file_c_nof_lines; -- Full spectrum, two values per line (re, im) + constant c_nof_lines_c_pfft_header : natural := c_nof_lines_header + c_nof_lines_c_wg_dat; constant c_gap_factor : natural := sel_a_b(g_enable_in_val_gaps, 3, 1); @@ -442,15 +442,15 @@ begin begin -- read expected output data from file if c_in_complex then - proc_common_read_integer_file(g_data_file_c, c_nof_lines_c_header_wg, g_data_file_nof_lines, c_nof_complex, expected_data_c_arr); + proc_common_read_integer_file(g_data_file_c, c_nof_lines_c_pfft_header, g_data_file_nof_lines, c_nof_complex, expected_data_c_arr); wait for 1 ns; for I in 0 to g_data_file_nof_lines-1 loop expected_data_c_re_arr(I) <= expected_data_c_arr(2*I); expected_data_c_im_arr(I) <= expected_data_c_arr(2*I+1); end loop; else - proc_common_read_integer_file(g_data_file_a, c_nof_lines_a_header_wg, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_a_arr); - proc_common_read_integer_file(g_data_file_b, c_nof_lines_b_header_wg, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_b_arr); + proc_common_read_integer_file(g_data_file_a, c_nof_lines_a_pfft_header, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_a_arr); + proc_common_read_integer_file(g_data_file_b, c_nof_lines_b_pfft_header, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_b_arr); wait for 1 ns; for I in 0 to g_data_file_nof_lines/c_nof_complex-1 loop expected_data_a_re_arr(I) <= expected_data_a_arr(2*I); diff --git a/libraries/dsp/fft/tb/vhdl/tb_fft_r2_pipe.vhd b/libraries/dsp/fft/tb/vhdl/tb_fft_r2_pipe.vhd index f49f45d495d720304ab8977f8da27dae5947812b..7a44a58eb816c9ece0c44ca69a0ab6474e14b172 100644 --- a/libraries/dsp/fft/tb/vhdl/tb_fft_r2_pipe.vhd +++ b/libraries/dsp/fft/tb/vhdl/tb_fft_r2_pipe.vhd @@ -186,16 +186,16 @@ architecture tb of tb_fft_r2_pipe is constant c_out_dat_w : natural := g_fft.out_dat_w; -- Data file access - constant c_nof_lines_header : natural := 2; - constant c_nof_lines_a_wg_dat : natural := g_data_file_a_nof_lines; -- Real input A via in_re, one value per line - constant c_nof_lines_a_pfft_dat : natural := g_data_file_a_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) - constant c_nof_lines_a_header_wg : natural := c_nof_lines_header + c_nof_lines_a_wg_dat; - constant c_nof_lines_b_wg_dat : natural := g_data_file_b_nof_lines; -- Real input B via in_im, one value per line - constant c_nof_lines_b_pfft_dat : natural := g_data_file_b_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) - constant c_nof_lines_b_header_wg : natural := c_nof_lines_header + c_nof_lines_b_wg_dat; - constant c_nof_lines_c_wg_dat : natural := g_data_file_c_nof_lines; -- Complex input, two values per line (re, im) - constant c_nof_lines_c_pfft_dat : natural := g_data_file_c_nof_lines; -- Full spectrum, two values per line (re, im) - constant c_nof_lines_c_header_wg : natural := c_nof_lines_header + c_nof_lines_c_wg_dat; + constant c_nof_lines_header : natural := 2; + constant c_nof_lines_a_wg_dat : natural := g_data_file_a_nof_lines; -- Real input A via in_re, one value per line + constant c_nof_lines_a_pfft_dat : natural := g_data_file_a_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) + constant c_nof_lines_a_pfft_header : natural := c_nof_lines_header + c_nof_lines_a_wg_dat; + constant c_nof_lines_b_wg_dat : natural := g_data_file_b_nof_lines; -- Real input B via in_im, one value per line + constant c_nof_lines_b_pfft_dat : natural := g_data_file_b_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) + constant c_nof_lines_b_pfft_header : natural := c_nof_lines_header + c_nof_lines_b_wg_dat; + constant c_nof_lines_c_wg_dat : natural := g_data_file_c_nof_lines; -- Complex input, two values per line (re, im) + constant c_nof_lines_c_pfft_dat : natural := g_data_file_c_nof_lines; -- Full spectrum, two values per line (re, im) + constant c_nof_lines_c_pfft_header : natural := c_nof_lines_header + c_nof_lines_c_wg_dat; -- signal definitions signal tb_end : std_logic := '0'; @@ -393,15 +393,15 @@ begin begin -- read expected output data from file if c_in_complex then - proc_common_read_integer_file(g_data_file_c, c_nof_lines_c_header_wg, g_data_file_nof_lines, c_nof_complex, expected_data_c_arr); + proc_common_read_integer_file(g_data_file_c, c_nof_lines_c_pfft_header, g_data_file_nof_lines, c_nof_complex, expected_data_c_arr); wait for 1 ns; for I in 0 to g_data_file_nof_lines-1 loop expected_data_c_re_arr(I) <= expected_data_c_arr(2*I); expected_data_c_im_arr(I) <= expected_data_c_arr(2*I+1); end loop; else - proc_common_read_integer_file(g_data_file_a, c_nof_lines_a_header_wg, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_a_arr); - proc_common_read_integer_file(g_data_file_b, c_nof_lines_b_header_wg, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_b_arr); + proc_common_read_integer_file(g_data_file_a, c_nof_lines_a_pfft_header, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_a_arr); + proc_common_read_integer_file(g_data_file_b, c_nof_lines_b_pfft_header, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_b_arr); wait for 1 ns; for I in 0 to g_data_file_nof_lines/c_nof_complex-1 loop expected_data_a_re_arr(I) <= expected_data_a_arr(2*I); diff --git a/libraries/dsp/fft/tb/vhdl/tb_fft_r2_wide.vhd b/libraries/dsp/fft/tb/vhdl/tb_fft_r2_wide.vhd index 1c12d9175901d397f9a95062bf9881093f78429f..f632328fb3e07e270037f064aa32f9e24f36ff3d 100644 --- a/libraries/dsp/fft/tb/vhdl/tb_fft_r2_wide.vhd +++ b/libraries/dsp/fft/tb/vhdl/tb_fft_r2_wide.vhd @@ -30,9 +30,10 @@ -- a combination of fft_r2_pipe and fft_r2_par. -- The fft_r2_wide does support use_reorder. -- The fft_r2_wide does support use_separate. --- The fft_r2_wide does support nof_chan>0. -- The fft_r2_wide does support input flow control with invalid gaps in the -- input. +-- The fft_r2_wide only supports nof_chan=0, because the concept of channels +-- is void when wb_factor > 0. -- -- For more description see tb_fft_r2_pipe.vhd. -- @@ -144,7 +145,7 @@ architecture tb of tb_fft_r2_wide is constant c_use_fft_shift : boolean := false; constant c_fft_r2_check : boolean := fft_r2_parameter_asserts(g_fft, c_use_fft_shift); - constant c_nof_channels : natural := 1; + constant c_nof_channels : natural := 1; -- fixed g_fft.nof_chan=0, because the concept of channels is void when wb_factor > 1 constant c_nof_data_per_block : natural := g_fft.nof_points * c_nof_channels; constant c_nof_valid_per_block : natural := c_nof_data_per_block / g_fft.wb_factor; @@ -156,20 +157,21 @@ architecture tb of tb_fft_r2_wide is constant c_in_dat_w : natural := g_fft.in_dat_w; constant c_out_dat_w : natural := g_fft.out_dat_w; - -- Data file access - constant c_nof_lines_header : natural := 2; - constant c_nof_lines_a_wg_dat : natural := g_data_file_a_nof_lines; -- Real input A via in_re, one value per line - constant c_nof_lines_a_pfft_dat : natural := g_data_file_a_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) - constant c_nof_lines_a_header_wg : natural := c_nof_lines_header + c_nof_lines_a_wg_dat; - constant c_nof_lines_b_wg_dat : natural := g_data_file_b_nof_lines; -- Real input B via in_im, one value per line - constant c_nof_lines_b_pfft_dat : natural := g_data_file_b_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) - constant c_nof_lines_b_header_wg : natural := c_nof_lines_header + c_nof_lines_b_wg_dat; - constant c_nof_lines_c_wg_dat : natural := g_data_file_c_nof_lines; -- Complex input, two values per line (re, im) - constant c_nof_lines_c_pfft_dat : natural := g_data_file_c_nof_lines; -- Full spectrum, two values per line (re, im) - constant c_nof_lines_c_header_wg : natural := c_nof_lines_header + c_nof_lines_c_wg_dat; - - constant c_gap_factor : natural := sel_a_b(g_enable_in_val_gaps, 3, 1); - + -- Data file access (Header + WG data + PFFT data) + constant c_nof_lines_header : natural := 2; + constant c_nof_lines_a_wg_dat : natural := g_data_file_a_nof_lines; -- Real input A via in_re, one value per line + constant c_nof_lines_a_wg_header : natural := c_nof_lines_header; + constant c_nof_lines_a_pfft_dat : natural := g_data_file_a_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) + constant c_nof_lines_a_pfft_header : natural := c_nof_lines_header + c_nof_lines_a_wg_dat; + constant c_nof_lines_b_wg_dat : natural := g_data_file_b_nof_lines; -- Real input B via in_im, one value per line + constant c_nof_lines_b_wg_header : natural := c_nof_lines_header; + constant c_nof_lines_b_pfft_dat : natural := g_data_file_b_nof_lines/c_nof_complex; -- Half spectrum, two values per line (re, im) + constant c_nof_lines_b_pfft_header : natural := c_nof_lines_header + c_nof_lines_b_wg_dat; + constant c_nof_lines_c_wg_dat : natural := g_data_file_c_nof_lines; -- Complex input, two values per line (re, im) + constant c_nof_lines_c_wg_header : natural := c_nof_lines_header; + constant c_nof_lines_c_pfft_dat : natural := g_data_file_c_nof_lines; -- Full spectrum, two values per line (re, im) + constant c_nof_lines_c_pfft_header : natural := c_nof_lines_header + c_nof_lines_c_wg_dat; + -- signal definitions signal tb_end : std_logic := '0'; signal tb_end_almost : std_logic := '0'; @@ -280,10 +282,10 @@ begin begin -- read input data from file if c_in_complex then - proc_common_read_integer_file(g_data_file_c, c_nof_lines_header, g_data_file_nof_lines, c_nof_complex, input_data_c_arr); + proc_common_read_integer_file(g_data_file_c, c_nof_lines_c_wg_header, g_data_file_nof_lines, c_nof_complex, input_data_c_arr); else - proc_common_read_integer_file(g_data_file_a, c_nof_lines_header, g_data_file_nof_lines, 1, input_data_a_arr); - proc_common_read_integer_file(g_data_file_b, c_nof_lines_header, g_data_file_nof_lines, 1, input_data_b_arr); + proc_common_read_integer_file(g_data_file_a, c_nof_lines_a_wg_header, g_data_file_nof_lines, 1, input_data_a_arr); + proc_common_read_integer_file(g_data_file_b, c_nof_lines_b_wg_header, g_data_file_nof_lines, 1, input_data_b_arr); end if; wait for 1 ns; in_re_arr <= (others=>(others=>'0')); @@ -423,15 +425,15 @@ begin p_expected_output : process begin if c_in_complex then - proc_common_read_integer_file(g_data_file_c, c_nof_lines_c_header_wg, g_data_file_nof_lines, c_nof_complex, expected_data_c_arr); + proc_common_read_integer_file(g_data_file_c, c_nof_lines_c_pfft_header, g_data_file_nof_lines, c_nof_complex, expected_data_c_arr); wait for 1 ns; for I in 0 to g_data_file_nof_lines-1 loop expected_data_c_re_arr(I) <= expected_data_c_arr(2*I); expected_data_c_im_arr(I) <= expected_data_c_arr(2*I+1); end loop; else - proc_common_read_integer_file(g_data_file_a, c_nof_lines_a_header_wg, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_a_arr); - proc_common_read_integer_file(g_data_file_b, c_nof_lines_b_header_wg, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_b_arr); + proc_common_read_integer_file(g_data_file_a, c_nof_lines_a_pfft_header, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_a_arr); + proc_common_read_integer_file(g_data_file_b, c_nof_lines_b_pfft_header, g_data_file_nof_lines/c_nof_complex, c_nof_complex, expected_data_b_arr); wait for 1 ns; for I in 0 to g_data_file_nof_lines/c_nof_complex-1 loop expected_data_a_re_arr(I) <= expected_data_a_arr(2*I);