Как прочитать регистр состояния Virtex 5 в цепочке JTAG?

Я работаю над XUPV5-LX110T и пытаюсь прочитать регистр состояния через JTAG. Я получаю неверные данные, но не понимаю почему. Кажется, я получаю все нули.

Я подозреваю, что это связано с порядком цепочки JTAG, но я не уверен, как мне следует настроить порядок команд, которые я посылаю.

Я знаю, что ямы TMS изменят состояние всех устройств в цепочке, но как вы перемещаете данные в FPGA, когда это последнее устройство в цепочке?

1 ответ

Решение

Я на самом деле работал на этом же устройстве. Если я прав, когда вы смотрите на цепочку JTAG в iMPACT, вы должны увидеть 5 устройств: два PROM, SystemAce и CPLD, а затем Virtex 5 в качестве последнего элемента в цепочке. Как это:

PROM -> PROM -> SysAce -> CPLD -> Virtex5

Чтобы успешно прочитать регистр состояния, вам нужно понять, как работает TAP-контроллер:

http://www.fpga4fun.com/images/JTAG_TAP.gif

Как вы сказали, сигналы TMS подключены ко всем устройствам в цепочке JTAG. То есть, если вы находитесь в состоянии Test-Logic-Reset и отправляете в 0 1 1 0 0, все устройства теперь будут в состоянии Shift-DR.

Затем вы захотите узнать размер всех регистров команд устройств в вашей цепочке JTAG. В этом случае два PROM имеют размер ИК 16 бит. SysAce и CPLD имеют размер IR 8 бит. Вы хотите знать эти размеры, чтобы знать, сколько данных нужно сдвинуть вниз по цепочке. Virtex 5 имеет размер ИК 10 бит.

Последний трюк для работы с JTAG заключается в том, что при отправке команд они передаются по TDI LSB в первую очередь. Но перенос данных в DR - это, прежде всего, MSB. Обязательно проверьте, какой путь указан в Руководстве по настройке Virtex 5.

С этими частями информации вы можете прочитать регистр состояния, как этот псевдокод:

unsigned int read_status_register {
  reset JTAG to Test-Logic-Reset by sending five 1s on TMS

  go into Shift-IR state

  // The order of this depends on your JTAG chain
  Send CONFIG_IN on TDI (these 10 bits will eventuall get pushed to the Virtex 5's IR)

  Send eight 1's to put the CPLD in BYPASS

  Send eight 1's to put the SysAce in BYPASS

  Send sixteen 1s to put the next PROM in bypass

  Send fifteen 1s to put the last PROM in bypass

  // As described in the configuration guide
  Send the last 1 on TDI while transitioning from Shift-IR to the Exit state

  Transition back to Test-Logic-Reset

  Transition to Shift-DR

  Shift in the command sequence (sync word, noop, read_status, noop, noop)

  Shift in 3 bits to push the command sequence past the other devices on the chain

  Shift in 1 more bit while transitioning to exit

  Transition to Shift-IR

  Shift in CONFIG_OUT

  Shift in 1's to put all devices in BYPASS like we did above

  Transition to Shift-DR

  Shift out 32-bits and save the data coming from TDO

  // Note that we can stop here because the FPGA is the last device
  // on the chain. Otherwise, you may need to shift in a couple of bits
  // to push the data past other devices on the chain

}

Как вы можете видеть, это в основном все о правильных переходах между состояниями и знании порядка отправки вещей. Удачи!

Другие вопросы по тегам