module jk_flip_flop( input clk, input preset, input clear, input j, input k, output reg q ); always @(posedge clk or negedge preset or negedge clear) begin if (!preset) q <= 1'b1; else if (!clear) q <= 1'b0; else begin case ({j,k}) 2'b00: q <= q; 2'b01: q <= 1'b0; 2'b10: q <= 1'b1; 2'b11: q <= ~q; endcase end end endmodule