synthesizeable_vhdl-model-library:demux

DEMUX

demux.vhd
-- ############################################################################
-- # Project    :    VHDL-Modellbibliothek				      #
-- #                                                                          #
-- # Filename   :    demux.vhd                                                #
-- #                                                                          #
-- # Schaltung  :    Demultiplexer mit parametrierbarer Anzahl von Datenein-  #
-- #                 gaenge und parametrierbarer Breite der Dateneingaenge    #
-- #                                                                          #
-- # Modell	:    demux                                                    #
-- #                                                                          #
-- #                                                                          #
-- # Designer   : Wolfgang Sehr; ueberarbeitet von Stefan Schmechtig          #
-- # Abteilung  : Lehrstul fuer rechnergestuetzten Schaltungsentwurf          #
-- # Datum      : 17.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 demux IS
	GENERIC (X : INTEGER := @ANZAHL; -- X: Anzahl der Dateneingaenge
		 Y : INTEGER := @BITBR   -- Y: Bitbreite der einzelnen Daten
		);   
 
	PORT	( ${DATEN_EIN}
		  sel		: IN  UNSIGNED (LOG_2(X) 	DOWNTO 0);
		  daten_aus 	: OUT UNSIGNED ((Y-1) 		DOWNTO 0)	
	    	);
 
		-- daten_ein	: Dateneingangsvektor
		--		:
		-- sel		: Eingangsport fuer die Auswahl der ent-
		--		: sprechenden Eingangsdaten
		--		:
		-- daten_aus	: Datenausgangsvektor
		--		:
END demux;
 
 
ARCHITECTURE dataflow OF demux IS
BEGIN
   PROCESS(sel, ${DAT_SENS})
   VARIABLE daten_ein_var	: UNSIGNED ((X*Y-1) 	DOWNTO 0);
   VARIABLE sel_var		: UNSIGNED (LOG_2(X) 	DOWNTO 0);
   VARIABLE daten_aus_var	: UNSIGNED ((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
	-- ------------------------------------------------------
	${DAT_ZUW}
	sel_var    	:= sel;
	-- ------------------------------------------------------
 
	-- ------------------------------------------------------
	-- eigentliche Beschreibung fuer den Demultiplexer
	-- ------------------------------------------------------
	daten_aus_var := CONV_UNSIGNED('0', daten_aus_var'LENGTH);
		-- Diese Zuweisung wird benoetigt, damit data_aus_var
		-- nicht mit Latches synthetisiert wird.
 
	FOR i IN 0 TO (X-1) LOOP
	   IF i = CONV_INTEGER(sel_var) THEN
	      daten_aus_var := daten_ein_var((Y*i+Y-1) DOWNTO (Y*i));
	   END IF;
	END LOOP;
	-- ------------------------------------------------------
 
	-- ------------------------------------------------------
	-- Zuweisung der Ausgangsports
	-- ------------------------------------------------------
	daten_aus <= daten_aus_var;
	-- ------------------------------------------------------
   END PROCESS;
END dataflow;
 
CONFIGURATION CFG_demux OF demux IS
    FOR dataflow
    END FOR;
END CFG_demux;
tb_demux.vhd
-- ############################################################################
-- # Project    :    VHDL-Modellbibliothek				      #
-- #                                                                          #
-- # Filename   :    tb_${FILEANME}.vhd                                       #
-- #                                                                          #
-- # Schaltung  :    Testbench fuer Demultiplexer mit parametrierbarer Anzahl #
-- #                 von Dateneingaengen und parametrierbarer Breite der      #
-- #                 einzelnen Dateneingaenge                                 #
-- #                                                                          #
-- # Modell	:    tb_demux                                                 #
-- #                                                                          #
-- # Designer   : Wolfgang Sehr                                               #
-- # Abteilung  : Lehrstul fuer rechnergestuetzten Schaltungsentwurf          #
-- # Datum      : 17.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_demux IS
	GENERIC (X : INTEGER := ${ANZAHL};   -- X: Anzahl der Dateneingaenge
		 Y : INTEGER := ${BITBR}     -- Y: Bitbreite der einzelnen Daten
		 );   
END TB_demux;
 
 
ARCHITECTURE behaviour OF TB_demux IS
SIGNAL tb_daten_ein	: UNSIGNED ((X*Y-1) 	DOWNTO 0);
SIGNAL tb_sel		: UNSIGNED (LOG_2(X) 	DOWNTO 0);
SIGNAL tb_daten_aus	: UNSIGNED ((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 demux
	PORT( ${TB_DATEN_EIN}
	      sel		: IN  UNSIGNED (LOG_2(X) 	DOWNTO 0);
	      daten_aus 	: OUT UNSIGNED ((Y-1) 		DOWNTO 0)	
	    );
END COMPONENT;
 
 
 
 
BEGIN
   UUT:   demux
	  PORT MAP( ${TB_DAT_ZUW}
		    sel		=>	tb_sel,
		    daten_aus	=>	tb_daten_aus
		  );
 
 
   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_demux OF TB_demux IS
   FOR behaviour
       FOR UUT: demux
	    USE CONFIGURATION WORK.CFG_demux;
       END FOR;
   END FOR;
END CFG_TB_demux;
trace_demux.vhd
tr tb_daten_ein
tr tb_sel
tr tb_daten_aus