module Avalon_ST_Bus (
    input wire snk_reset,    // Асинхронный сброс
    input wire snk_clock,    // Тактовый сигнал
    input wire snk_valid,    // Сигнал валидности данных
    input wire snk_sop,      // Начало пакета
    output reg [9:0] address, // 10-разрядный счетчик адреса
    output reg WE            // Сигнал записи в память
);

// Регистр для хранения состояния счетчика адреса
reg [9:0] counter_reg;

// Сброс счетчика адреса и сигнала записи при активном сбросе
always @(posedge snk_clock or posedge snk_reset) begin
    if (snk_reset) begin
        counter_reg <= 0;
        address <= 0;
        WE <= 0;
    end
    else if (snk_valid && snk_sop) begin
        // При переходе snk_sop из 0 в 1 увеличиваем счетчик адреса на 1
        if (counter_reg == 9) begin
            counter_reg <= 0;
            address <= 0;
            WE <= 1; // Устанавливаем сигнал записи
        end
        else begin
            counter_reg <= counter_reg + 1;
            address <= counter_reg;
            WE <= 1; // Устанавливаем сигнал записи
        end
    end
    else begin
        WE <= 0;
    end
end

endmodule