¿Por qué aparece "[Synth 8-5788] Registrarse en el módulo tiene tanto Establecer como restablecer con la misma prioridad" ADVERTENCIA en vivado y cómo resolverlo?

0

después de la síntesis en xilinx vivado, recibo la ADVERTENCIA:

  

[Synth 8-5788] El registro next_state_reg en el módulo example_code se establece y se reinicia con la misma prioridad. Esto puede causar desajustes de simulación. Considere reescribir el código.

¿Por qué recibo esta advertencia y cómo resolverla sin cambiar la lógica en el ejemplo de código siguiente?

always @(posedge clk or posedge rst) 
begin
    if(rst)
        state <= a;
    else
        state <= next_state;
end
always @(posedge clk or posedge rst)
begin
    if(rst)begin
        count = 1;
        wt_refresh = 0;
    end

    else begin
        case(state)
            a: begin                              
                wt_refresh = 0;
                if(in_put)
                   count = count;

                else if(count < hold*30)   
                   count = count+1;          

                else begin
                   count = 1;
                   next_state = b;
                   wt_refresh = 1;                                              
                end     
               end

            b: begin                                
                wt_refresh = 0;
                if(in_put)begin
                    count = 1;
                    next_state = a;
                    wt_refresh = 1;                                  
                end

                else begin
                    if(count != 20)       
                        count = count+1;                                 

                    else begin
                        count = 1;
                        next_state = c;
                        wt_refresh = 1;                            
                    end    
                end
               end

            c: begin                            
                wt_refresh = 0;
                if(in_put)
                    count = count;

                else if(count < hold*15)                        
                    count = count+1;                        

                else begin
                   count = 1;
                   next_state = d;
                   wt_refresh = 1;                       
                end 
               end

            d: begin                            
                wt_refresh = 0;
                if(in_put)begin
                    count = 1;
                    next_state = a;
                    wt_refresh = 1;                     
                end

                else begin
                    if(count != 20)     
                        count = count+1;                            

                    else begin
                        count = 1;
                        next_state = e;
                        wt_refresh = 1;
                    end  
                end
               end

            e: begin                            
                wt_refresh = 0;
                if(in_put)begin
                    count = 1;
                    next_state = a;
                    wt_refresh = 1;                     
                end

                else
                    next_state = e;

              end   
        endcase
    end
  end
    
pregunta Subhajit

2 respuestas

1

He visto ese error muchas veces y lo encuentro muy molesto y muy engañoso.

Lo obtienes si tienes registros y no los restableces todos. Por lo tanto, para resolverlo, agrega "next_state" a tu parte de restablecimiento.

Las versiones anteriores de Xilinx tenían un mejor mensaje de advertencia que decía que no todos los valores se restablecían.

    
respondido por el Oldfart
0

El comportamiento "next_state" no especificado en la cláusula "if (rst)" hará esto. Lo triste es que la mayoría del software de simulación lo perderá, y algún software de síntesis (Quartus) creará realmente un circuito falso con un comportamiento desconocido ... aunque con una advertencia.

    
respondido por el macman50

Lea otras preguntas en las etiquetas