Цитата(dvladim @ May 26 2009, 23:26)

А вот как разработчик JTAG-эмуляторов поясните пожалуйста такую вещь: как определить количество устройств в цепочке и длину регистра инструкций от каждого? Ведь в стандарте длина IR не регламентирована и только 2 младших разряда должны быть "01", а остальные жестко не определены.
Последовательность дейсвий такая:
1) STATE TEST-LOGIC-RESET.
2) IRSCAN много-много единиц (загоняем всех гарантированно в BYPASS)
3) DRSCAN какой-нить паттерн, потом много-много единиц, каптурим TDI. Считаем смещение накаптуренного от исходной посылки - это количество устройств, благо мы знаем заранее, что все в BYPASS, и в BYPASS все имеют однобитный DR, и ноль оттуда придет. На всякий пожарный проверяем, чтобы паттерн был на месте...
4) STATE TEST-LOGIC-RESET. Это состояние грузит согласно IEEE 1149.1 (6.1.2) во все IR команды IDCODE, какая бы она у кого не была. Кто не поддерживает - BYPASS.
5) DRSCAN <чо угодно длиной кол-во девайсов*32>, каптурим TDI.
6) В цикле разгребаем - если принят нулевой бит, то IDCODE не поддерживается, оно в BYPASS-е. Если не нулевой - то берем оставшиеся 31 бит IDCODE. И так, пока все девайсы цепочки не будут отработаны.
А вот длину IR каждого из девайсов, увы... Только уже по имеющимся IDCODам можно определить, если есть инфа кто есть кто.
Если тема интересна, то советую скачать IDCODE Reader с альтеры, он там в виде исходника на JAM STAPL, там все очень понятно. И, кстати, там кроме альтеры детектятся и ксилинксы какие-то несвежие, и лэтисы...