Анализируемый метод пошагового контроля правильного хода выполнения программы основан на следующем. Каждому байту команды программы ставится в соответствие 4-разрядная двоичная комбинация, являющаяся избыточной частью систематического группового кода (12, 8, 3), информационной частью которого служит байт команды.
В ПЗУ СВК по адресу текущего байта программы хранится избыточная часть следующего байта команды программы. При каждом обращении к ПЗУ команд вычисляемая в данный момент избыточная часть байта команды сравнивается с избыточной частью, запомненной в ПЗУ СВК и считанной при предыдущем обращении к ПЗУ. При несовпадении фиксируется ошибка.
Данный метод контроля рассмотрим на примере конкретного микроконтроллера 1816ВЕ51.
В микроконтроллере 1816ВЕ51 в машинном цикле всегда происходит два обращения к ПЗУ программ. Для однобайтной команды, например, при втором обращении к ПЗУ будет выбран следующий байт, но на выполнение текущей команды он не повлияет. Этот байт будет выбран снова при выборке следующей команды. Таким образом, возможна ситуация выборки из ПЗУ дважды подряд по одному и тому же адресу. Байт ПЗУ СВК имеет структуру, показанную на рис. 4.41. Поле «Число пропускаемых байтов» указывает СВК, сколько обращений к ПЗУ должно выполняться без сравнения предсказанной и вычисленной избыточных частей. Поле «Блокировка» указывает на то, нужно или нет выполнять сравнения для данного обращения к ПЗУ.
Блокировка | Число пропускаемых | Избыточная часть | |||||
байтов | кода (12, 8, 3) | ||||||
Рис. 4.41. Структура байта СВК
Для правильной работы СВК необходимо учесть особенности выполнения следующих команд:
1. Команды условного перехода. Первые байты команд, на которые выполняются переходы, должны быть одинаковыми. При выполнении этого условия нужно перед этими командами вставить по одной пустой команде NOP. Можно избежать вставки, если по одному из переходов заблокировать сравнение избыточных частей.
2. Команды перехода на подпрограмму. Вызов одной и той же подпрограммы происходит из разных точек программы. Это означает, что возврат в общем случае выполняется на различные команды основной программы. Поэтому после команды вызова подпрограммы должна идти команда NOP и, значит, возврат всегда будет выполняться на одинаковые команды. Модификации программы можно избежать, если блокировать сравнение при обращении к соответствующим байтам.
3. Команды прерывания. Необходимо временно запоминать и восстанавливать эталонную избыточную часть байта, следующего за текущим. Поэтому в СВК следует ввести аппаратный стек. Для инициализации обмена со стеком выделяются первая и последняя команды подпрограммы обработки прерываний (признаки в поле выделенных команд).
На рис. 4.42 приведена функциональная схема СВК. ПЗУк хранит эталонные избыточные разряды байтов команд (0–3), бит управления селектором РМЕ (6), бит блокировки сравнения (7) и биты признаков выделенных байт команд (4, 5). Выбранные из ПЗУк по сигналу РМЕ ЦП избыточные разряды записываются в регистр Рк по фронту селектированного сигнала РМЕ (РМЕ1). В течение выборки текущего байта команды в Рк хранится избыточная часть этого байта, зафиксированная при предыдущем обращении к памяти команд. Содержимое Рк сравнивается схемой сравнения (СС) с избыточной частью выбираемого байта команды, формируемой кодером. Результат сравнения фиксируется в триггере ошибки Тош по срезу РМЕ1. При несовпадении на выходе Тош формируется короткий импульс.
Рис. 4.42. Функциональная схема СВК, реализующего пошаговый метод |
В случае прерывания программ при обращении к первому байту первой команды обработки прерывания содержимое Рк вводится в стек. Выполнение команды возврата из подпрограммы обработки прерывания разрешает подачу содержимого вершины стека на СС.
По фронту РМЕ1 выполняется вывод из стека.
Селектор РМЕ блокирует прохождение РМЕ на Рк, стек и Тош при исключении второго обращения к памяти команд.