FDC: D flip-flop with asynchronous clear

FDC is a D-type flip-flop with an asynchronous active-high clear (CLR).

If CLR is asserted, the Q output is set to 0. The data on the D input is otherwise loaded to the Q output on the low-to-high transition of the clock (C) input.

Verilog
module FDC(
  input CLR, D, C, 
  output reg Q);

  always @(posedge C or posedge CLR)
    if(CLR)
      Q <= 0;
    else
      Q <= D;
endmodule
VHDL
library IEEE;
use IEEE.std_logic_1164.all;

entity FDC is
  port (
    CLR, D, C : in  std_logic;
    Q         : out std_logic);
end entity FDC;

architecture A of FDC is
begin
  process (C, CLR) is
  begin
    if CLR = '1' then
      Q <= '0';
    elsif rising_edge(C) then
      Q <= D;
    end if;
  end process;
end architecture A;
Testbench
DUT {
   module FDC(input CLR, D, C, output Q)
   create_clock C
   [CLR, D] -> [Q]      // test async reset
   [CLR, D, C] -> [Q]   // test sync clocking
}

[1, .X] -> [0]          // async reset

[0,  1, .C] -> [1]      // 0->1 transition
[0,  0, .C] -> [0]      // 1->0 transition