Estoy diseñando una PCB que se conecta a un Spartan-6 a través de un conector (placa Opal Kelly XEM). La PCB alberga algunos componentes analógicos que se comunicarán con la FPGA (ADC, DAC). La propia placa FPGA es completamente autónoma (tiene reloj propio, PLL,...).
Mis señales de entrada a la FPGA son:
Actualmente conecté todas estas entradas a los pines de datos FPGA (por ejemplo, L32P_0, L2N_0 y L3N_0/L3P_0, L66P_0, L66N_0, etc.)
Ahora me pregunto si debo conectar algunas o todas estas señales a la red de reloj global (GCLK), por ejemplo, L34P_GCLK19_0, L34N_GCLK18_0, etc.).
always @(posedge)
GCLK?L36P_GCLK15_0
y L36N_GCLK14_0
)?La red de reloj global en un FPGA es una red especialmente enrutada. Es un árbol 'equilibrado' que ofrece un sesgo mínimo entre los CLB. (¡Eso no es lo mismo que un retraso mínimo!).
En muchos FPGA, la red de reloj global termina en un MUX cuya salida solo va al pin de reloj de los registros en el CLB. En esas FPGA's es caro (en lógica y tiempo) o imposible usar el reloj para datos.
Los nuevos FPGA tienen muchos pines de E/S que funcionan en pares para hacer una entrada o salida diferencial. Es fundamental que utilice un 'par' para señales diferenciales. Definitivamente también tendrán un 'par' para la red de reloj global.
Para obtener más información, debe leer las hojas de datos de FPGA y prepararse para reservar unas horas para eso. La E/S de alta velocidad solo funciona si presta una atención meticulosa a esos detalles.
Diría que no es necesario enrutar señales que no sean de reloj a los pines de la red de reloj global. En caso de que dicha señal tenga un fanout alto, aún puede implementar un búfer global.
divB
papa
divB
papa