Design of Flip-Flops in VHDL VHDL Lab by Ravinder Nath Rajotiya - August 12, 2019August 12, 20190 Share on Facebook Share Send email Mail Print Print Table of Contents Toggle AIM :Objective:Synthesized of Latch and Flip-Flops in VHDLD LatchSR Flip-FlopSimulation of SR Flip-FlopD Flip-Flop SynchronousD Flip-Flop AsynchronousSynthesis of D-FF with asynchronous resetSimulation of Asynchronous Type D Flip-FlopJK Flip-FlopSimulation of JK Flip-Flop AIM : Design of Flip-Flops in VHDL Objective: To revise the basic theory behind the working of the flip flops To understand the syntax of VHDL To synthesize and simulate using VHDL Theory: The theory extend from latches to flip-flops. the basic similarity and differences between a latch and a flip-flop being: Sl Latch Flip-Flop 1 It is a 1-bit memory element It is also a 1-bit memory element 2 It is event based It is clock based 3 Asynchronous operation Synchronous operation 4 Operates n level triggered of enable /clock signal Operates triggering at edges of clock signal 5 VHDL sytax : if clock=’1’ then D else D end if; VHDL Syntax: If CLK’EVENT AND CLK=’1′ THEN If D=’1’ then Q Qbar Else Q Qbar End if; A flip-flop is used as a one bit storage element in the digital systems. The flip-flops are of various types as given below: SR Flip-Flop D Flip Flop T Flip-Flop JK Flip-Flop Synthesized of Latch and Flip-Flops in VHDL D Latch D Latch library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity d_latch is Port ( d : in STD_LOGIC; clock : in STD_LOGIC; q : out STD_LOGIC; q_bar : out STD_LOGIC ); end d_latch; architecture Behavioral of d_latch is signal x : std_logic; begin process(x,d, clock) begin if (clock=’1′) then x <= d; end if; q <= x; q_bar<= not x; end process; end Behavioral; Simulation of D-Latch SR Flip-Flop SR Flip-flop library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity sr_ff is Port ( RST : IN STD_LOGIC; S : in STD_LOGIC; R : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC; Q_BAR : out STD_LOGIC ); end sr_ff; architecture Behavioral of sr_ff is SIGNAL TMP, TMP_BAR: STD_LOGIC; begin PROCESS (RST, TMP,TMP_BAR,S,R,CLK) BEGIN IF (RST=’0′ ) THEN TMP <= ‘0’; TMP_BAR <= ‘1’; ELSIF CLK’EVENT AND CLK=’1′ THEN IF (S /= R) THEN TMP <= S; TMP_BAR <= R; ELSIF (S=’0′ and R=’0′) THEN TMP <= TMP; TMP_BAR <= TMP_BAR; ELSE TMP <= ‘Z’; TMP_BAR <= ‘Z’; END IF; END IF; Q <= TMP; Q_BAR <= TMP_BAR; END PROCESS; end Behavioral; Simulation of SR Flip-Flop Figure: Simulation of SR Flip-Flop D Flip-Flop Synchronous D Flip-Flop: The D-Flip-Flop code given below uses clock’even in the architecture. This will synthesize a synchronous D-Flip-Flop. It also requires the use of the sensitivity list which is part of process statement library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity D_FF is Port ( d : in STD_LOGIC; clock : in STD_LOGIC; q : out STD_LOGIC; q_bar : out STD_LOGIC ); end D_FF; architecture Behavioral of D_FF is signal x : std_logic; begin process (x,clock) begin if ( clock’event and clock = ‘1’ ) then x <= d; end if; q <= x; q_bar<= not x; end process; end Behavioral; In the above code if the sensitivity list was not assigned, the compiler will through a warning One or more signals are missing in the process sensitivity list. If we skip the sensitivity list, there is yet another way of writing the correct code using WAIT UNTIL as given below: D Flip-Flop Asynchronous The asynchronous design does not use the sensitivity list in the process statement. If we skip the sensitivity list, there is yet another way of writing the correct code using WAIT UNTIL as given below: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity d_ff_asynch is Port ( d : in STD_LOGIC; clock : in STD_LOGIC; q : out STD_LOGIC; q_bar : out STD_LOGIC ); end d_ff_asynch; architecture Behavioral of d_ff_asynch is signal x : std_logic; begin process begin WAIT UNTIL clock’EVENT and clock=’1′; x <= d; q <= x; q_bar<= not x; end process; end Behavioral; ———————————————————————– Synthesis of D-FF with asynchronous reset library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity d_ff_async is Port ( D : in STD_LOGIC; RST : in STD_LOGIC; CLOCK : in STD_LOGIC; Q : out STD_LOGIC; Q_BAR : out STD_LOGIC ); end d_ff_async; architecture Behavioral of d_ff_async is SIGNAL X : STD_LOGIC; begin PROCESS (X,RST, CLOCK) BEGIN IF RST=’0′ THEN x <= ‘0’; ELSIF CLOCK’EVENT AND CLOCK = ‘1’ THEN X <= D; END IF; Q <= X; Q_BAR <= NOT X; END PROCESS; end Behavioral; Simulation of Asynchronous Type D Flip-Flop Figure: Simulation of D Flip-Flop JK Flip-Flop JK flip-flop entity JK_FF is Port ( j : in STD_LOGIC; k : in STD_LOGIC; clk : in STD_LOGIC; q : out STD_LOGIC ); end JK_FF; architecture Behavioral of JK_FF is signal temp : std_logic; signal sel: std_logic_vector(1 downto 0); begin sel <= j&k; process (temp, sel ,clk) begin if clk’event and clk=’1′ then case sel is when “00” => temp <= temp; when “01” => temp <= ‘0’; when “10” => temp <= ‘1’; when “11” => temp <= not temp; when others => temp <= ‘Z’; end case; Q <= temp; end if; end process; end Behavioral; Simulation of JK Flip-Flop Figure: Simulation of JK Flip-Flop Share on Facebook Share Send email Mail Print Print