synthesizeable_vhdl-model-library:t-flip-flop

T-Flip-Flop

t_ff.vhd
-- ############################################################################
-- # Project    :    VHDL-Modellbibliothek				      #
-- #                                                                          #
-- # Filename   :    t_ff.vhd                                                 #
-- #                                                                          #
-- # Schaltung  :    T-Flip-Flops in waehlbarer Anzahl; mit demselben         #
-- #                 Taktsignal und Resetsignal fuer alle Flip-Flops          #
-- #                                                                          #
-- # Modell	:    t_ff                                                     #
-- #                                                                          #
-- #                                                                          #
-- # Designer   : Wolfgang Sehr                                               #
-- # Abteilung  : Lehrstuhl fuer Rechnergestuetzten Schaltungsentwurf         #
-- # Datum      : 29.03.1995                                                  #
-- ############################################################################
 
-- ############################################################################
-- #                        IEEE PACKAGES                                     #
-- ############################################################################
   Library IEEE;
   use IEEE.std_logic_1164.all;
   use IEEE.std_logic_arith.all;
-- ############################################################################
 
 
ENTITY t_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
		);
 
	-- t_x			: T-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 t_ff;
 
ARCHITECTURE dataflow OF t_ff IS
SIGNAL t_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);
 
	-- t_ein		: internes Signal fuer T
	--			:
	-- q			: internes Signal fuer q
	--			:
	-- nq			: internes Signal fuer nq
 
BEGIN
    ${EING_ZUW}
 
    ${AUSG_ZUW_Q}
 
    ${AUSG_ZUW_NQ}
 
 
    komb: PROCESS(t_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) & t_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) := '1';
		    WHEN "110"	=> 	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_t_ff OF t_ff IS
   FOR dataflow
   END FOR;
END CFG_t_ff;
tb_t_ff.vhd
-- ############################################################################
-- # Project    :    VHDL-Modellbibliothek				      #
-- #                                                                          #
-- # Filename   :    tb_t_ff.vhd                                              #
-- #                                                                          #
-- # Schaltung  :    Testbench fuer Toggle-Flip-Flops in waehlbarer Anzahl;   #
-- #                 mit demselben  Taktsignal und Resetsignal fuer           #
-- #                 alle Flip-Flops                                          #
-- #                                                                          #
-- # Modell	:    tb_t_ff                                                  #
-- #                                                                          #
-- #                                                                          #
-- # Designer   : Wolfgang Sehr                                               #
-- # Abteilung  : Lehrstuhl fuer Rechnergestuetzten Schaltungsentwurf         #
-- # Datum      : 30.03.1995                                                  #
-- ############################################################################
 
-- ############################################################################
-- #                        IEEE PACKAGES                                     #
-- ############################################################################
   Library IEEE;
   use IEEE.std_logic_1164.all;
   use IEEE.std_logic_arith.all;
-- ############################################################################
 
ENTITY TB_t_ff IS
	GENERIC (X : INTEGER := ${ANZAHL}   -- X: Anzahl der Flip-FLops
		);   
END TB_t_ff;
 
 
ARCHITECTURE behaviour OF TB_t_ff IS
SIGNAL tb_t		: 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_t			: Toggle-Signal fuer die einzelnen Flip-Flops
	--			:
	-- tb_reset		: Reset-Signal fuer alle Flip-Flops
	--			:
	-- tb_takt		: Taktsignal fuer alle Flip-Flops
	--			:
 
COMPONENT t_ff
	PORT( ${TB_DEKL_EIN}
	      ${TB_DEKL_AUS_Q}
	      ${TB_DEKL_AUS_NQ}
	      takt		: IN STD_LOGIC;
	      reset		: IN STD_LOGIC		
	    );
END COMPONENT;
 
BEGIN
   UUT:   t_ff
	  PORT MAP (${TB_ZUW_EIN}
 
		    ${TB_ZUW_AUS_Q}
 
		    ${TB_ZUW_AUS_NQ}
 
		    takt	=> tb_takt,
		    reset	=> tb_reset
		   );
 
  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: PROCESS
	 BEGIN
	    tb_t <= CONV_UNSIGNED(0, tb_t'LENGTH);
	    WAIT FOR 33 ns;
 
	    LOOP
	       tb_t <= tb_t + '1';
	       WAIT FOR 33 ns;
	    END LOOP;
	 END PROCESS;
 
END behaviour;
 
 
CONFIGURATION CFG_TB_t_ff OF TB_t_ff IS
   FOR behaviour
       FOR UUT: t_ff
	    USE CONFIGURATION WORK.CFG_t_ff;
       END FOR;
   END FOR;
END CFG_TB_t_ff;
trace_t_ff.vhd
tr tb_reset
tr tb_takt
tr tb_t
tb_q
tb_nq