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