Conectar FPGA a un chip externo y restricciones de tiempo

4

He diseñado un sistema con Artix-7 FPGA en un tablero personalizado. El objetivo es transferir datos de 32 bits a un chip externo incorporado cuyo bus de datos es un puerto inout . Primero, un poco de historia:

El chip externo está controlado por un reloj de 100MHz generado por el FPGA, llamémoslo o_clk . El FPGA genera este reloj a través de un MMCM en el generador de interfaz de memoria (MIG IP) utilizando el reloj del sistema diferencial de 200MHz. El o_clk se devuelve de la salida del FPGA y se le da a otra bola como un reloj de entrada, llamémoslo i_clk .

El chip externo recibe el o_clk y ve datos sobre el flanco ascendente de este reloj. Sin embargo, cuando el chip externo envía datos de vuelta a FPGA, el FPGA ve estos datos en el bucle de retorno i_clk . La idea detrás de hacerlo es que podemos tratar las comunicaciones como fuente síncrona, en ambas direcciones (recuerde, es un puerto inout ). Algo como abajo:

FPGA --> EC is synchronous to FPGA because FPGA generates clock
EC   --> FPGA is synchronous to EC because FPGA gets external clock (virtually from EC)

Para restringir este diseño, he usado i_clk para establecer los retrasos de entrada en el io_data y he usado o_clk para restringir la salida en el mismo io_data bus. Me he asegurado de que estoy usando un reloj reenviado ( create_generated_clock ) (usando el ODDR2) para la restricción set_output_delay .

Aquí están mis restricciones:

create_clock -period 10.000 -name i_clk -waveform {0.000 5.000} [get_ports i_clk]
set_clock_groups -name loopback_grp -asynchronous -group [get_clocks i_clk] -group [get_clocks o_clk]

set_input_delay -clock i_fx3_pclk -max 8.000 [get_ports io_fx3_fdata]
set_input_delay -clock i_clk -min 2.000 [get_ports io_data]

set_output_delay -clock o_clk -max 2.000 [get_ports io_data]
set_output_delay -clock o_clk -min -0.500 [get_ports io_data]

El sistema parece funcionar correctamente cuando lo ejecuto en hardware, pero aún tengo algunas dudas porque todavía soy un desarrollador de FPGA amateur y este es mi primer gran diseño de FPGA.

Mis preguntas son:

  1. ¿He diseñado un buen sistema?
  2. ¿Es correcto tratar la comunicación de EC - > ¿FPGA como fuente síncrona? (La otra dirección es la sincronización de origen porque FPGA proporciona reloj, si no me equivoco.)
  3. ¿Son correctas mis restricciones?
pregunta Vinay Madapura

0 respuestas

Lea otras preguntas en las etiquetas