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

Added tb for c_stage_dat_extra_w >> 18b to verify g_diff_margin = 1.

parent 79655cec
No related branches found
No related tags found
No related merge requests found
......@@ -42,24 +42,26 @@ END tb_tb_wpfb_unit_wide;
ARCHITECTURE tb OF tb_tb_wpfb_unit_wide IS
constant c_stage_dat_extra_w : natural := c_dsp_mult_w + 10;
-- wb 1, two real
CONSTANT c_wb_1_two_real_1024 : t_wpfb := (1, 1024, 0, 1,
16, 1, 8, 16, 16,
true, false, true, 16, 16, 0, c_dsp_mult_w, 2, true, 56, 2,
true, false, true, 16, 16, 1, c_dsp_mult_w, 2, true, 56, 2,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
CONSTANT c_wb_1_two_real : t_wpfb := (1, 32, 0, 1,
16, 1, 8, 16, 16,
true, false, true, 16, 16, 0, c_dsp_mult_w, 2, true, 56, 2,
true, false, true, 16, 16, 1, c_dsp_mult_w, 2, true, 56, 2,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
-- wb 4, two real
CONSTANT c_wb_4_two_real_1024 : t_wpfb := (4, 1024, 0, 1,
16, 1, 8, 16, 16,
true, false, true, 16, 16, 0, c_dsp_mult_w, 2, true, 56, 2,
true, false, true, 16, 16, 1, c_stage_dat_extra_w, 2, true, 56, 2,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
CONSTANT c_wb_4_two_real : t_wpfb := (4, 32, 0, 1,
16, 1, 8, 16, 16,
true, false, true, 16, 16, 0, c_dsp_mult_w, 2, true, 56, 2,
true, false, true, 16, 16, 1, c_dsp_mult_w, 2, true, 56, 2,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
-- wb 1, complex reordered
......@@ -116,10 +118,12 @@ ARCHITECTURE tb OF tb_tb_wpfb_unit_wide IS
false, false, false, 16, 16, 0, c_dsp_mult_w, 2, true, 56, 2,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
CONSTANT c_dm : natural := 3; -- diff margin (for 32p dm=2 appears sufficient, for 1024p dm=3 is sufficient)
CONSTANT c_dm_1 : natural := 1; -- diff margin (for stage_dat_w >> c_dsp_mult_w)
CONSTANT c_dm_3 : natural := 3; -- diff margin (for 32 point dm=2 appears sufficient, for 1024 point dm=3 is sufficient)
CONSTANT c_dm_5 : natural := 5; -- diff margin (for 32 point dm=2 appears sufficient, for 1024 point dm=3 is sufficient)
CONSTANT c_pre_ab : string := "data/run_pfb_m_pfir_coeff_fircls1";
CONSTANT c_pre_c : string := "data/run_pfb_complex_m_pfir_coeff_fircls1";
CONSTANT c_pre_ab : string := "data/run_pfb_m_pfir_coeff_fircls1";
CONSTANT c_pre_c : string := "data/run_pfb_complex_m_pfir_coeff_fircls1";
-- Real input
CONSTANT c_sinusoid_chirp_1024 : string := "data/run_pfb_m_sinusoid_chirp_8b_16taps_1024points_16b_16b.dat"; -- 204800 lines
......@@ -235,33 +239,33 @@ BEGIN
-- Two real input data A and B
-- * 1024 point (as in Apertif subband filterbank)
u_act_wb_4_two_real_ab_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_two_real_1024, c_dm, c_pre_ab, c_pre_c, c_sinusoid_chirp_1024, 204800, c_noise_1024, 51200, c_un, 0, 51200, FALSE);
u_act_wb_1_two_real_ab_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real_1024, c_dm, c_pre_ab, c_pre_c, c_sinusoid_chirp_1024, 204800, c_noise_1024, 51200, c_un, 0, 51200, FALSE);
u_act_wb_1_two_real_chirp_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real_1024, c_dm, c_pre_ab, c_pre_c, c_sinusoid_chirp_1024, 204800, c_zero, 51200, c_un, 0, 51200, FALSE);
u_act_wb_4_two_real_ab_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_two_real_1024, c_dm_1, c_pre_ab, c_pre_c, c_sinusoid_chirp_1024, 204800, c_noise_1024, 51200, c_un, 0, 51200, FALSE);
u_act_wb_1_two_real_ab_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real_1024, c_dm_5, c_pre_ab, c_pre_c, c_sinusoid_chirp_1024, 204800, c_noise_1024, 51200, c_un, 0, 51200, FALSE);
u_act_wb_1_two_real_chirp_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real_1024, c_dm_5, c_pre_ab, c_pre_c, c_sinusoid_chirp_1024, 204800, c_zero, 51200, c_un, 0, 51200, FALSE);
-- * 32 point
u_act_wb_1_two_real_chirp : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm, c_pre_ab, c_pre_c, c_sinusoid_chirp, 6400, c_impulse_chirp, 6400, c_un, 0, 6400, FALSE);
u_act_wb_1_two_real_a0 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm, c_pre_ab, c_pre_c, c_zero, 6400, c_impulse_chirp, 6400, c_un, 0, 6400, FALSE);
u_act_wb_1_two_real_b0 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm, c_pre_ab, c_pre_c, c_sinusoid_chirp, 6400, c_zero, 6400, c_un, 0, 6400, FALSE);
u_rnd_wb_4_two_real_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_two_real, c_dm, c_pre_ab, c_pre_c, c_noise, 1600, c_dc_agwn, 1600, c_un, 0, 1600, TRUE);
u_rnd_wb_1_two_real_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm, c_pre_ab, c_pre_c, c_noise, 1600, c_dc_agwn, 1600, c_un, 0, 1600, TRUE);
u_act_wb_1_two_real_chirp : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm_5, c_pre_ab, c_pre_c, c_sinusoid_chirp, 6400, c_impulse_chirp, 6400, c_un, 0, 6400, FALSE);
u_act_wb_1_two_real_a0 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm_5, c_pre_ab, c_pre_c, c_zero, 6400, c_impulse_chirp, 6400, c_un, 0, 6400, FALSE);
u_act_wb_1_two_real_b0 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm_5, c_pre_ab, c_pre_c, c_sinusoid_chirp, 6400, c_zero, 6400, c_un, 0, 6400, FALSE);
u_rnd_wb_4_two_real_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_two_real, c_dm_5, c_pre_ab, c_pre_c, c_noise, 1600, c_dc_agwn, 1600, c_un, 0, 1600, TRUE);
u_rnd_wb_1_two_real_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_two_real, c_dm_5, c_pre_ab, c_pre_c, c_noise, 1600, c_dc_agwn, 1600, c_un, 0, 1600, TRUE);
-- Complex input data
-- * 1024 point
u_act_wb_1_complex_chirp_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex_1024, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_1024, 204800, 51200, FALSE);
u_act_wb_4_complex_chirp_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_1024, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_1024, 204800, 51200, FALSE);
u_act_wb_1_complex_chirp_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex_1024, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_1024, 204800, 51200, FALSE);
u_act_wb_4_complex_chirp_1024 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_1024, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_1024, 204800, 51200, FALSE);
-- * 64 point (as in Apertif channel filterbank)
u_act_wb_1_complex_chirp_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex_64, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_64, 12800, 12800, FALSE);
u_act_wb_4_complex_chirp_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_64, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_64, 12800, 12800, FALSE);
u_act_wb_1_complex_flipped_noise_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex_flipped_64, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex_64, 3200, 3200, FALSE);
u_act_wb_4_complex_flipped_noise_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_flipped_64, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex_64, 3200, 3200, FALSE);
u_act_wb_1_complex_chirp_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex_64, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_64, 12800, 12800, FALSE);
u_act_wb_4_complex_chirp_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_64, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp_64, 12800, 12800, FALSE);
u_act_wb_1_complex_flipped_noise_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex_flipped_64, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex_64, 3200, 3200, FALSE);
u_act_wb_4_complex_flipped_noise_64 : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_flipped_64, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex_64, 3200, 3200, FALSE);
-- * 32 point
u_act_wb_4_complex_chirp : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp, 6400, 6400, FALSE);
u_act_wb_4_complex_flipped : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_flipped, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp, 6400, 6400, FALSE);
u_rnd_wb_1_complex_phasor : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor, 1600, 1600, TRUE);
u_rnd_wb_4_complex_phasor : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor, 1600, 1600, TRUE);
u_rnd_wb_1_complex_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex, 1600, 1600, TRUE);
u_rnd_wb_4_complex_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex, c_dm, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex, 1600, 1600, TRUE);
u_act_wb_4_complex_chirp : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp, 6400, 6400, FALSE);
u_act_wb_4_complex_flipped : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex_flipped, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor_chirp, 6400, 6400, FALSE);
u_rnd_wb_1_complex_phasor : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor, 1600, 1600, TRUE);
u_rnd_wb_4_complex_phasor : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_phasor, 1600, 1600, TRUE);
u_rnd_wb_1_complex_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_1_complex, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex, 1600, 1600, TRUE);
u_rnd_wb_4_complex_noise : ENTITY work.tb_wpfb_unit_wide GENERIC MAP (c_wb_4_complex, c_dm_3, c_pre_ab, c_pre_c, c_un, 0, c_un, 0, c_noise_complex, 1600, 1600, TRUE);
END tb;
......@@ -68,7 +68,7 @@ entity tb_wpfb_unit_wide is
-- DUT generics
g_wpfb : t_wpfb := (4, 32, 0, 1,
16, 1, 8, 16, 16,
true, false, true, 16, 16, 0, c_dsp_mult_w, 2, true, 56, 2,
true, false, true, 16, 16, 1, c_dsp_mult_w, 2, true, 56, 2,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
-- type t_wpfb is record
-- -- General parameters for the wideband poly phase filter
......@@ -104,9 +104,10 @@ entity tb_wpfb_unit_wide is
-- end record;
-- TB generics
g_diff_margin : integer := 2; -- maximum difference between HDL output and expected output (> 0 to allow minor rounding differences)
-- for 32 point diff margin = 2 appears sufficient
-- for 1024 point diff margin = 3 appears sufficient
g_diff_margin : integer := 5; -- maximum difference between HDL output and expected output (> 0 to allow minor rounding differences)
-- for complex diff margin = 3 appears sufficient
-- for two_real diff margin = 5 appears sufficient
-- if stage_dat_w >> 18 >= fft_out_dat_w then g_diff_margin = 1 is sufficient
-- PFIR coefficients
g_coefs_file_prefix_ab : string := "data/run_pfb_m_pfir_coeff_fircls1";
......@@ -120,6 +121,8 @@ entity tb_wpfb_unit_wide is
--g_data_file_b_nof_lines : natural := 0;
-- * 32 points = 16 subbands
--g_data_file_a : string := "data/run_pfb_m_sinusoid_chirp_8b_16taps_1024points_16b_16b.dat";
--g_data_file_a_nof_lines : natural := 204800;
--g_data_file_a : string := "data/run_pfb_m_sinusoid_chirp_8b_16taps_32points_16b_16b.dat";
--g_data_file_a_nof_lines : natural := 6400;
g_data_file_a : string := "data/run_pfb_m_sinusoid_8b_16taps_32points_16b_16b.dat";
......@@ -158,22 +161,6 @@ architecture tb of tb_wpfb_unit_wide is
constant c_sclk_period : time := c_clk_period / g_wpfb.wb_factor;
constant c_in_complex : boolean := not g_wpfb.use_separate;
constant c_wfft : t_fft := (g_wpfb.use_reorder,
g_wpfb.use_fft_shift,
g_wpfb.use_separate,
g_wpfb.nof_chan,
g_wpfb.wb_factor,
0,
g_wpfb.nof_points,
g_wpfb.fil_in_dat_w,
g_wpfb.fft_out_dat_w,
g_wpfb.fft_out_gain_w,
g_wpfb.stage_dat_w,
g_wpfb.guard_w,
g_wpfb.guard_enable,
g_wpfb.stat_data_w,
g_wpfb.stat_data_sz);
constant c_fft_r2_check : boolean := fft_r2_parameter_asserts(c_wfft);
constant c_nof_channels : natural := 1;
constant c_nof_coefs : natural := g_wpfb.nof_taps * g_wpfb.nof_points; -- nof PFIR coef
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment