La asignación bajo varios bordes individuales no es compatible con la síntesis

0

Estoy escribiendo un contador muy simple, y esto es lo que obtengo:

La asignación en varios bordes únicos no se admite para síntesis

¿Cuál es el problema con este código sencillo?

  always @(posedge clk_i) begin
    if(SPI_cnt == 35) begin                         
      SPI_cnt <= {6{1'b0}};                         
    end                                                     
    else begin                                              
      SPI_cnt <= SPI_cnt + 1'b1;                        
    end                                                     
  end 
    
pregunta Jose de arimatea

1 respuesta

0

Si escribe el código en este formulario, evitará cualquier ambigüedad. Es un poco más detallado, pero más fácil de revisar.

wire [5:0] SPI_cnt_next = (SPI_cnt == 35) ?                          
                          {6{1'b0}} :                         
                          SPI_cnt + 6'b000001;                        

always @(posedge clk_i) begin
  SPI_cnt <= SPI_cnt_next                                                     
end 

Esto no responde por qué su herramienta reconoce su código como una plantilla que rechaza, pero debe recordar que verilog no identifica explícitamente un flop, las herramientas "deducen" que desea un flop o un flop con una puerta de reloj, o un reinicio, desde el patrón de su verilog.

    
respondido por el Sean Houlihane

Lea otras preguntas en las etiquetas