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.