Skip to content
Snippets Groups Projects
Commit 7b9f8875 authored by Pepping's avatar Pepping
Browse files

Copy

parent 3f057bcd
Branches
No related tags found
No related merge requests found
-------------------------------------------------------------------------------
--
-- Copyright (C) 2012
-- 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;
USE IEEE.STD_LOGIC_1164.ALL;
USE work.dp_stream_pkg.ALL;
USE common_lib.common_pkg.ALL;
USE common_lib.tb_common_pkg.ALL;
USE work.tb_dp_pkg.ALL;
-- Purpose: Test bench to check reinterleave function on DP level
-- Usage:
-- > as 6
-- > run 2us
-- Remark:
-- This TB is only used to visually inspect the wave window to see
-- if all functions well on DP level. The actual reinterleaving itself
-- is verified more thoroughly in tb_common_reinterleave.
ENTITY tb_dp_reinterleave IS
GENERIC (
g_dat_w : NATURAL := 16;
g_nof_in : NATURAL := 4;
g_deint_block_size : NATURAL := 2;
g_nof_out : NATURAL := 4;
g_inter_block_size : NATURAL := 2;
g_use_complex : BOOLEAN := TRUE;
g_align_out : BOOLEAN := TRUE
);
END;
ARCHITECTURE rtl OF tb_dp_reinterleave IS
TYPE t_dat_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(g_dat_w-1 DOWNTO 0);
TYPE t_val_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC;
-----------------------------------------------------------------------------
-- Standard TB clocking, RST and control
-----------------------------------------------------------------------------
CONSTANT c_clk_period : TIME := 10 ns;
SIGNAL clk : STD_LOGIC := '1';
SIGNAL rst : STD_LOGIC;
SIGNAL tb_end : STD_LOGIC := '0';
SIGNAL cnt_ena : STD_LOGIC;
-----------------------------------------------------------------------------
--I/O streams
-----------------------------------------------------------------------------
CONSTANT c_input_val : NATURAL := 192;
CONSTANT c_input_inval : NATURAL := 64;
SIGNAL snk_in_arr : t_dp_sosi_arr(g_nof_in-1 DOWNTO 0);
SIGNAL snk_out_arr : t_dp_siso_arr(g_nof_in-1 DOWNTO 0);
SIGNAL src_out_arr : t_dp_sosi_arr(g_nof_out-1 DOWNTO 0);
BEGIN
-----------------------------------------------------------------------------
-- Standard TB clocking, RST and control
-----------------------------------------------------------------------------
clk <= NOT clk OR tb_end AFTER c_clk_period/2;
rst <= '1', '0' AFTER 3*c_clk_period;
-----------------------------------------------------------------------------
-- Generate g_nof_in test data streams with counter data
-----------------------------------------------------------------------------
cnt_ena <= '0', '1' AFTER 20*c_clk_period;
gen_cnt_dat : FOR i IN 0 TO g_nof_in-1 GENERATE
p_stimuli : PROCESS
VARIABLE v_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0) := (OTHERS=>'0');
BEGIN
WHILE TRUE LOOP
WAIT UNTIL rising_edge(clk);
proc_dp_gen_block_data(1, sel_a_b(g_use_complex, FALSE, TRUE), g_dat_w, g_dat_w, 0, 0, 0, c_input_val, 0, 0, '1', v_bsn, clk, cnt_ena, snk_out_arr(i), snk_in_arr(i));
proc_common_wait_some_cycles(clk, c_input_inval);
v_bsn := INCR_UVEC(v_bsn, 1);
END LOOP;
END PROCESS;
-----------------------------------------------------------------------------
-- The I/O of common_reinterleave and its lower level components operate
-- on the same data width share the same clock, so if g_nof_in>g_nof_out,
-- lower the effective input data rate accordingly by introducing gaps.
-----------------------------------------------------------------------------
p_cnt_dat_gaps : PROCESS
BEGIN
snk_out_arr(i).xon <= '1';
snk_out_arr(i).ready <= '0';
WAIT FOR c_clk_period * (ceil_div(g_nof_in,g_nof_out) -1);
snk_out_arr(i).ready <= '1';
WAIT FOR c_clk_period;
END PROCESS;
END GENERATE;
-----------------------------------------------------------------------------
-- DUT
-----------------------------------------------------------------------------
u_reinterleave : ENTITY work.dp_reinterleave
GENERIC MAP (
g_nof_in => g_nof_in,
g_deint_block_size => g_deint_block_size,
g_nof_out => g_nof_out,
g_inter_block_size => g_inter_block_size,
g_dat_w => g_dat_w,
g_use_complex => g_use_complex,
g_align_out => g_align_out
)
PORT MAP (
rst => rst,
clk => clk,
snk_in_arr => snk_in_arr,
src_out_arr => src_out_arr
);
END rtl;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment