Аппаратные средства отладки
Начиная с ряда моделей i486, в процессоры стали включать тестовый интерфейс JTAG.
Стандарт IEEE 1149.1 Boundary Scan Architecture (архитектура сканирования границ), или интерфейс JTAG, разработан для тестирования сложных логических схем, установленных в целевое устройство. В данном случае тестированию подлежит внутренняя логика процессора.
Интерфейс имеет всего 4 сигнала:
- TMS (Test Mode Select – Выбор режима тестирования) – сигнал выбора тестового режима,
- TDI (Test Data Input – Входные данные тестирования) – входные данные в последовательном двоичном коде,
- TDO (Test Data Output) – выходные данные в последовательном двоичном коде,
- TCK (Test Clock – Синхроимпульсы тестирования) – сигнал синхронизации последовательных данных.
Эти сигналы образуют тестовый порт TAP (Test Access Port), через который тестируемое устройство подключается к тестирующему оборудованию. В задачу этого оборудования входит формирование последовательностей тестовых сигналов по программе тестирования, определенной разработчиком тестируемого устройства, и сравнение полученных результатов с эталонными. (Такие последовательности, как входные, так и выходные, иногда называют сигнатурами).
Работой порта управляет TAP-контроллер, использующий несколько специальных регистров порта.
Рисунок 4.45 – Цепочка устройств с интерфейсом JTAG
Один и тот же контроллер и порт могут использоваться для тестирования любого числа устройств, поддерживающих интерфейс JTAG. Для этого они соединяются в цепочку по входам и выходам данных тестирования, как показано на рисунке 4.45. А стандартный логический формат данных и сигналов управления позволяет контроллеру независимо общаться с каждым из устройств цепочки, при условии, конечно, исправности самих ячеек интерфейса JTAG.
Общая структурная схема организации поддержки интерфейса JTAG показана на рисунке 4.46. Тестируемая часть устройства (например, процессора) в этом случае имеет своих на входах и выходах (участвующих в тестировании) специальные ячейки BS Cell (Boundary Scan Cell – ячейки сканирования границ), содержащие в себе элементы памяти и переключатели.
Рисунок 4.46 – Организация поддержки интерфейса JTAG
Это позволяет отключать входы тестируемой логики от внешних цепей и подавать на них заранее известные сигналы, установленные предварительно в элементах памяти ячеек, или фиксировать в этих элементах поступающие извне входные сигналы в требуемый момент времени.
Аналогично, можно управлять и выходами тестируемого устройства, отключая их от внешних цепей с одновременной подачей в них сигналов из триггеров BS ячеек, или фиксировать в триггерах выходные сигналы тестируемого устройства в требуемый момент времени.
(В случае двунаправленных шин BS ячейка должна предварительно настраиваться на ввод или вывод, для чего для каждой такой шины имеется по дополнительной ячейке. На рисунке 4.46 такая ячейка обозначена как B/S’.)
Ячейки BS объединены в регистр BSR, обведенный на рисунке 4.46 пунктиром.
Кроме регистра BSR в схеме имеются регистры:
- DID – регистр идентификации устройства (Device Identification Register), имеющий 32-битную разрядность и содержащий в себе код производителя и номер версии, по которым контроллер может определить тип устройства,
- BPR – регистр транзита (Bypass Register), имеющий всего один бит и использующийся для транзитной передачи входных данных TDI через устройство, если оно не должно получать эти данные при объединении нескольких устройств в цепочку,
- IR – регистр команд (Instruction Register) – четырехразрядный регистр, использующийся для получения и хранения команд для контроллера, определяющих выполняемый тест.
Все эти регистры представляют собой независимые сдвигающие регистры, соединенные параллельно. На их входы поступают сигналы TDI, а с выходов – снимаются сигналы TDO. По каждому синхросигналу TCK данные сдвигаются на один бит (при соответствующем разрешающем сигнале контроллера). Данные на вход регистра DID не поступают.
Управляет работой регистров контроллер, представляющий собой синхронный конечный автомат, изменяющий свое состояние по сигналу TCK. Граф переходов этого автомата можно найти в [3] или в [5].Основные исполняемые им команды:
- EXTEST – предназначенная для проверки внешних соединений тестируемого устройства,
- SAMPLE – позволяющая зафиксировать состояния всех внешних сигналов или загрузить данные в ячейки регистра BSR,
- IDCODE – подключает к интерфейсу регистр DID для считывания содержимого регистра идентификации,
- BYPASS – предназначенная для подключения однобитного обходного регистра BPR и блокировки работы тестируемого устройства в режиме контроля,
- RUNBIST – запускающая встроенный тест процессора BIST (Build In Self Test, отдельный тест процессора, не увязываемый жестко с интерфейсом JTAG).
Контроллер TAP переводится в исходное состояние при включении питания или при удержании высокого уровня сигнала TMS не менее пяти тактов TCK.
Как уже отмечалось, при включенном тестовом режиме контроллер может логически отсоединять входы и выходы устройства от внешних выводов, задавать входные воздействия и считывать результаты с выходов, что и необходимо для тестирования как комбинационных, так и последовательностных схем. Причем делается все это с помощью только четырех названных выше сигналов.
Для интерфейса JТAG существует специальный язык описания устройств BSDL (Boundary Scan Description Language). Состав и порядок следования информационных и управляющих ячеек в регистре BSR специфичен для каждого устройства (для его определения и используется код идентификации устройства из регистра DID).
В процессорах, начиная с Pentium, имеется также дополнительный сигнал прерывания R/S#, по которому процессор переходит в зондовый режим отладки. В этом режиме с помощью дополнительных команд контроллера TAP возможен доступ к регистрам процессора.
4.6 Вопросы для самопроверки
1. Что такое Турбо дебаггер?
2. Для чего используется Турбо дебаггер?
3. Позволяет ли Турбо дебаггер вычислять выражения языков Си, Паскаль и Ассемблер?
4. Можно ли настраивать выводимую в Турбо дебаггере на экран информацию?
5. Что такое точка останова?
6. В чем заключается процесс отладки программы?
7. Что такое «обнаружение ошибки»?
8. Как ищется место возникновения ошибки?
9. Как определяется причина возникновения ошибки?
10. Как можно исправить ошибку?
11. Что такое трассировка программы?
12. Что такое обратная трассировка программы?
13. Что такое пошаговое выполнение программы?
14. Что такое просмотр переменных, точек останова и содержимого стека?
15. Чего турбо дебаггер не может сделать?
16. Из чего состоит главное меню Турбо дебаггера?
17. Что такое выпадающее меню?
18. Что можно сделать с помощью выпадающего меню?
19. Каким образом можно выбрать пункт главного меню?
20. Какими клавишами можно осуществить перемещение по меню Турбо дебаггера?
21. Можно ли использовать указатель мыши для работы с различными меню Турбо дебаггера?
22. Как можно выйти из меню?
23. Как можно вернуться в меню предыдущего уровня?
24. Как установить точку останова в программе?
25. Как можно выполнить одну исходную строку или команду программы?
26. Как можно выполнить одну исходную строку или инструкцию, пропуская вызовы процедур?
27. Как можно запустить программу на выполнение?
28. Что позволяет сделать локальное меню окна Breakpoints?
29. Что позволяет сделать локальное меню окна CPU?
30. Из каких областей состоит окно CPU?
31. Что отображается в области кода окна CPU?
32. Что отображается в области данных окна CPU?
33. Что отображается в области флагов окна CPU?
34. Что отображается в области регистров окна CPU?
35. Что отображается в области стека окна CPU?
36. Что позволяет сделать локальное меню окна File?
37. Что позволяет сделать локальное меню окна Log?
38. Что позволяет сделать локальное меню окна Module?
39. Что позволяет сделать локальное меню окна Clipboard?
40. Что позволяет сделать локальное меню окна Numeric Processor?
41. Что позволяет сделать локальное меню окна Variables?
42. Что позволяет сделать локальное меню окна Watches?
43. Как выйти из Турбо дебаггера?
44. Как получить подсказку по элементу окна?
45. Как индицируется место останова программы в Турбо дебаггере?
46. Как использовать окно Watches для наблюдения переменных?
47. Как в Турбо дебаггере посмотреть на экране результат выполнения отлаживаемой программы?
48. Как вернуться из окна просмотра результата выполнения программы?
49. Как узнать код возврата, с которым завершилась отлаживаемая программа?
50. Для чего можно использовать команду Inspect в Турбо дебаггере?
51. Как можно изменить значение переменной в отлаживаемой программе?
52. Какие имеются аппаратные средства отладки в микропроцессорах семейства х86?
53. Что такое интерфейс JTAG?
54. Какие сигналы используются в интерфейса JTAG?
55. Как включается цепочка отлаживаемых устройств по интерфейсу JTAG?
56. Как используются двунаправленные шины в интерфейсе JTAG?
57. Что такое BS ячейка в интерфейсе JTAG?
58. Как описываются устройства для интерфейса JTAG?
59. Что такое тестовый порт TAP?
60. Какие команды может выполнять контроллер TAP?
Литература
1. Кулаков В. Программирование на аппаратном уровне. Специальный справочник. – СПб: Питер, 2001. – 496 с.: ил.
2. Thomas Roden. Four Gigabytes in Real Mode. – Programmer’s Journal 7.6, 1989.
3. Intel Architecture Software Developer’s Manual, Volume1: Basic Architecture. – Intel Corp., 1999.
4. Intel Architecture Software Developer’s Manual, Volume1: Instruction Set Reference Architecture. – Intel Corp., 1999.
5. Intel Architecture Software Developer’s Manual, Volume1: System Programming. – Intel Corp., 1999.
6. Гук М. Процессоры Intel: от 8086 до Pentium II. – СПб: Питер, 1997. – 224 с.: ил.
7. Гук М. Процессоры Pentium II, Pentium Pro и просто Pentium. – СПб: Питер Ком, 1999. – 288 с.: ил.
8. Рудаков П.И., Финогенов К.Г. Программируем на языке ассемблера IBM PC. Изд. 3-е. – Обнинск: Изд-во «Принтер», 1999, – 495 с.: ил.
Учебное издание
Рощин Алексей Васильевич