// File: FramerCtrl.v
// Generated by MyHDL 1.0dev
// Date: Mon Feb 15 21:03:52 2016


`timescale 1ns/10ps

module FramerCtrl (
    SOF,
    state,
    syncFlag,
    clk,
    reset_n
);
// Framing control FSM.
// 
// SOF -- start-of-frame output bit
// state -- FramerState output
// syncFlag -- sync pattern found indication input
// clk -- clock input
// reset_n -- active low reset

output SOF;
reg SOF;
output [2:0] state;
reg [2:0] state;
input syncFlag;
input clk;
input reset_n;

reg [7:0] index;





always @(posedge clk, negedge reset_n) begin: FRAMERCTRL_FSM
    if ((reset_n == 1'b0)) begin
        SOF <= 0;
        index <= 0;
        state <= 3'b001;
    end
    else begin
        index <= ((index + 1) % 8);
        SOF <= 0;
        casez (state)
            3'b??1: begin
                index <= 1;
                if (syncFlag) begin
                    state <= 3'b010;
                end
            end
            3'b?1?: begin
                if ((index == 0)) begin
                    if (syncFlag) begin
                        state <= 3'b100;
                    end
                    else begin
                        state <= 3'b001;
                    end
                end
            end
            3'b1??: begin
                if ((index == 0)) begin
                    if ((!syncFlag)) begin
                        state <= 3'b001;
                    end
                end
                SOF <= ($signed({1'b0, index}) == (8 - 1));
            end
            default: begin
                $finish;
            end
        endcase
    end
end

endmodule
