-- ############################################################################ -- # 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;