-- ############################################################################ -- # Project : VHDL-Modellbibliothek # -- # # -- # Filename : parity.vhd # -- # # -- # Schaltung : Modul zur Generierung/Ueberpruefung der Paritaet # -- # # -- # Modell : parity # -- # # -- # # -- # # -- # Designer : Wolfgang Sehr; ueberarbeitet von Stefan Schmechtig # -- # Abteilung : Lehrstul fuer rechnergestuetzten Schaltungsentwurf # -- # Datum : 25.01.1995 # -- ############################################################################ -- ############################################################################ -- # IEEE PACKAGES # -- ############################################################################ Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; -- ############################################################################ ENTITY parity IS GENERIC(X :INTEGER := @BITBR); -- X := Breite des -- Datenvektors PORT(data_in : IN UNSIGNED ((X-1) DOWNTO 0); parity_gerade_in : IN STD_LOGIC; parity_ungerade_in : IN STD_LOGIC; parity_gerade_out : OUT STD_LOGIC; parity_ungerade_out : OUT STD_LOGIC ); -- data_in : Eingang fuer das auf die Paritaet -- : hin zu untersuchende Datenbitmuster -- parity_gerade_in : Eingang fuer gerade Paritaet -- parity_ungerade_in : Eingang fuer ungerade Paritaet -- parity_gerade_out : Ausgang fuer gerade Paritaet -- parity_ungerade_out : Ausgang fuer ungerade Paritaet END parity; ARCHITECTURE verhalten OF parity IS BEGIN PROCESS(data_in, parity_gerade_in, parity_ungerade_in) VARIABLE data_in_var : UNSIGNED ((X-1) DOWNTO 0); VARIABLE parity_gerade_in_var : STD_LOGIC; VARIABLE parity_ungerade_in_var : STD_LOGIC; VARIABLE parity_gerade_out_var : STD_LOGIC; VARIABLE parity_ungerade_out_var : STD_LOGIC; VARIABLE zaehler_int : INTEGER; VARIABLE zaehler_bin : UNSIGNED((X-1) DOWNTO 0); -- data_in_var : Variable fuer die am Eingang anliegenden -- : Daten, deren Paritaet untersucht werden soll -- parity_gerade_in_var : Eingang fuer gerade Paritaet -- parity_ungerade_in_var : Eingang fuer ungerade Paritaet -- parity_gerade_out_var : Ausgang fuer gerade Paritaet -- parity_ungerade_out_var : Ausgang fuer ungerade Paritaet -- zaehler_int : Variable fuer die Anzahl der 1'sen im ueber- -- : prueften Bitmuster der Daten im -- : INTEGER-Format -- zaehler_bin : Variable fuer die Anzahl der 1'sen im ueber- -- : prueften Bitmuster der Daten im -- : UNSIGNED-Format BEGIN data_in_var := data_in; parity_gerade_in_var := parity_gerade_in; parity_ungerade_in_var := parity_ungerade_in; zaehler_int := 0; IF (parity_gerade_in_var = parity_ungerade_in_var) THEN -- ----------------------------------------------------------------- -- unzulaessige Betriebsart -- ----------------------------------------------------------------- parity_gerade_out_var := NOT(parity_gerade_in_var); parity_ungerade_out_var := NOT(parity_ungerade_in_var); ELSE -- ----------------------------------------------------------------- -- Zaehlen der 1'sen im Bitmuster -- ----------------------------------------------------------------- FOR i IN 0 TO (X-1) LOOP IF (data_in_var(i) = '1') THEN zaehler_int := zaehler_int + 1; END IF; END LOOP; zaehler_bin := CONV_UNSIGNED(zaehler_int, zaehler_bin'LENGTH); -- ----------------------------------------------------------------- -- Ausgabe der Paritaet -- ----------------------------------------------------------------- IF (zaehler_bin(0) = '0') THEN parity_gerade_out_var := parity_gerade_in_var; parity_ungerade_out_var := parity_ungerade_in_var; ELSE parity_gerade_out_var := NOT(parity_gerade_in_var); parity_ungerade_out_var := NOT(parity_ungerade_in_var); END IF; END IF; -- -------------------------------------------------------------------- -- Zuweisung der Ausgangssignale -- -------------------------------------------------------------------- parity_gerade_out <= parity_gerade_out_var; parity_ungerade_out <= parity_ungerade_out_var; END PROCESS; END verhalten; CONFIGURATION CFG_parity OF parity IS FOR verhalten END FOR; END CFG_parity;