Поведение процессора при выполнении команды в зависимости от режима, в котором он находится, страница 10

распознавание ошибки с сохранением состояния процессора и восстановление на последующем этапе.

MC68020 извещается об ошибке по обращению к памяти либо как  об ошибке адреса (диагностируется внутренней логикой), либо как об ошибке шины (диагностируется внешней логикой, как правило, устройством управления памятью или подсистемой памяти).  Состояние процессора сохраняется в стеке, как это описано в разделе 6.3.3

Ошибка шины, и может быть позднее восстановлено  командой  RTE, как это описано в разделе 6.3.11 Возврат из исключения.  Действиями, выполняемыми процессором после возврата, можно до  некоторой степени управлять путем манипулирования данными в  стековом окне исключения по ошибке шины, как это описано ниже.

MC68020 может столкнуться с ошибками либо в потоке команд, либо зафиксировать при доступе к данным.  Ошибки  доступа  к  данным фиксируются  по завершении цикла шины. Фиксация ошибок в потоке команд откладывается до того момента, пока процессор не попытается (если попытается вообще) использовать информацию,  которая не  была  получена в результате того, что цикл шины был отвергнут. Ошибка адреса может возникнуть только в  потоке  команд  и фиксируется до попытки выполнения цикла.

6.4.1 Специальное слово состояния

Существует несколько специальных регистров, сохраняемых в  составе стекового окна исключения по ошибке шины, в числе  которых есть внутреннее специальное слово состояния (см. Рис. 6-2). Это слово размещается со смещением $A в окнах обоих форматов, длинного и короткого ( см. 6.5.5 Короткое стековое окно ошибки шины и 6.5.6 Длинное стековое окно ошибки шины).

Рис. 6-2. Специальное слово состояния (SSW)

15  14  13  12  11  10  9   8   7   6   5  4  3  2  1  0

----T---T---T---T---T---T---T---T---T---T-----T---T--------¬

¦ FC¦ FB¦ RC¦ RB¦ 0 ¦ 0 ¦ 0 ¦ DF¦ RM¦ RW¦ SIZ ¦ 0 ¦ FC2-FC0¦

L---+---+---+---+---+---+---+---+---+---+-----+---+--------FC     - ошибка на ступени C конвейера команд

FB     - ошибка на ступени B конвейера команд

RC     - флаг повтора для ступени C конвейера команд

RB     - флаг повтора для ступени B конвейера команд

DF     - флаг ошибки/повтора для цикла данных  (*)

RM     - чтение-модификация-запись в цикле данных

RW     - чтение/запись в цикле данных: 1=чтение, 0=запись

SIZ    - код размера для цикла данных

FC0-FC2- адресное пространство для цикла данных

(*) 1= повторить ошибочный цикл шины , или выполнить отложенную предвыборку

0= не повторять цикл шины

Специальное слово состояния (SSW) определяет,  имела  ли  место ошибка в потоке команд, в потоке данных или в них обоих. Имеется по два бита состояния для ступеней B и  C  конвейера.  Флаги повтора (RB и RC) сигнализируют, что процессор должен повторить цикл шины для соответствующих ступеней во время выполнения  команды RTE. Это может происходить либо из-за отложенной  предвыборки, либо из-за сбоя, случившегося во время предвыборки. Биты ошибки (FB и FC) сигнализируют, что  процессор  попытался  воспользоваться ступенью (B или C) и обнаружил, что во время предвыборки для этой ступени произошла ошибка шины. Биты ошибки являются сугубо выходными и могут быть использованы для определения причины исключения по ошибке шины в процедуре его  обслуживания; при восстановлении состояния процессора по  команде  RTE

они игнорируются. Биты повтора указывают, корректны ли элементы конвейера команд и могут быть использованы процедурой  обслуживания при корректировке конвейера, обусловленной ошибкой (адреса или шины). Биты RB и RC используются  процессором  во  время выполнения команды RTE при организации циклов шины  для  каждой из ступеней; если при считывании стекового  окна  командой  RTE

окажется установленным в единицу хотя бы один из битов повтора, то процессор повторит ранее отвергнутые циклы шины  (или  отложенную предвыборку осуществит в первый раз). Если  бит  повтора сброшен, то предполагается, что для соответствующей ступени нет отложенной предвыборки и что образ  ступени  при  необходимости восстановлен или восполнен программно. При записи SSW в  стековое окно во время обработки исключения биты RB и/или  RC  будут установлены в единицу, если установлены в единицу соответствующие биты ошибки, либо если предвыборка для этой  ступени  находится в состоянии ожидания. Таким образом, по умолчанию  (иначе говоря, если процедура обслуживания не изменит  биты  RB  и/или

RC) процессор должен будет выполнить соответствующие циклы  шины. Адресное пространство для ошибок в потоке команд не  указывается явно, а является программным пространством уровня привилегированности, указанного в сохраненном регистре состояния.

Если произошло исключение по ошибке адреса, то биты ошибки, записываемые в стековое окно, не  будут  установлены  в  единицу, поскольку, как сказано выше, они устанавливаются только в  случае ошибки шины. В этом случае для определения причины сбоя надо использовать биты повтора. В зависимости от  состояния  конвейера, в единицу будут установлены либо оба бита RB и RC, либо только бит RB. Если желательно восстановить конвейер и  продолжить выполнение приостановленных команд, то следует программным путем поместить корректные данные потока команд в образы ступеней C и/или B (в зависимости от состояния битов повтора); после этого биты повтора должны быть сброшены).

Если бит DF в SSW установлен в единицу, то имела  место  ошибка при выборке данных. Если бит DF окажется установленным при считывании процессором стекового окна, то  ошибочный  цикл  чтения данных будет повторен; в противном случае считается, что ошибки данных не было или что ошибка была исправлена  программным  путем. SSW содержит также иную информацию, относящуюся к  выборке данных, в том числе признаки чтения/записи, чтения-модификациизаписи, размера операнда. Ошибки потоков данных и команд  могут находиться в состоянии ожидания обслуживания одновременно, поэтому процедура обслуживания  должна  уметь  обрабатывать  любые комбинации битов FC, FB, RC, RB и DF.

6.4.2 Отработка циклов шины

Существует два метода отработки ошибочных циклов  шины.  Первый состоит в программной эмуляции цикла, а второй -  в  повторении процессором цикла после устранения причины ошибки.