//Modellierung eines jk-ff
//Autor: M. Erdem
//Mat.-Nr.: 8757524
//Datum: 21.02.2024

module jk_ff (
    //Ein- und Ausgänge anlegen
    R,
    CLK,
    EN,
    J,
    K,
    Q
);    
    input R, CLK, EN, J, K;
    output reg Q;

    //Verhaltensbeschreibung
    always @(R or posedge CLK) begin

        //Bei einem Reset soll Q auf 0 gesetzt werden
        if(R) begin
            Q <= 1'b0;

            //Wenn EN = 1 dann soll das Modul aktiv sein
        end else if (EN) begin

            //Zustände von J und K werden analysiert und entsprechend Q angesteuert.
            //Hierbei ist J Bit Nr. 1 und K ist Bit Nr. 0. (Von Rechts nach Links.)
            case ({J, K})
                2'b01: Q <= 1'b0;
                2'b10: Q <= 1'b1;
                2'b11: Q <= ~Q;
                default: ;
            endcase
        end
    end
endmodule