module adff ( input d, clk, clr, output reg q ); initial begin q = 0; end always @( posedge clk, posedge clr ) if ( clr ) q <= 1'b0; else q <= d; endmodule module adffn ( input d, clk, clr, output reg q ); initial begin q = 0; end always @( posedge clk, negedge clr ) if ( !clr ) q <= 1'b0; else q <= d; endmodule module dffs ( input d, clk, pre, clr, output reg q ); initial begin q = 0; end always @( posedge clk, posedge pre ) if ( pre ) q <= 1'b1; else q <= d; endmodule module ndffnr ( input d, clk, pre, clr, output reg q ); initial begin q = 0; end always @( negedge clk, negedge pre ) if ( !pre ) q <= 1'b1; else q <= d; endmodule module top ( input clk, input clr, input pre, input a, output b,b1,b2,b3 ); dffs u_dffs ( .clk (clk ), .clr (clr), .pre (pre), .d (a ), .q (b ) ); ndffnr u_ndffnr ( .clk (clk ), .clr (clr), .pre (pre), .d (a ), .q (b1 ) ); adff u_adff ( .clk (clk ), .clr (clr), .d (a ), .q (b2 ) ); adffn u_adffn ( .clk (clk ), .clr (clr), .d (a ), .q (b3 ) ); endmodule