-- ############################################################################ -- # Project : VHDL-Modellbibliothek # -- # # -- # Filename : d_ff.vhd # -- # # -- # Schaltung : D-Flip-Flops in waehlbarer Anzahl; mit demselben # -- # Taktsignal und Resetsignal fuer alle Flip-Flops # -- # # -- # # -- # Modell : d_ff # -- # # -- # Designer : Wolfgang Sehr; ueberarbeitet von Stefan Schmechtig # -- # Abteilung : Lehrstul fuer rechnergestuetzten Schaltungsentwurf # -- # Datum : 29.03.1995 # -- ############################################################################ -- ############################################################################ -- # IEEE PACKAGES # -- ############################################################################ Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; -- ############################################################################ ENTITY d_ff IS GENERIC ( X: INTEGER := @ANZAHL -- X: Anzahl der Flip-FLops ); PORT (@EING @AUSG_Q @AUSG_NQ takt : IN STD_LOGIC; reset : IN STD_LOGIC ); -- d_x : D-Eingang fuer x-tes Flip-Flop -- : -- q_x : Inhalt des x-ten Flip-Flops -- : -- nq_x : invertierter Inhalt des x-ten Flip-Flops -- : -- takt : Taktsignal fuer alle Flip-Flops -- : -- reset : Resetsignal fuer alle Flip-Flops -- : END d_ff; ARCHITECTURE dataflow OF d_ff IS SIGNAL d_ein : UNSIGNED((X-1) DOWNTO 0); SIGNAL q_next : UNSIGNED((X-1) DOWNTO 0); SIGNAL q : UNSIGNED((X-1) DOWNTO 0); SIGNAL nq : UNSIGNED((X-1) DOWNTO 0); -- d_ein : internes Signal fuer D -- : -- q : internes Signal fuer q -- : -- nq : internes Signal fuer nq BEGIN ${EING_ZUW} ${AUSG_ZUW_Q} ${AUSG_ZUW_NQ} komb: PROCESS(d_ein, reset, q) VARIABLE ents : STD_LOGIC_VECTOR(2 DOWNTO 0); VARIABLE q_var : UNSIGNED((X-1) DOWNTO 0); VARIABLE q_next_var : UNSIGNED((X-1) DOWNTO 0); VARIABLE nq_var : UNSIGNED((X-1) DOWNTO 0); BEGIN q_var := q; FOR i IN 0 TO (X-1) LOOP ents := q_var(i) & d_ein(i) & reset; CASE ents IS WHEN "000" => q_next_var(i) := '0'; WHEN "010" => q_next_var(i) := '1'; WHEN "100" => q_next_var(i) := '0'; WHEN "110" => q_next_var(i) := '1'; WHEN OTHERS => q_next_var(i) := '0'; END CASE; END LOOP; FOR i IN 0 TO (X-1) LOOP nq_var(i) := NOT(q_var(i)); END LOOP; q_next <= q_next_var; nq <= nq_var; END PROCESS; speicher: PROCESS(takt, q_next) BEGIN IF (takt'EVENT AND takt='1') THEN q <= q_next; END IF; END PROCESS; END dataflow; CONFIGURATION CFG_d_ff OF d_ff IS FOR dataflow END FOR; END CFG_d_ff;