Muestreo de datos a 5MHz con reloj de 50Mhz en Verilog

0

Estoy intentando hacer un controlador para el termopar IC MAX31855. Mi FPGA funciona a 50MHz y este IC funciona a 5MHz, así que estoy usando un divisor de frecuencia para obtener la señal de reloj de 5MHz.

Ahora el IC está enviando a la FPGA sus 32 bits de datos, a 1 bit por ciclo de reloj. Así que no sé exactamente cómo muestrear este flujo de bits (5 MHz) con una señal de reloj de 50 MHz.

También estoy pensando en problemas de metastabilidad.

¿Alguna idea?

    
pregunta Jose de arimatea

1 respuesta

0

Usted dice que tiene un divisor de frecuencia. Pero eso es solo el comienzo. De hecho, hay que agregar un sincronizador para la entrada serie. Miré la hoja de datos y necesita una interfaz SPI sin la parte de transmisión. Eso significa que también necesita un chip select, convertidor serie / paralelo,. No voy a escribir eso para ti (después de todo eso es con lo que gano mi dinero), así que te daré los fragmentos más importantes:

  always @(posedge clk or negedge reset_n)
   begin
      if (!reset_n)
      begin
         ser_in_meta <= 1'b0;
         ser_in_sync <= 1'b0;     
      end
      else
      begin
         // Sync input on system clock 
         ser_in_meta <= ser_in;
         ser_in_sync <= ser_in_meta;
      end
   end

         // Divide by 10 counter
         if (clock_div==4'd9)
            clock_div <= 4'd0;
         else
            clock_div <= clock_div + 4'd1;

        // Symmetrical 1/10 system clock
        if (clock_div==4'd0)
           ser_clk <= 1'b0;
        else
           if (clock_div==4'd4)
              ser_clk <= 1'b1;

        if (sample)
        begin
           bit_count <= bit_count + 5'h1;
           // Receive: MS bit arrives first 
           shift_in  <= {shift_in[30:0],ser_in_sync};                    
        end        

   // pick up the data just before the falling clock edge 
   assign sample  = (clock_div==4'd9);

La hoja de datos de Maxim dice que los datos están cambiando a un máximo de 40 n después de la caída del borde del reloj. Así que recógelo justo antes.

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas