Advertencia de FPGA verilog: trampa en reinicio

Al escribir la interfaz I2C, el código de análisis y síntesis de hoy, apareció una advertencia que no se había visto o rara vez se había visto antes, aquí hay un registro:

Mira el código primero:

//设备地址
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        device_addr_a <= {4'b1010,device_addr,1'b0};
    end
    else if(wr_flag) begin
        device_addr_a <= {4'b1010,device_addr,1'b0};
    end
    else if(rd_flag) begin
        device_addr_a <= {4'b1010,device_addr,1'b1};
    end
    else begin
        device_addr_a <= {4'b1010,device_addr,1'b0};
    end
end

consideración:

Advertencia (13004): Registros preajustables y borrables convertidos en circuitos equivalentes con pestillos. Registra el encendido en un estado indefinido y DEVCLRn coloca los registros en un estado indefinido.
    Advertencia (13310): El registro "device_addr_a [2]" se convierte en un circuito equivalente usando el registro "device_addr_a [2] ~ _emulated" y el pestillo "device_addr_a [2] ~ 1"
    Advertencia (13310): Registrar "device_addr_a [1]" se convierte en un circuito equivalente usando el registro "device_addr_a [1] ~ _emulated" y latch "device_addr_a [1] ~ 5"
    Advertencia (13310): El registro "device_addr_a [3]" se convierte en un circuito equivalente usando el registro "device_addr_a [3 ] ~ _emulado "y pestillo" device_addr_a [3] ~ 9 "

En esta advertencia, significa aproximadamente que el registro predefinido y borrable se ha convertido en un circuito equivalente con un pestillo.

Significa que el pestillo se genera de todos modos, y todos saben que en la pelea, el pestillo debe evitarse tanto como sea posible en el diseño de FPGA para evitar que recursos excesivos ocupen la estabilidad del circuito.

la razón:

En el código, esta señal se le da a un registro de datos específico cuando se reinicia. Cuando el circuito se reinicia, la señal se debe borrar a cero o preestablecer una cierta constante.

resolver:

Cambie la señal bajo restablecimiento a un cierto valor:

//设备地址
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        device_addr_a <= 0;
    end
    else if(wr_flag) begin
        device_addr_a <= {4'b1010,device_addr,1'b0};
    end
    else if(rd_flag) begin
        device_addr_a <= {4'b1010,device_addr,1'b1};
    end
    else begin
        device_addr_a <= {4'b1010,device_addr,1'b0};
    end
end

De esta forma, no habrá más errores en la recompilación.

 

Supongo que te gusta

Origin blog.csdn.net/qq_33231534/article/details/106385682
Recomendado
Clasificación