Метод контроля с помощью алгебраических кодов

Анализируемый метод пошагового контроля правильного хода вы­полнения программы основан на следующем. Каждому байту команды программы ставится в соответствие 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 выполняется вывод из стека.

Селектор РМЕ блокирует прохождение РМЕ на Рк, стек и Тош при исключении второго обращения к памяти команд.

 



?>