detección de secuencia continua

Tema Descripción

Escriba un módulo de detección de secuencia para detectar si la señal de entrada a satisface la secuencia 01110001, y cuando la señal satisface la secuencia, se proporciona una coincidencia de señal de indicación.

El diagrama de señal de interfaz del módulo es el siguiente:

El diagrama de tiempos del módulo es el siguiente:

Utilice Verilog HDL para lograr las funciones anteriores

Introduzca una descripción:

clk: señal del reloj del sistema

rst_n: señal de reinicio asíncrona, activa baja

a: señal de un solo bit, datos a detectar

Descripción de salida:

coincidencia: cuando la señal de entrada a satisface la secuencia objetivo, la señal es 1 y la señal es 0 en otros momentos

ideas para resolver problemas

Para determinar que la secuencia en serie es igual a la secuencia objetivo, primero es necesario convertir la secuencia en serie en un número igual al ancho de bits de la secuencia objetivo;

Entonces, nuestra idea es definir un registro de desplazamiento para recibir datos de entrada en serie y luego usar el registro de desplazamiento para comparar con la secuencia objetivo. El código de implementación específico es el siguiente:

`timescale 1ns/1ns
module sequence_detect(
    input clk,
    input rst_n,
    input a,
    output reg match
    );

    parameter    GOAL_SER = 8'b01110001 ;
    reg  [7:0]   sft_reg ;
    always@(posedge clk or negedge rst_n)begin
        if(~rst_n)begin
            sft_reg     <= 8'hFF ;   // 复位值给全1
        end else begin
            sft_reg  <= {sft_reg[6:0],a};    
        end
    end

    always@(posedge clk or negedge rst_n)begin
        if(~rst_n)begin
            match     <= 1'd0 ;
        end else if(sft_reg == GOAL_SER ) begin
            match    <= 1'b1 ;    
        end else begin
            match     <= 1'd0 ;
        end
    end  
endmodule

Preste atención a un detalle aquí, porque el bit más alto de la secuencia objetivo es 0 y nuestro registro de desplazamiento cambia de bajo a alto;

Si el reinicio es todo 0, entonces si la primera secuencia después del reinicio es 111001x, la secuencia objetivo en realidad no se cumple en este momento

Pero estar satisfecho será un error.

Supongo que te gusta

Origin blog.csdn.net/ypcan/article/details/129035424
Recomendado
Clasificación