PietroBaima ha scritto:Volevi dire FPGA per generare QUALUNQUE forma d’onda che ti si sfrulla per la testa, no?

Ottima idea, ma come realizziamo il clock per una FPGA? Non vorrai mica usare un banale quarzo?
Io propongo di realizzare qualcosa del genere:
Sul lato A, prendiamo il diodo laser di un vecchio lettore CD e lo pilotiamo in tensione.
Sul lato B mettiamo un tunable diode laser termostatato con una cella peltier (del pilotaggio del TDL ne parliamo dopo).
Lato A e lato B entrano in un miscelatore ottico e il segnale risultante viene rilevato da un fotodiodo.
Come amplificatore a transimpedenza per il fotodiodo usiamo un LM741. Sul feedback dimentiamo la compensazione, così che se per caso i laser dovessero avere la stessa frequenza, ci pensa lui a generare l'oscillazione.
Con questo segnale entriamo nel comparatore di fase di un PLL, la cui referenza la ricaviamo da una normale al cesio.
L'uscita dello stesso si occupa di pilotare il TDL.
Visto che l'LM741 ce l'avevamo solo in package duale, usiamo il secondo come comparatore per squadrare il segnale, che finalmente entra nel clock-in della FPGA.
Come FPGA consiglio una Virtex Ultrascale+ (costa qualcosa, ma ci serve la potenza).
Nella FPGA instanziamo a mano un divider (che avremmo potuto realizzare nel PLL, ma volevamo la FPGA!) e anche se il compiler ci maledice, lo obblighiamo a fare clock-gating con una porta AND.
Usciamo su un GPIO, e visto che la Ultrascale+ già solo di consumo statico assorbe il 90% di quello che abbiamo a disposizione, configuriamo il driver d'uscita per la minima corrente disponibile (è un clock... a cosa vuoi che servano fianchi ripidi).
Dal GPIO usciamo con il clock per l'arduino (fa solo da buffer) e a sua volta poi entriamo nel 74hc93, che pilota un LED (in tensione).
All'arduino colleghiamo anche uno shield con sensore di luce ambientale, che rileva l'accensione del LED.
Se la frequenza di lampeggio del LED non è quella impostata, l'arduino correggerà il divisore nella FPGA.
Come protocollo di comunicazione tra i due consiglio di impacchettare frames I2C in una comunicazione SPI e mandarla su un ingresso LVDS il cui negativo lo mettiamo semplicemente a terra collegandolo ad un termosifone.