FDPE: D flip-flop with clock Enable and asynchronous Preset
![]() |
FDPE is a D-type flip-flop with an active-high clock enable (CE), and an active-high asynchronous preset (PRE). If PRE is asserted, the Q output is set to 1. Otherwise, CE is examined during the low-to-high transition of the clock (C) input. If CE is asserted, the data on the D input is loaded to the Q output; otherwise, Q retains its previous value. |
Verilog
module FDPE(
input PRE, CE, D, C,
output reg Q);
always @(posedge C or posedge PRE)
if(PRE)
Q <= 1;
else if(CE)
Q <= D;
endmodule
VHDL
entity FDPE is
port (
PRE, CE, D, C : in std_logic;
Q : out std_logic);
end entity FDPE;
architecture A of FDPE is
begin
process (C, PRE) is
begin
if PRE = '1' then
Q <= '1';
elsif rising_edge(C) then
if CE = '1' then
Q <= D;
end if;
end if;
end process;
end architecture A;
Testbench
DUT {
module FDPE(input PRE, CE, D, C, output Q)
create_clock C
[PRE] -> [Q] // test async preset
[PRE, CE, D, C] -> [Q] // test sync operation
}
[1] -> [1] // async preset
[0, 1, 0, .C] -> [0] // clock to 0
[0, 0, 1, .C] -> [0] // output remains at 0
[0, 1, 1, .C] -> [1] // clock to 1
[0, 0, 0, .C] -> [1] // output remains at 1
[0, 1, 0, .C] -> [0] // clock to 0
[0, 0, 1, .C] -> [0] // output remains at 0
[1] -> [1] // async preset
