synthesizeable_vhdl-model-library:mux

MUX

mux.vhd
-- ############################################################################
-- # Project    :    VHDL-Modellbibliothek				      #
-- #                                                                          #
-- # Filename   :    mux.vhd                                                  #
-- #                                                                          #
-- # Schaltung  :    Multiplexer mit parametrierbarer Anzahl von Datenaus-    #
-- #                 gaenge und parametrierbarer Breite der Datenausgaenge    #
-- #                                                                          #
-- # Modell	:    mux                                                      #
-- #                                                                          #
-- # Designer   : Wolfgang Sehr; ueberarbeitet von Stefan Schmechtig          #
-- # Abteilung  : Lehrstul fuer rechnergestuetzten Schaltungsentwurf          #
-- # Datum      : 23.03.1995                                                  #
-- ############################################################################
 
-- ############################################################################
-- #                        IEEE PACKAGES                                     #
-- ############################################################################
   Library IEEE;
   use IEEE.std_logic_1164.all;
   use IEEE.std_logic_arith.all;
-- ############################################################################
 
 
-- ############################################################################
-- #              Bibliotheks - SPEZIFISCHE  PACKAGES                         #
-- ############################################################################
   use WORK.local.all;
 
ENTITY mux IS
	GENERIC (X : INTEGER := @ANZAHL;   -- X: Anzahl der Datenausgaenge
		 Y : INTEGER := @BITBR     -- Y: Bitbreite der einzelnen Daten
		 );   
 
	PORT	( daten_ein 	: IN  UNSIGNED ((Y-1) 		DOWNTO 0);
		  sel		: IN  UNSIGNED (LOG_2(X) 	DOWNTO 0);
		  ${DATEN_AUS}	
	    	);
 
		-- daten_ein	: Dateneingangsvektor
		--		:
		-- sel		: Eingangsport fuer die Auswahl der ent-
		--		: sprechenden Ausgangsport fuer die Eingangs-
		--		: daten
		--		:
		-- daten_aus	: Datenausgangsvektor
		--		:
END mux;
 
ARCHITECTURE dataflow OF mux IS
BEGIN
   PROCESS(sel, daten_ein)
   VARIABLE daten_ein_var	: UNSIGNED ((Y-1) 	DOWNTO 0);
   VARIABLE sel_var		: UNSIGNED (LOG_2(X) 	DOWNTO 0);
   VARIABLE daten_aus_var	: UNSIGNED ((X*Y-1) 	DOWNTO 0) ;
 
	-- daten_ein_var	: Variable fuer den Eingangsvektor der Daten
	--			:   
	-- sel_var		: Variable fuer das Select-Signal
	--			:
	-- sel_int		: Variable fuer das Select-Signal im
	--			: Integerformat
	--			:
	-- daten_aus_var	: Variable fuer den Datenausgangsvektor
 
   BEGIN
	-- ------------------------------------------------------
	-- Eingangsports werden Processvariablen zugewiesen
	-- ------------------------------------------------------
	daten_ein_var 	:= daten_ein;
	sel_var    	:= sel;
	-- ------------------------------------------------------
 
	-- ------------------------------------------------------
	-- eigentliche Beschreibung fuer den Multiplexer
	-- ------------------------------------------------------
	daten_aus_var := CONV_UNSIGNED('0', daten_aus_var'LENGTH);
 
	FOR i IN 0 TO (X-1) LOOP
	   IF (i = CONV_INTEGER(sel_var)) THEN
	      daten_aus_var((Y*i+Y-1) DOWNTO (Y*i)) := daten_ein_var;
	   END IF;
	END LOOP;
	-- ------------------------------------------------------
 
	-- ------------------------------------------------------
	-- Zuweisung der Ausgangsports
	-- ------------------------------------------------------
	${DAT_ZUW}
	-- ------------------------------------------------------
   END PROCESS;
END dataflow;
 
CONFIGURATION CFG_mux OF mux IS
    FOR dataflow
    END FOR;
END CFG_mux;
tb_mux.vhd
-- ############################################################################
-- # Project    :    VHDL-Modellbibliothek				      #
-- #                                                                          #
-- # Filename   :    tb_${FILENAME}.vhd                                       #
-- #                                                                          #
-- # Schaltung  :    Testbench fuer Multiplexer mit parametrierbarer Anzahl   #
-- #                 von Dateneingaengen und parametrierbarer Breite der      #
-- #                 einzelnen Dateneingaenge                                 #
-- #                                                                          #
-- # Modell	:    tb_mux                                                   #
-- #                                                                          #
-- # Designer   : Wolfgang Sehr                                               #
-- # Abteilung  : Lehrstul fuer rechnergestuetzten Schaltungsentwurf          #
-- # Datum      : 23.03.1995                                                  #
-- ############################################################################
 
-- ############################################################################
-- #                        IEEE PACKAGES                                     #
-- ############################################################################
   Library IEEE;
   use IEEE.std_logic_1164.all;
   use IEEE.std_logic_arith.all;
 
   USE IEEE.math_real.all; 	-- wird fuer die Erzeugung von Zufallszahlen
				-- benoetigt 	
-- ############################################################################
 
 
-- ############################################################################
-- #              Bibliotheks - SPEZIFISCHE  PACKAGES                         #
-- ############################################################################
   use WORK.local.all;
 
ENTITY TB_mux IS
	GENERIC (X : INTEGER := ${ANZAHL};   -- X: Anzahl der Dateneingaenge
		 Y : INTEGER := ${BITBR}     -- Y: Bitbreite der einzelnen Daten
		 );   
END TB_mux;
 
 
ARCHITECTURE behaviour OF TB_mux IS
SIGNAL tb_daten_ein	: UNSIGNED ((Y-1) 	DOWNTO 0);
SIGNAL tb_sel		: UNSIGNED (LOG_2(X) 	DOWNTO 0);
SIGNAL tb_daten_aus	: UNSIGNED ((X*Y-1) 	DOWNTO 0);
 
	-- tb_daten_ein		: Dateneingangsvektor von der Testbench
	--			: erzeugt
	--			:
	-- tb_sel		: Select-Signal, von der Testbench erzeugt
	-- 			:
	-- tb_daten_aus		: Datenausgangsvektor vom UUT empfangen
	--			:
 
COMPONENT mux
	PORT( daten_ein 	: IN  UNSIGNED ((Y-1) 		DOWNTO 0);
	      sel		: IN  UNSIGNED (LOG_2(X) 	DOWNTO 0);
	      ${TB_DATEN_AUS}	
	    );
END COMPONENT;
 
 
BEGIN
   UUT:   mux
	  PORT MAP (daten_ein	=>	tb_daten_ein,
		    sel		=>	tb_sel,
		    ${TB_DAT_ZUW}
		   );
 
 
   stim_1: PROCESS
	   VARIABLE tb_daten_ein_int_var : INTEGER;
	   BEGIN
	      LOOP
	         tb_daten_ein_int_var := RAND;
	         tb_daten_ein <= CONV_UNSIGNED(tb_daten_ein_int_var,
					       tb_daten_ein'LENGTH);
	         WAIT FOR 200 ns;
	      END LOOP;
	   END PROCESS;
 
 
   stim_2: PROCESS
	   BEGIN
	      tb_sel <= CONV_UNSIGNED(0, tb_sel'LENGTH);
	      WAIT FOR 10 ns;
 
	      LOOP
		 tb_sel <= tb_sel + 1;
		 WAIT FOR 10 ns;
	      END LOOP;
	   END PROCESS;
 
END behaviour;
 
 
 
CONFIGURATION CFG_TB_mux OF TB_mux IS
   FOR behaviour
       FOR UUT: mux
	    USE CONFIGURATION WORK.CFG_mux;
       END FOR;
   END FOR;
END CFG_TB_mux;
trace_mux.vhd
tr tb_daten_ein
tr tb_sel
tr tb_daten_aus