Estoy tratando de construir mi propio programador JTAG usando el 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. Restricto estos pines como LVCMOS25 ya que el JTAG de mi tablero objetivo tiene un VREF de 2.5V. En mi Zedboard, utilicé la configuración de puente para el Vadj a 2.5V.
Cuando programo la placa objetivo con el Zedboard, simplemente conecto las 4 clavijas JTAG con cables desde la zedboard a la placa objetivo y levante el TDO con una resistencia al VREF de la placa objetivo. No tengo ninguna terminación de chips de búfer o resistencias en serie ni condensadores de desacoplamiento a tierra para los pines JTAG. Estaba pensando que TCK es 1MHz y no realmente a esa velocidad para establecer problemas de integridad de la señal.
Al emitir los comandos JTAG a la placa de destino, no puedo leer la ID del dispositivo correctamente; de alguna manera, la salida de TDO no es correcta.
Revisé la salida del Zedboard a la tabla de destino varias veces y estoy seguro de que están emitiendo los bits correctos a la tabla de destino. También he comprobado la configuración y los tiempos de espera del TCK wrt TDI y no hay nada de malo allí también. La Zedboard y la placa de destino se alimentan por separado con sus propios adaptadores de alimentación, pero conecté algunas de las clavijas de conexión a tierra en ambas tablas para tener una conexión a tierra común. (¿otro error de Noob o 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, ¿puede alguien recomendarme 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 quité la resistencia de pullup de TDO. Ahora, cuando emito un ID de dispositivo de lectura y un TCK de prueba (¡no TDO!) Usando un osciloscopio, el FPGA de Zedboard reporta el ID de dispositivo correcto. Cuando quito 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 e 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 de pull-up en TCK (no hay resistencia de pull-up en TDO) y la identificación del dispositivo se lee correctamente cada vez. Todavía no he configurado correctamente el FPGA objetivo, pero creo que al menos la parte de integridad de la señal parece estar un poco controlada por ahora.
Actualización 20171005: Ok, finalmente encontré el problema. Resulta que mi pin TMS fue asignado a XADC-GIO3 (Pin J15) y este pin fue el problema. Todos los demás pines H15, R15 (respectivamente TCK, TDI) tienen un Vpp de 2.5V, mientras que J15 solo tiene ~ 1 punto-algo voltios. ¡Convirtí esto en un pin de entrada cambiando con TDO (K15) y todo salió bien! No hay necesidad de pares trenzados o resistencias de terminación o pull-up en ninguna señal: TMS, TCK, TDI o TDO. Finalmente, también pude programar la placa objetivo con mi programador JTAG de Zedboard.