-- EMACS settings: -*- tab-width: 2; indent-tabs-mode: t -*- -- vim: tabstop=2:shiftwidth=2:noexpandtab -- kate: tab-width 2; replace-tabs off; indent-width 2; -- -- ============================================================================= -- Authors: Patrick Lehmann -- -- Testbench: Sorting Network: Bitonic-Sort -- -- Description: -- ------------------------------------ -- TODO -- -- License: -- ============================================================================= -- Copyright 2007-2015 Technische Universitaet Dresden - Germany -- Chair for VLSI-Design, Diagnostics and Architecture -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- ============================================================================= library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.NUMERIC_STD.all; use work.packages.all; entity sortnet_BitonicSort_tb is end entity; architecture tb of sortnet_BitonicSort_tb is constant INPUTS : POSITIVE := 8; constant KEY_BITS : POSITIVE := 8; constant DATA_BITS : POSITIVE := 8; subtype T_KEY is STD_LOGIC_VECTOR(KEY_BITS - 1 downto 0); type T_KEY_VECTOR is array(NATURAL range <>) of T_KEY; function to_kv(slm : T_SLM) return T_KEY_VECTOR is variable Result : T_KEY_VECTOR(slm'range(1)); begin for i in slm'high(1) downto slm'low(1) loop for j in slm'high(2) downto slm'low(2) loop Result(i)(j) := slm(i, j); end loop; end loop; return Result; end function; function to_slm(kv : T_KEY_VECTOR) return T_SLM is variable Result : T_SLM(kv'range, T_KEY'range); begin for i in kv'range loop for j in T_KEY'range loop Result(i, j) := kv(i)(j); end loop; end loop; return Result; end function; constant CLOCK_PERIOD : TIME := 10 ns; signal Clock : STD_LOGIC := '1'; signal KeyInputVector : T_KEY_VECTOR(INPUTS - 1 downto 0) := (others => (others => '0')); signal DataInputMatrix : T_SLM(INPUTS - 1 downto 0, DATA_BITS - 1 downto 0); signal DataOutputMatrix : T_SLM(INPUTS - 1 downto 0, DATA_BITS - 1 downto 0); signal KeyOutputVector : T_KEY_VECTOR(INPUTS - 1 downto 0); signal StopSimulation : STD_LOGIC := '0'; begin Clock <= Clock xnor StopSimulation after CLOCK_PERIOD; process begin wait until rising_edge(Clock); for i in 0 to 63 loop wait until rising_edge(Clock); for j in 0 to INPUTS - 1 loop KeyInputVector(j) <= std_logic_vector(unsigned(KeyInputVector(j)) + i + j); end loop; end loop; for i in 0 to 7 loop wait until rising_edge(Clock); end loop; StopSimulation <= '1'; wait; end process; DataInputMatrix <= to_slm(KeyInputVector); sort : entity work.sortnet_BitonicSort generic map ( INPUTS => INPUTS, KEY_BITS => KEY_BITS, DATA_BITS => DATA_BITS ) port map ( Clock => Clock, Reset => '0', DataInputs => DataInputMatrix, DataOutputs => DataOutputMatrix ); KeyOutputVector <= to_kv(DataOutputMatrix); process begin wait; end process; end architecture;