diff --git a/libraries/dsp/st/tb/vhdl/tb_st_histogram.vhd b/libraries/dsp/st/tb/vhdl/tb_st_histogram.vhd index 90ec5637402e7a4abf11420a121e58bb7828700b..dea080d96f62841b555f72aa7e4597f0d7ad14ba 100644 --- a/libraries/dsp/st/tb/vhdl/tb_st_histogram.vhd +++ b/libraries/dsp/st/tb/vhdl/tb_st_histogram.vhd @@ -80,10 +80,9 @@ ARCHITECTURE tb OF tb_st_histogram IS -- Constants derived from generics --------------------------------------------------------------------------- CONSTANT c_expected_ram_content_counter : NATURAL := g_nof_data_per_sync/g_nof_bins; - CONSTANT c_nof_levels_per_bin : NATURAL := (2**g_data_w)/g_nof_bins; --e.g. 2 values per bin if g_data_w=9 (512 levels) and g_nof_bins=256 - - CONSTANT c_ram_dat_w : NATURAL := ceil_log2(g_nof_data_per_sync)+1; - CONSTANT c_ram_adr_w : NATURAL := ceil_log2(g_nof_bins); + CONSTANT c_nof_levels_per_bin : NATURAL := (2**g_data_w)/g_nof_bins; --e.g. 2 values per bin if g_data_w=9 (512 levels) and g_nof_bins=256 + CONSTANT c_ram_dat_w : NATURAL := ceil_log2(g_nof_data_per_sync)+1; + CONSTANT c_ram_adr_w : NATURAL := ceil_log2(g_nof_bins); --------------------------------------------------------------------------- -- Clocks and resets @@ -98,21 +97,20 @@ ARCHITECTURE tb OF tb_st_histogram IS ---------------------------------------------------------------------------- -- stimuli ---------------------------------------------------------------------------- - CONSTANT c_sine_amplitude : REAL := real((2**g_data_w)/2-1); + CONSTANT c_sine_amplitude : REAL := real((2**g_data_w)/2-1); CONSTANT c_sine_nof_periods : REAL := 1.0; CONSTANT c_sine_nof_samples_per_period : REAL := real(g_nof_data_per_sync)/c_sine_nof_periods; CONSTANT c_sine_time_step_denom : REAL := sel_a_b(g_lock_sine, MATH_2_PI, 5.0); -- Use 5 instead of 2 pi to create unlocked, drifting sine wave CONSTANT c_sine_time_step : REAL := c_sine_time_step_denom / c_sine_nof_samples_per_period; - SIGNAL stimuli_en : STD_LOGIC := '1'; - - SIGNAL stimuli_src_out : t_dp_sosi; + SIGNAL stimuli_en : STD_LOGIC := '1'; + SIGNAL stimuli_src_out : t_dp_sosi; SIGNAL nxt_stimuli_src_out : t_dp_sosi; - SIGNAL stimuli_src_in : t_dp_siso; - SIGNAL stimuli_count : REAL; - SIGNAL stimuli_data : STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); --NOTE This is undefined in the wave window - - SIGNAL stimuli_done : STD_LOGIC; + SIGNAL stimuli_src_in : t_dp_siso; + SIGNAL stimuli_count : REAL; + SIGNAL stimuli_data : STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); -- QuestaSim: Format->Analog, Radix->Decimal + SIGNAL random_data : STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); + SIGNAL stimuli_done : STD_LOGIC; ---------------------------------------------------------------------------- -- st_histogram @@ -131,8 +129,8 @@ ARCHITECTURE tb OF tb_st_histogram IS SIGNAL histogram_bin_signed : INTEGER; -- QuestaSim: Radix->Decimal SIGNAL histogram_valid : STD_LOGIC; - SIGNAL sum_of_bins : NATURAL; - SIGNAL verification_done : STD_LOGIC; + SIGNAL sum_of_bins : NATURAL; + SIGNAL verification_done : STD_LOGIC; BEGIN @@ -188,13 +186,10 @@ BEGIN nxt_stimuli_src_out.valid <= '1'; stimuli_count <= 0.0; FOR I IN 0 TO g_nof_sync-1 LOOP --- nxt_stimuli_src_out.data <= (OTHERS=>'0'); --- stimuli_data <= (OTHERS=>'0'); nxt_stimuli_src_out.sync <= '1'; -- cycle 0 WAIT FOR 5 ns; FOR j IN 1 TO g_nof_data_per_sync-1 LOOP --cycles 1..g_nof_data_per_sync-1 nxt_stimuli_src_out.sync <= '0'; --- stimuli_data <= TO_SVEC( integer(round( c_sine_amplitude * sin(stimuli_count) )), g_data_w); nxt_stimuli_src_out.data(g_data_w-1 DOWNTO 0) <= TO_SVEC( integer(round( c_sine_amplitude * sin(stimuli_count) )), g_data_w); stimuli_count<=stimuli_count+c_sine_time_step; WAIT FOR 5 ns; @@ -206,13 +201,13 @@ BEGIN IF g_stimuli_mode="random" THEN nxt_stimuli_src_out.valid <= '1'; FOR I IN 0 TO g_nof_sync-1 LOOP - stimuli_data <= (OTHERS=>'0'); + random_data <= (OTHERS=>'0'); nxt_stimuli_src_out.sync <= '1'; -- cycle 0 WAIT FOR 5 ns; FOR j IN 1 TO g_nof_data_per_sync-1 LOOP nxt_stimuli_src_out.sync <= '0'; - stimuli_data <= func_common_random(stimuli_data); - nxt_stimuli_src_out.data(g_data_w-1 DOWNTO 0) <= stimuli_data; --all g_nof_data_per_sync cycles + random_data <= func_common_random(random_data); + nxt_stimuli_src_out.data(g_data_w-1 DOWNTO 0) <= random_data; --all g_nof_data_per_sync cycles WAIT FOR 5 ns; END LOOP; END LOOP; @@ -232,8 +227,10 @@ BEGIN stimuli_src_out <= nxt_stimuli_src_out; END IF; END PROCESS; - --- nxt_stimuli_src_out.data(g_data_w-1 DOWNTO 0) <= stimuli_data; + + -- signal to verify histogram by eye in the wave window + stimuli_data <= stimuli_src_out.data(g_data_w-1 DOWNTO 0); + ---------------------------------------------------------------------------- -- st_histogram