Загрузка данных


module UserLogic(
    input clk_i,
    input nrst_i,
    input data_i,
    output reg trig_o);
    
    localparam S_IDLE = 3'b000,
               S_1  = 3'b001,
               S_10 = 3'b010,
               S_100 = 3'b011,
               S_1001= 3'b100,
               S_10011 = 3'b101,
               S_100111 = 3'b110;
               
    reg [2:0] state, next_state;
    
    // Регистр состояния
    always @(posedge clk_i or negedge nrst_i) begin
        if (!nrst_i)
            state <= S_IDLE;
        else
            state <= next_state;
    end
    
    // Логика выходов
     always @(posedge clk_i or negedge nrst_i) begin
        if (!nrst_i)begin
            trig_o <= 1'b0;
        end else begin
            if (next_state == S_100111)
                trig_o = 1'b1;
            else
                trig_o = 1'b0;
        end
    end
    
    // Логика переходов
    always @(*) begin
        case(state)
            S_IDLE: next_state = data_i ? S_IDLE : S_1;
            S_1: next_state = data_i ? S_1  : S_10;
            S_10:  next_state = data_i ? S_IDLE : S_100;
            S_100: next_state = data_i ? S_1001 : S_IDLE;
            S_1001: next_state = data_i ? S_10011 : S_10;
            S_10011: next_state = data_i ? S_100111 : S_10;
            S_100111: next_state = data_i ? S_1 : S_10;
            default: next_state = S_IDLE;
        endcase
    end
endmodule