Programador JTAG usando Zedboard - ¿Problemas de integridad de la señal?

Estoy tratando de construir mi propio programador JTAG usando Zedboard pero estoy atascado con problemas de hardware.

Para el lado de Zedboard, estoy usando los pines XADC-GIO0, XADC-GIO1, XADC-GIO2 y XADC-GIO3 como TCK, TDI, TDO y TMS. Restringí estos pines como LVCMOS25 ya que el JTAG de mi placa de destino tiene un VREF de 2.5V. En mi Zedboard, usé la configuración de puente para el Vadj a 2.5V.

Al programar la placa de destino con el Zedboard, simplemente conecto los 4 pines JTAG mediante cables del Zedboard a la placa de destino y levanto el TDO mediante una resistencia al VREF de la placa de destino. No tengo ningún chip de búfer o terminación de resistencias en serie o condensadores de desacoplamiento a tierra para los pines JTAG. Estaba pensando que TCK es de 1 MHz y no realmente tan alta velocidad para que se establezcan problemas de integridad de la señal.

Sin embargo, al emitir los comandos JTAG a la placa de destino, no puedo leer la ID del dispositivo correctamente; de ​​alguna manera, la salida TDO simplemente no es correcta.

Revisé la salida del Zedboard a la placa de destino varias veces y estoy seguro de que están emitiendo los bits correctos a la placa de destino. También verifiqué los tiempos de configuración y espera del TCK wrt TDI y tampoco hay nada malo allí. El Zedboard y la placa de destino se alimentan por separado con sus propios adaptadores de corriente, pero conecté algunos de los pines de tierra en ambas placas para tener una conexión a tierra común. (¿Otro error de novato o esto es normal?) El FPGA de la placa de destino también es un FPGA de Xilinx.

Si este es realmente un caso de problemas de integridad de la señal, ¿alguien puede aconsejarme cómo puedo resolverlo?

Gracias de antemano.

Actualización 20171004 1: Ok, me topé con el problema, pero no tengo idea de cómo solucionarlo. Aparentemente, el problema parece estar en TCK. Es la misma configuración pero eliminé la resistencia pullup de TDO. Ahora, cuando emito una ID de dispositivo de lectura y pruebo TCK (¡no TDO!) usando un osciloscopio, el FPGA de Zedboard informa la ID de dispositivo correcta. Cuando retiro la sonda del osciloscopio, la ID del dispositivo vuelve a ser incorrecta. Esto no es intermitente; colocar y quitar la sonda del osciloscopio en/desde el pin TCK, respectivamente, hace que el TDO se lea correcta o incorrectamente. ¿Alguna idea de cómo debería resolver esto?

Los pines FPGA de Zedboard son LVCMOS25 con Drive a 16ma.

Actualización 20171004 2: Ok, agregué una resistencia pull-up en TCK (sin resistencia pull-up en TDO) y la ID del dispositivo se lee correctamente cada vez. Todavía no he configurado con éxito el FPGA de destino, pero supongo que al menos la parte de integridad de la señal parece estar un poco domesticada por ahora.

Actualización 20171005: Ok, finalmente encontré el problema. Resulta que mi pin TMS se asignó a XADC-GIO3 (Pin J15) y este pin era el problema. Todos los demás pines H15, R15 (respectivamente TCK, TDI) tienen un Vpp de 2,5 V, mientras que J15 solo tiene ~ 1 punto y algo de voltios. ¡Convertí esto en un pin de entrada intercambiando con TDO (K15) y todo salió bien! No se necesitan pares trenzados ni resistencias de terminación o pull-up en ninguna señal: TMS, TCK, TDI o TDO. Finalmente también pude programar la placa de destino con mi programador Zedboard JTAG.

probablemente, ¿cómo podemos ver su diseño y señales? ¿Utilizaste pares trenzados?
La única conexión entre el Zedboard y la placa de destino son los 4 pines JTAG (con el TDO subido al VREF de la placa de destino). Solo estoy usando 4 cables individuales para conectar los pines JTAG entre las dos placas. Otro cable conecta los pines de tierra de las dos placas para formar una tierra común. ¿Pares trenzados como al torcer los 4 cables juntos?
Me pregunto si estoy usando correctamente el VREF del tablero de destino.
¿Cuánto mide tu cable? ¿Qué tan rápidos son los tiempos de subida?
Unos 20 cm de largo. No medí los tiempos de subida en el lado del conector de la placa de destino. En el lado de Zedboard, supongo que son los tiempos de subida normales de Xilinx ZC7020 IO.

Respuestas (1)

Actualización 20171005: Ok, finalmente encontré el problema. Resulta que mi pin TMS se asignó a XADC-GIO3 (Pin J15) y este pin era el problema. Todos los demás pines H15, R15 (respectivamente TCK, TDI) tienen un Vpp de 2,5 V, mientras que J15 solo tiene ~ 1 punto y algo de voltios. ¡Convertí esto en un pin de entrada intercambiando con TDO (K15) y todo salió bien! No se necesitan pares trenzados ni resistencias de terminación o pull-up en ninguna señal: TMS, TCK, TDI o TDO. Finalmente también pude programar la placa de destino con mi programador Zedboard JTAG.