From f7edcb47c2d70aad37e0171ca0bf8c40871865c5 Mon Sep 17 00:00:00 2001 From: Pepping <pepping> Date: Thu, 25 Jun 2015 11:19:06 +0000 Subject: [PATCH] copied from $UNB --- .../base/reorder/tb/vhdl/tb_reorder_col.vhd | 322 ++++++++++++++++++ .../reorder/tb/vhdl/tb_reorder_col_wide.vhd | 66 ++++ .../reorder/tb/vhdl/tb_tb_reorder_col.vhd | 66 ++++ 3 files changed, 454 insertions(+) create mode 100644 libraries/base/reorder/tb/vhdl/tb_reorder_col.vhd create mode 100644 libraries/base/reorder/tb/vhdl/tb_reorder_col_wide.vhd create mode 100644 libraries/base/reorder/tb/vhdl/tb_tb_reorder_col.vhd diff --git a/libraries/base/reorder/tb/vhdl/tb_reorder_col.vhd b/libraries/base/reorder/tb/vhdl/tb_reorder_col.vhd new file mode 100644 index 0000000000..761c4bddbc --- /dev/null +++ b/libraries/base/reorder/tb/vhdl/tb_reorder_col.vhd @@ -0,0 +1,322 @@ +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2010 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +------------------------------------------------------------------------------- + +LIBRARY IEEE, common_lib, dp_lib; +USE IEEE.std_logic_1164.ALL; +USE IEEE.numeric_std.ALL; +USE common_lib.common_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE common_lib.tb_common_pkg.ALL; +USE common_lib.tb_common_mem_pkg.ALL; +USE common_lib.common_lfsr_sequences_pkg.ALL; +USE dp_lib.dp_stream_pkg.ALL; +USE dp_lib.tb_dp_pkg.ALL; + + +-- Usage: +-- > as 10 +-- > run -all +-- . Observe in_sosi and out_sosi in the Wave window +-- +-- Description: +-- . This tb_ss for the subband select (SS) self verifies the data, sync and BSN +-- . The flow control is selected via g_mode_in_en and g_mode_out_ready. +-- +-- Remark: +-- . Use tb_tb_ss for multi-tb DUT verification. + +ENTITY tb_ss IS + GENERIC ( + -- Flow control + g_mode_in_en : NATURAL := 0; -- use 0 for active in_sosi.valid control + -- use 1 for random in_sosi.valid control + g_mode_out_ready : NATURAL := 0; -- use 0 for active out_siso.ready control + -- use 1 for toggling out_siso.ready control, requires g_nof_ch_sel <= g_nof_ch_in/2 + -- use 2 for inverted toggling out_siso.ready control, requires g_nof_ch_sel <= g_nof_ch_in/2 + -- Test duration + g_nof_sync : NATURAL := 10; + + -- Functional parameters + g_reverse_ss_map : BOOLEAN := TRUE; -- use true to verify that the last data written can be read immediately after the SS page swap + + --g_nof_ch_in : NATURAL := 256; + g_nof_ch_in : NATURAL := 16; + --g_nof_ch_sel : NATURAL := 192; + --g_nof_ch_sel : NATURAL := 16; + g_nof_ch_sel : NATURAL := 12; + --g_nof_ch_sel : NATURAL := 8; + --g_nof_ch_sel : NATURAL := 7; + + g_use_complex : BOOLEAN := TRUE; + + g_use_output_rl_adapter : BOOLEAN := FALSE -- when true adapt output RL to 1 else the output RL is equal to c_retrieve_lat=2 + ); +END tb_ss; + + +ARCHITECTURE tb OF tb_ss IS + + CONSTANT clk_period : TIME := 10 ns; + + CONSTANT c_rl : NATURAL := 1; + CONSTANT c_dsp_data_w : NATURAL := 16; + CONSTANT c_bsn_init : NATURAL := 10; + + CONSTANT c_nof_ch_gap : NATURAL := g_nof_ch_in-g_nof_ch_sel+1; + CONSTANT c_nof_block_per_sync : NATURAL := 4; + CONSTANT c_bsn_offset : NATURAL := c_bsn_init MOD c_nof_block_per_sync; + + SIGNAL rst : STD_LOGIC; + SIGNAL clk : STD_LOGIC := '1'; + SIGNAL tb_end : STD_LOGIC := '0'; + + SIGNAL mm_reverse_mosi : t_mem_mosi; + SIGNAL mm_dut_mosi : t_mem_mosi; + SIGNAL mm_done : STD_LOGIC; + + SIGNAL random_0 : STD_LOGIC_VECTOR(14 DOWNTO 0) := (OTHERS=>'0'); -- use different lengths to have different random sequences + SIGNAL toggle : STD_LOGIC := '1'; + SIGNAL verify_en : STD_LOGIC := '0'; + SIGNAL verify_bsn : STD_LOGIC := '1'; + + SIGNAL st_en : STD_LOGIC := '1'; + SIGNAL st_siso : t_dp_siso := c_dp_siso_rdy; + SIGNAL st_sosi : t_dp_sosi := c_dp_sosi_rst; + + SIGNAL bsn : NATURAL := c_bsn_init; + + SIGNAL dp_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL reverse_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL in_sosi : t_dp_sosi := c_dp_sosi_rst; + + SIGNAL out_siso : t_dp_siso := c_dp_siso_rdy; + SIGNAL out_sosi : t_dp_sosi; + SIGNAL prev_out_sosi : t_dp_sosi; + SIGNAL hold_out_sosi : t_dp_sosi; + + SIGNAL first_in_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); + SIGNAL first_out_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); + +BEGIN + + clk <= NOT clk OR tb_end AFTER clk_period/2; + rst <= '1', '0' AFTER clk_period*5; + + ------------------------------------------------------------------------------ + -- Write SS select map + ------------------------------------------------------------------------------ + p_mm_dut_stimuli : PROCESS + BEGIN + mm_dut_mosi <= c_mem_mosi_rst; + mm_done <= '0'; + proc_common_wait_until_low(clk, rst); + proc_common_wait_some_cycles(clk, 10); + + FOR I IN 0 TO g_nof_ch_sel-1 LOOP + IF g_reverse_ss_map=FALSE THEN + proc_mem_mm_bus_wr(I, I, clk, mm_dut_mosi); -- Write the default SS map: (0, 1, 2, ... g_nof_ch_sel-1) ==> (0, 1, 2, ... g_nof_ch_sel-1) + ELSE + proc_mem_mm_bus_wr(I, g_nof_ch_sel-1-I, clk, mm_dut_mosi); -- Write the reverse SS map: (0, 1, 2, ... g_nof_ch_sel-1) ==> (g_nof_ch_sel-1, ..., 2, 1, 0) + END IF; + END LOOP; + mm_done <= '1'; + WAIT; + END PROCESS; + + ------------------------------------------------------------------------------ + -- Flow control : Fixed, toggle or random + ------------------------------------------------------------------------------ + random_0 <= func_common_random(random_0) WHEN rising_edge(clk); + toggle <= NOT toggle WHEN rising_edge(clk); + + -- Input valid + st_en <= '1' WHEN g_mode_in_en=0 ELSE random_0(random_0'HIGH); + + -- Output ready + -- . toggle ready to model flow control for a dual input multiplexer, use g_nof_ch_sel < g_nof_ch_in/2 + out_siso.ready <= '1' WHEN g_mode_out_ready=0 ELSE + toggle WHEN g_mode_out_ready=1 ELSE + NOT toggle; + + + ------------------------------------------------------------------------------ + -- Generate input data blocks + ------------------------------------------------------------------------------ + p_st_stimuli : PROCESS + VARIABLE v_re : NATURAL := 0; + VARIABLE v_im : NATURAL := 1; + VARIABLE v_data : NATURAL := 2; + BEGIN + st_sosi <= c_dp_sosi_rst; + proc_common_wait_until_high(clk, mm_done); + + -- Run some sync intervals with DSP counter data for the real and imag fields + WAIT UNTIL rising_edge(clk); + FOR I IN 0 TO g_nof_sync-1 LOOP + IF g_use_complex THEN + proc_dp_gen_block_data(c_rl, FALSE, c_dsp_data_w, c_dsp_data_w, 0, v_re, v_im, g_nof_ch_in, 0, 0, '1', "0", clk, st_en, st_siso, st_sosi); -- next sync + v_re := v_re + g_nof_ch_in; + v_im := v_im + g_nof_ch_in; + ELSE + proc_dp_gen_block_data(c_rl, TRUE, c_nof_complex*c_dsp_data_w, c_nof_complex*c_dsp_data_w, v_data, 0, 0, g_nof_ch_in, 0, 0, '1', "0", clk, st_en, st_siso, st_sosi); -- next sync + v_data := v_data + g_nof_ch_in; + END IF; + FOR J IN 0 TO c_nof_block_per_sync-2 LOOP -- provide sop and eop for block reference + IF g_use_complex THEN + proc_dp_gen_block_data(c_rl, FALSE, c_dsp_data_w, c_dsp_data_w, 0, v_re, v_im, g_nof_ch_in, 0, 0, '0', "0", clk, st_en, st_siso, st_sosi); -- no sync + v_re := v_re + g_nof_ch_in; + v_im := v_im + g_nof_ch_in; + ELSE + proc_dp_gen_block_data(c_rl, TRUE, c_nof_complex*c_dsp_data_w, c_nof_complex*c_dsp_data_w, v_data, 0, 0, g_nof_ch_in, 0, 0, '0', "0", clk, st_en, st_siso, st_sosi); -- next sync + v_data := v_data + g_nof_ch_in; + END IF; + END LOOP; + END LOOP; + st_sosi <= c_dp_sosi_rst; + proc_common_wait_some_cycles(clk, 3*g_nof_ch_in); + tb_end <= '1'; + WAIT; + END PROCESS; + + -- Time stimuli + bsn <= bsn + 1 WHEN rising_edge(clk) AND (st_sosi.eop='1'); + + -- Add BSN to the ST data + p_dp_sosi : PROCESS(st_sosi, bsn) + BEGIN + dp_sosi <= st_sosi; + dp_sosi.bsn <= TO_DP_BSN(bsn); + END PROCESS; + + + ------------------------------------------------------------------------------ + -- Compensate for reverse order read out of DUT so that proc_verify_* have incrementing data + ------------------------------------------------------------------------------ + gen_reverse_ss : IF g_reverse_ss_map=TRUE GENERATE + p_mm_reverse_stimuli : PROCESS + BEGIN + mm_reverse_mosi <= c_mem_mosi_rst; + proc_common_wait_until_low(clk, rst); + proc_common_wait_some_cycles(clk, 10); + + FOR I IN 0 TO g_nof_ch_in-1 LOOP + proc_mem_mm_bus_wr(I, g_nof_ch_in-1-I, clk, mm_reverse_mosi); -- Write the reverse SS map: (0, 1, 2, ... g_nof_ch_in-1) ==> (g_nof_ch_in-1, ..., 2, 1, 0) + END LOOP; + + WAIT; + END PROCESS; + + u_reverse_ss : ENTITY work.ss + GENERIC MAP ( + g_use_output_rl_adapter => g_use_output_rl_adapter, + g_dsp_data_w => c_dsp_data_w, + g_nof_ch_in => g_nof_ch_in, + g_nof_ch_sel => g_nof_ch_in, + g_use_complex => g_use_complex + ) + PORT MAP ( + mm_rst => rst, + mm_clk => clk, + dp_rst => rst, + dp_clk => clk, + + -- Memory Mapped + ram_ss_ss_mosi => mm_reverse_mosi, + ram_ss_ss_miso => OPEN, + + -- Streaming + input_sosi => dp_sosi, + + output_sosi => reverse_sosi, + output_siso => c_dp_siso_rdy + ); + END GENERATE; + + ------------------------------------------------------------------------------ + -- DUT : SS + ------------------------------------------------------------------------------ + in_sosi <= dp_sosi WHEN g_reverse_ss_map=FALSE ELSE reverse_sosi; + + u_dut_ss : ENTITY work.ss + GENERIC MAP ( + g_use_output_rl_adapter => g_use_output_rl_adapter, + g_dsp_data_w => c_dsp_data_w, + g_nof_ch_in => g_nof_ch_in, + g_nof_ch_sel => g_nof_ch_sel, + g_use_complex => g_use_complex + ) + PORT MAP ( + mm_rst => rst, + mm_clk => clk, + dp_rst => rst, + dp_clk => clk, + + -- Memory Mapped + ram_ss_ss_mosi => mm_dut_mosi, + ram_ss_ss_miso => OPEN, + + -- Streaming + input_sosi => in_sosi, + + output_sosi => out_sosi, + output_siso => out_siso + ); + + ------------------------------------------------------------------------------ + -- Verify + ------------------------------------------------------------------------------ + p_verify_en : PROCESS + BEGIN + verify_en <= '0'; + proc_common_wait_until_high(clk, in_sosi.eop); -- now the SS will start outputing the first block + proc_common_wait_some_cycles(clk, 10); -- wait a few cycles for the SS latency + verify_en <= '1'; + WAIT; + END PROCESS; + + -- verify first BSN to ensure that the output BSN does not slip a frame compared to the corresponding input frame + p_verify_first_bsn : PROCESS + BEGIN + first_in_bsn <= TO_DP_BSN(c_bsn_init); + proc_common_wait_until_high(clk, out_sosi.sop); + first_out_bsn <= out_sosi.bsn; + proc_common_wait_some_cycles(clk, 1); + proc_dp_verify_value(e_equal, clk, verify_bsn, first_in_bsn, first_out_bsn); + WAIT; + END PROCESS; + + -- verify incrementing next BSN and sync + proc_dp_verify_data("out_sosi.bsn", clk, verify_en, out_sosi.sop, out_sosi.bsn, prev_out_sosi.bsn); + proc_dp_verify_sync(c_nof_block_per_sync, c_bsn_offset, clk, verify_en, out_sosi.sync, out_sosi.sop, out_sosi.bsn); + + -- verify incrementing re and im + gen_verify_complex: IF g_use_complex GENERATE + proc_dp_verify_data("out_sosi.re", c_unsigned_0, TO_UNSIGNED(c_nof_ch_gap,32), clk, verify_en, out_sosi.valid, out_sosi.re, prev_out_sosi.re); + proc_dp_verify_data("out_sosi.im", c_unsigned_0, TO_UNSIGNED(c_nof_ch_gap,32), clk, verify_en, out_sosi.valid, out_sosi.im, prev_out_sosi.im); + END GENERATE; + + gen_verify_non_complex: IF NOT(g_use_complex) GENERATE + proc_dp_verify_data("out_sosi.data", c_unsigned_0, TO_UNSIGNED(c_nof_ch_gap,32), clk, verify_en, out_sosi.valid, out_sosi.data, prev_out_sosi.data); + END GENERATE; + -- verify output framing + proc_dp_verify_sop_and_eop(clk, out_sosi.valid, out_sosi.sop, out_sosi.eop, hold_out_sosi.sop); + +END tb; diff --git a/libraries/base/reorder/tb/vhdl/tb_reorder_col_wide.vhd b/libraries/base/reorder/tb/vhdl/tb_reorder_col_wide.vhd new file mode 100644 index 0000000000..63d04a3dc2 --- /dev/null +++ b/libraries/base/reorder/tb/vhdl/tb_reorder_col_wide.vhd @@ -0,0 +1,66 @@ +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2013 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +------------------------------------------------------------------------------- + +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; + +ENTITY tb_tb_ss IS +END tb_tb_ss; + +ARCHITECTURE tb OF tb_tb_ss IS + + CONSTANT c_nof_sync : NATURAL := 20; + CONSTANT c_reverse_ss_map : BOOLEAN := TRUE; + +BEGIN + + -- > as 2 + -- > run -all --> OK + + -- g_mode_in_en : NATURAL := 0; -- 0 = active, 1 = random in_sosi.valid control + -- g_mode_out_ready : NATURAL := 0; -- 0 = active, 1 = toggling, 2 = inverted toggling for out_siso.ready control, toggling requires g_nof_ch_sel <= g_nof_ch_in/2 + -- g_nof_sync : NATURAL := 100; + -- g_reverse_ss_map : BOOLEAN := FALSE; + -- g_nof_ch_in : NATURAL := 32; + -- g_nof_ch_sel : NATURAL := 31; + -- g_use_output_rl_adapter : BOOLEAN := FALSE; -- when true adapt output RL to 1 else the output RL is equal to c_retrieve_lat=2 + + u_act_act_32_32 : ENTITY work.tb_ss GENERIC MAP (0, 0, c_nof_sync, c_reverse_ss_map, 32, 32, FALSE); + u_act_act_32_24 : ENTITY work.tb_ss GENERIC MAP (0, 0, c_nof_sync, c_reverse_ss_map, 32, 24, FALSE); + u_rnd_act_32_32_rl : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 32, TRUE); + u_rnd_act_32_32 : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 32, FALSE); + u_rnd_act_32_24 : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 24, FALSE); + + u_act_act_32_31 : ENTITY work.tb_ss GENERIC MAP (0, 0, c_nof_sync, c_reverse_ss_map, 32, 31, FALSE); + u_rnd_act_32_31 : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 31, FALSE); + + u_act_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + u_rnd_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (1, 1, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + + u_act_toggle_32_15 : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 15, FALSE); + u_rnd_toggle_32_15 : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 15, FALSE); + + u_rnd_toggle_32_15_rl : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 15, TRUE); + + u_act_invert_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (0, 2, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + u_rnd_invert_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (1, 2, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + +END tb; diff --git a/libraries/base/reorder/tb/vhdl/tb_tb_reorder_col.vhd b/libraries/base/reorder/tb/vhdl/tb_tb_reorder_col.vhd new file mode 100644 index 0000000000..63d04a3dc2 --- /dev/null +++ b/libraries/base/reorder/tb/vhdl/tb_tb_reorder_col.vhd @@ -0,0 +1,66 @@ +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2013 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +------------------------------------------------------------------------------- + +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; + +ENTITY tb_tb_ss IS +END tb_tb_ss; + +ARCHITECTURE tb OF tb_tb_ss IS + + CONSTANT c_nof_sync : NATURAL := 20; + CONSTANT c_reverse_ss_map : BOOLEAN := TRUE; + +BEGIN + + -- > as 2 + -- > run -all --> OK + + -- g_mode_in_en : NATURAL := 0; -- 0 = active, 1 = random in_sosi.valid control + -- g_mode_out_ready : NATURAL := 0; -- 0 = active, 1 = toggling, 2 = inverted toggling for out_siso.ready control, toggling requires g_nof_ch_sel <= g_nof_ch_in/2 + -- g_nof_sync : NATURAL := 100; + -- g_reverse_ss_map : BOOLEAN := FALSE; + -- g_nof_ch_in : NATURAL := 32; + -- g_nof_ch_sel : NATURAL := 31; + -- g_use_output_rl_adapter : BOOLEAN := FALSE; -- when true adapt output RL to 1 else the output RL is equal to c_retrieve_lat=2 + + u_act_act_32_32 : ENTITY work.tb_ss GENERIC MAP (0, 0, c_nof_sync, c_reverse_ss_map, 32, 32, FALSE); + u_act_act_32_24 : ENTITY work.tb_ss GENERIC MAP (0, 0, c_nof_sync, c_reverse_ss_map, 32, 24, FALSE); + u_rnd_act_32_32_rl : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 32, TRUE); + u_rnd_act_32_32 : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 32, FALSE); + u_rnd_act_32_24 : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 24, FALSE); + + u_act_act_32_31 : ENTITY work.tb_ss GENERIC MAP (0, 0, c_nof_sync, c_reverse_ss_map, 32, 31, FALSE); + u_rnd_act_32_31 : ENTITY work.tb_ss GENERIC MAP (1, 0, c_nof_sync, c_reverse_ss_map, 32, 31, FALSE); + + u_act_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + u_rnd_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (1, 1, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + + u_act_toggle_32_15 : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 15, FALSE); + u_rnd_toggle_32_15 : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 15, FALSE); + + u_rnd_toggle_32_15_rl : ENTITY work.tb_ss GENERIC MAP (0, 1, c_nof_sync, c_reverse_ss_map, 32, 15, TRUE); + + u_act_invert_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (0, 2, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + u_rnd_invert_toggle_32_16 : ENTITY work.tb_ss GENERIC MAP (1, 2, c_nof_sync, c_reverse_ss_map, 32, 16, FALSE); + +END tb; -- GitLab