Akisha11 / Dise-o-digital-en-HDL-

0 stars 0 forks source link

Subsistema de sincronización #2

Open Akisha11 opened 1 year ago

Akisha11 commented 1 year ago

crear e implementar en el proyecto el subsistema encargado del sorteo de los datos procesados por el subsistema de lectura e indicar el proceso consecuente.

Akisha11 commented 1 year ago
module sync_subsystem (
    input wire clk_50mhz, // señal de reloj principal de 50 MHz
    input wire reset, // señal de reset
    input wire in_signal, // señal de entrada que necesita sincronización
    output wire out_signal // señal de salida sincronizada
);

reg [2:0] state = 3'b000; // estado inicial
reg in_sync; // señal sincronizada
reg out_sync; // señal de salida sincronizada

// máquina de estados para sincronizar la señal de entrada
always @(posedge clk_50mhz or posedge reset) begin
    if (reset) begin
        state <= 3'b000; // estado de reinicio
        in_sync <= 1'b0; // señal sincronizada inicial
    end
    else begin
        case (state)
            3'b000: begin
                in_sync <= in_signal; // captura la señal de entrada
                state <= 3'b001; // pasa al siguiente estado
            end
            3'b001: begin
                in_sync <= in_signal; // sigue capturando la señal de entrada
                state <= 3'b010; // pasa al siguiente estado
            end
            3'b010: begin
                in_sync <= in_signal; // sigue capturando la señal de entrada
                state <= 3'b011; // pasa al siguiente estado
            end
            3'b011: begin
                in_sync <= in_signal; // sigue capturando la señal de entrada
                state <= 3'b100; // pasa al siguiente estado
            end
            3'b100: begin
                in_sync <= in_signal; // sigue capturando la señal de entrada
                state <= 3'b101; // pasa al siguiente estado
            end
            3'b101: begin
                in_sync <= in_signal; // sigue capturando la señal de entrada
                state <= 3'b110; // pasa al siguiente estado
            end
            3'b110: begin
                in_sync <= in_signal; // sigue capturando la señal de entrada
                state <= 3'b111; // pasa al siguiente estado
            end
            3'b111: begin
                in_sync <= in_signal; // sigue capturando la señal de entrada
                state <= 3'b000; // vuelve al estado inicial
            end
        endcase
    end
end

// retarda la señal de entrada para sincronizarla con la señal de salida
always @(posedge clk_50mhz or posedge reset) begin
    if (reset) begin
        out_sync <= 1'b0; // señal de salida sincronizada inicial
    end
    else begin
        out_sync <= in_sync; // retarda la señal de entrada para sincronizarla con la señal de salida
    end
end

assign out_signal = out_sync; // conecta la señal de salida sincronizada a la salida

endmodule