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);