====== JK-Flip-Flop ====== ===== Model ===== -- ############################################################################ -- # Project : VHDL-Modellbibliothek # -- # # -- # Filename : jk_ff.vhd # -- # # -- # Schaltung : JK-Flip-Flops in waehlbarer Anzahl; mit demselben # -- # Taktsignal und Resetsignal fuer alle Flip-Flops # -- # # -- # # -- # Modell : jk_ff # -- # # -- # Designer : Wolfgang Sehr; ueberarbeitet von Stefan Schmechtig # -- # Abteilung : Lehrstul fuer rechnergestuetzten Schaltungsentwurf # -- # Datum : 04.04.1995 # -- ############################################################################ -- ############################################################################ -- # IEEE PACKAGES # -- ############################################################################ Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; -- ############################################################################ ENTITY jk_ff IS GENERIC ( X: INTEGER := @ANZAHL -- X: Anzahl der Flip-FLops ); PORT (@EING_J @EING_K @AUSG_Q @AUSG_NQ takt : IN STD_LOGIC; reset : IN STD_LOGIC ); -- j_x : J-Eingang fuer x-tes Flip-Flop -- : -- k_x : K-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 jk_ff; ARCHITECTURE dataflow OF jk_ff IS SIGNAL j_ein : UNSIGNED((X-1) DOWNTO 0); SIGNAL k_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); -- j_ein : internes Signal fuer J -- : -- k_ein : internes Signal fuer K -- : -- q : internes Signal fuer q -- : -- nq : internes Signal fuer nq BEGIN ${EING_ZUW_J} ${EING_ZUW_K} ${AUSG_ZUW_Q} ${AUSG_ZUW_NQ} komb: PROCESS(j_ein, k_ein, reset, q) VARIABLE ents : STD_LOGIC_VECTOR(3 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) & j_ein(i) & k_ein(i) & reset; CASE ents IS WHEN "0000" => q_next_var(i) := '0'; WHEN "0010" => q_next_var(i) := '0'; WHEN "0100" => q_next_var(i) := '1'; WHEN "0110" => q_next_var(i) := '1'; WHEN "1000" => q_next_var(i) := '1'; WHEN "1010" => q_next_var(i) := '0'; WHEN "1100" => q_next_var(i) := '1'; WHEN "1110" => q_next_var(i) := '0'; 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_jk_ff OF jk_ff IS FOR dataflow END FOR; END CFG_jk_ff; ===== Testbench ===== -- ############################################################################ -- # Project : VHDL-Modellbibliothek # -- # # -- # Filename : tb_${FILENAME}.vhd # -- # # -- # Schaltung : Testbench fuer JK-Flip-Flops in waehlbarer Anzahl; # -- # mit demselben Taktsignal und Resetsignal fuer # -- # alle Flip-Flops # -- # # -- # # -- # Designer : Wolfgang Sehr # -- # Abteilung : Lehrstul fuer rechnergestuetzten Schaltungsentwurf # -- # Datum : 04.04.1995 # -- ############################################################################ -- ############################################################################ -- # IEEE PACKAGES # -- ############################################################################ Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; -- ############################################################################ ENTITY TB_jk_ff IS GENERIC (X : INTEGER := ${ANZAHL} -- X: Anzahl der Flip-FLops ); END TB_jk_ff; ARCHITECTURE behaviour OF TB_jk_ff IS SIGNAL tb_j : UNSIGNED ((X-1) DOWNTO 0); SIGNAL tb_k : UNSIGNED ((X-1) DOWNTO 0); SIGNAL tb_q : UNSIGNED ((X-1) DOWNTO 0); SIGNAL tb_nq : UNSIGNED ((X-1) DOWNTO 0); SIGNAL tb_reset : STD_LOGIC; SIGNAL tb_takt : STD_LOGIC; -- tb_j : J-Signal fuer die einzelnen Flip-Flops -- : -- tb_k : K-Signal fuer die einzelnen Flip-Flops -- : -- tb_reset : Reset-Signal fuer alle Flip-Flops -- : -- tb_takt : Taktsignal fuer alle Flip-Flops -- : COMPONENT jk_ff PORT( ${TB_DEKL_EIN_J} ${TB_DEKL_EIN_K} ${TB_DEKL_AUS_Q} ${TB_DEKL_AUS_NQ} takt : IN STD_LOGIC; reset : IN STD_LOGIC ); END COMPONENT; BEGIN UUT: jk_ff PORT MAP (${TB_ZUW_EIN_J} ${TB_ZUW_EIN_K} ${TB_ZUW_AUS_Q} ${TB_ZUW_AUS_NQ} reset => tb_reset, takt => tb_takt ); clock: PROCESS BEGIN tb_takt <= '0'; WAIT FOR 10 ns; LOOP tb_takt <= NOT(tb_takt); WAIT FOR 10 ns; END LOOP; END PROCESS; res: PROCESS BEGIN tb_reset <= '1'; WAIT FOR 30 ns; LOOP tb_reset <= '0'; WAIT FOR 1000 ns; tb_reset <= '1'; WAIT FOR 30 ns; END LOOP; END PROCESS; stim_j: PROCESS BEGIN tb_j <= CONV_UNSIGNED(0, tb_j'LENGTH); WAIT FOR 33 ns; LOOP tb_j <= tb_j + '1'; WAIT FOR 33 ns; END LOOP; END PROCESS; stim_k: PROCESS BEGIN tb_k <= CONV_UNSIGNED(0, tb_k'LENGTH); WAIT FOR 47 ns; LOOP tb_k <= tb_k + '1'; WAIT FOR 47 ns; END LOOP; END PROCESS; END behaviour; CONFIGURATION CFG_TB_jk_ff OF TB_jk_ff IS FOR behaviour FOR UUT: jk_ff USE CONFIGURATION WORK.CFG_jk_ff; END FOR; END FOR; END CFG_TB_jk_ff; ===== Synopsys VSS Trace ===== tr tb_takt tr tb_reset tr tb_j tr tb_k tr tb_q tr tb_nq