С помощью сигнатур

В данном разделе более детально рассматривается реализация метода блокового контроля с помощью сигнатур. В качестве конкретного микропроцессора выбран микроконтроллер 1816ВЕ51. Рассматриваемый метод блокового контроля правильности хода выполнения программы (функциональной модели МП системы) основан на сравнении в конце вы­деленного блока команд эталонной сигнатуры с вычисляемой сигнатурой. Сигнатура в нашем случае – результат поразрядного сложения по модулю два байтов команд на шине данных, выполняемых по разомкнутому пути программы (блоку программы). Программа должна быть написана так, чтобы в конце оцениваемого пути сигнатура равнялась нулю. СВК фикси­рует сигнал конца блока и сравнивает накопленную сигнатуру с нулем. Сигнал конца блока формируется СВК при выполнении команды

 

LCALL AC,

 

т.е. вызов подпрограммы по адресу, указанному во втором и третьем бай­тах команды, где АC – выделенные для СВК адреса из адресного простран­ства ПЗУ. СВК выделяет момент появления АC на адресной шине и стро­бирует сигнатуратор. По адресу АC в ПЗУ хранится команда RET (возврат из подпрограммы).

Рассмотрим пример. На рис. 4.45 приведена граф-схема фрагмента программы, где вершины соответствуют линейным участкам программы (в частном случае – одной команде), а на рис. 4.46 показана граф-схема этой программы с дополнительными командами, обеспечивающими равенство сигнатуры нулю в точках сравнения или требуемые значения в точках схождения и замыкания контуров (S4,5,6; S14,15; S3).

 

  Рис.4.45.Граф-схема фрагмента программы  

 

 

Выравнивание сигнатур выполняется при помощи команды

 

MOV direct,#data

 

Поле direct фиксировано и определяет адрес ячейки внутреннего ОЗУ, не используемой в рабочей программе. Меняя поле #data, можно до­биться требуемого значения сигнатуры. Если значение поля direct принять равным коду команды, то сумма по модулю два кода команды и поля direct равна нулю. В этом случае, чтобы после выполнения выравнивающей ко­манды сигнатура стала равной нулю, поле #data должно принять значение эталонной сигнатуры, полученное до выполнения этой команды.

Рассмотрим выделенный окружностью участок программы на рис. 4.46 (см. ниже). Пусть S4, S5, S6 – сигнатуры, вычисленные к моменту выполнения команд выравнивания по соответствующим путям. Пусть к моменту выполнения фазы 7 сигнатура S4,5,6 должна равняться нулю, неза­висимо от того, по какому пути выполнился переход к 7.

Определим data 1, data 2, data 3:

 

S4 + data 3 = 0, отсюда data 3 = S4;

S6 + data 2 + data 3 = 0, отсюда data 2 = S6 + S4;

S5 + data 1 + data 2 + data 3 = 0, отсюда data 1 = S5 + S6.

 

В случае прерывания программ необходимо запомнить сформиро­ванную сигнатуру в стеке, а после завершения подпрограммы обработки прерывания – восстановить ее в сигнатураторе. Предлагается организовать стек в ОЗУ ЦП. Первые команды подпрограммы обработки прерывания должны обеспечить ввод в стек текущей сигнатуры с учетом сигнатуры команд, выполняющих ввод в стек.

Оценим объем дополнительной памяти (М) для команд, обеспечи­вающих реализацию рассматриваемого метода контроля. Пусть D – число команд, на которые выполняется переход больше чем из одного места про­граммы (узловые команды), Si – число переходов к i-й узловой команде, С – число циклов в программе. Все команды, используемые для модифи­кации программы, трехбайтные.

 

  Рис. 4.46. Граф-схема программы с дополнительными командами

 

 

Каждое сравнение сигнатуры с 0 требует выполнения трех команд:

MOV direct, #data – обеспечивает нулевую сигнатуру;

LCALL AC – инициирует момент сравнения;

LJMP – обеспечивает продолжение рабочей программы.

Таким образом,

.

На рис. 4.47 приведена функциональная схема СВК, реализующая рассматриваемый блоковый метод контроля правильности хода выполне­ния программы для однокристального микроконтроллера 1816ВЕ51 как объекта контроля. Сигналы с шины данных ЦП поступают на первый вход, а сигналы из регистра сигнатуры (РгС) – на второй вход сумматора по mod2 (СМ). Результат сложения фиксируется по фронту сигнала РМЕ ЦП в РС. Содержимое РС может быть записано в ЦП через буфер Б или загру­жено из ЦП при выполнении команды MOV X. Для этого РС присваива­ется адрес Арс из адресного пространства внешнего ОЗУ. При загрузке РС переводится в третье состояние, это обеспечивает на втором входе сумма­тора все единицы и РгС < – D + 1...1.

 

Рис. 4.47. Функциональная СВК, реализующая блоковый метод контроля

Обращение к ПЗУ по адресу Ас вызывает стробирование схемы сравнения содержимого РгС с О (ССО), и триггер ошибки (Тош) форми­рует сигнал ошибки (Ош) в виде короткого импульса, если результат не равен нулю. Селектор адреса (СА) распознает адреса Ас и Арс. В микро­контроллере 1816ВЕ51 в машинном цикле всегда происходит два обраще­ния к ПЗУ программ. Для однобайтной команды, например, при втором обращении к ПЗУ будет выбран следующий байт, но на выполнение теку­щей команды он не повлияет. Этот байт будет выбран снова при выборке следующей команды. Таким образом, возможна ситуация выборки из ПЗУ дважды подряд по одному и тому же адресу. Предположим, что из-за де­фекта в некоторой ячейке ПЗУ произошло изменение содержимого. Обра­щение два раза подряд к одной и той же ячейке ПЗУ добавляет к сигнатуре 0. Нуль получается как в случае исправности, так и в случае неисправно­сти, т.е. СП не обнаруживает большую часть дефектов ПЗУ, нарушающих механизмы хранения и выборки. Для исключения этой ситуации СП не должен добавлять к сигнатуре код, полученный при повторном обращении к ячейке ПЗУ. Это достигается следующим образом. Вводится регистр ад­реса РА, фиксирующий по фронту сигнала РМЕ состояние адресной шины. Схема совпадения (СС) определяет, является ли текущий адрес таким же, как при предыдущем обращении к ПЗУ, сравнением состояний РА и шины А. Результат сравнения фиксируется в триггере ТС по срезу сигнала РМЕ. В случае совпадения ТС блокирует прохождение сигнала РМЕ на синхров­ход РгС.