En Xilinx Vivado, desajuste de simulación entre las implementaciones de comportamiento y post-síntesis

0

Mientras se diseña PISO (paralelo en serie fuera) en Xilinx Vivado usando Verilog, la forma de onda de salida de la simulación de comportamiento (nivel RTL, pre-síntesis) muestra un valor correcto (salida deseada) pero post-síntesis o post-implementación funcional o simulación de tiempo está mostrando algunos resultados inesperados. Hay un ruido de alta frecuencia presente en el nuevo reloj (lento) cerca de ambos bordes en la simulación, que es el principal problema. ¿Cómo eliminar este ruido ahora? ¿Hay alguna manera de depurar netlist nivel post síntesis? He incluido mi código fuente como:

module PISOleft(
input clk, 
input rst,
input [3:0]din,

output reg dout, 

);

reg [3:0]temp;
reg [25:0]temp1;
reg slow1;
reg slow;



         initial
               begin
                   temp1=26'd0;
                   slow1=1'b0;
               end
           always@(posedge clk)
                    temp1<=temp1+1;
           always @(temp1)
                  begin
            if(temp1==26'b10111110101111000010000000)//clock divided by 50Mhz
                        begin
                         slow1<=slow1+1;
                         end
                     else
                         begin
                          slow1<=slow1;
                         end
               slow<=slow1;
                  end




  always @(posedge slow)       // speed
      begin
         if(rst==1'b1)         // condition
            begin
                 dout<=0;
                 temp<=din;
             end
         else
            begin
                dout<= temp[3];
                temp<={temp[2:0],1'b0};
             end
      end
  endmodule

La advertencia que estoy recibiendo en la síntesis es:

 [Synth 8-327] inferring latch for variable 'slow_reg'

Se muestra el ruido presente en mi nuevo reloj (lento):

    
pregunta Ravi Tiwari

2 respuestas

0

Para abordar su pregunta casi completamente diferente de su pregunta editada: necesita actualizar el valor de slow para cada a través del bloque always . Esto significa que debe tener un else para su if , incluso aunque desee que el valor permanezca igual. Aún debe indicar explícitamente slow <= slow como el caso de permanecer en el mismo.

Además, su diseño utiliza múltiples señales como relojes para flip-flops. Debe hacer que su creación de reloj lento basada en el contador sea un módulo separado y traer solo un reloj común a su módulo. Desea que la señal de entrada / salida sin reloj, sin reinicio de su módulo, use la misma señal de reloj para sus chanclas en cualquier sistema moderadamente complejo que necesite sintetizar y operar de manera confiable.

    
respondido por el user2943160
0

No puedes establecer el mismo registro desde múltiples bloques siempre. Deberá volver a escribir el módulo para que los registros solo se configuren desde un bloque siempre. La forma más sencilla de hacer esto es usar un bloque siempre para implementar toda la lógica.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas