Детальный проект конвейерного RISC процессора (Глава 5 "Обработка прерываний"), страница 25


5.7    Корректность аппаратуры прерываний

В этом разделе мы докажем, что конвейерная аппаратура DLXПвместе с допустимыми ISR выполняет вложенные прерывания точным способом. Для последовательной конструкции точность обработки прерываний – хорошо понятна. Поэтому мы сводим точный конвейерный механизм прерываний к одному из последовательных механизмов, показав, что конструкция DLXПмоделирует конструкцию DLXна любой непрерывной последовательности команд.

В первом шаге мы рассмотрим непрерывную последовательность команд I0 , ... , Ip , где I0 предшествует JISR и где Ipинициирует JISR. Во втором шаге покажем, что моделирование работает, когда объединяются различные последовательности. Что касается этих моделирований, отмененные команды и события внешних прерываний - проблема.

Отмененные команды

Между выборкой команды Ip , которая инициирует переход на ISR и фактически JISR, конструкция DLXПзапускает следующие команды Ip+1 ,..., Ip . Однако, эти команды отменяются JISR, прежде чем они достигнут этапа обратной записи (write back). Таким образом, что касается моделирования, мы рассмотрим последовательность P = I0 ,..., Ip ,..., Ip для конвейерной конструкции, и последовательность P' = I0 ,..., Ipдля последовательной конструкции.

События, вызывающие внешние прерывания

Асинхронны к выполнению команды и могут вызываться в любое время. Из-за конвейерного выполнения последовательность команд Pобычно быстрее выполняется в конструкции DLXПчем в конструкции DLX. Следовательно, для моделирования недостаточно назначить данное внешнее событие на фиксированный такт. Вместо этого последовательности команд Pи P' расширяются последовательностью внешних событий. Для любого внешнего прерывания ev[j], мы используем следующее присвоение, которое иллюстрировано в таблице 5.15:


Таблица 5.15 Назначение вызывающих внешние прерывания событий для непрерывной последовательности команд P

cycle

ev[j]    JISR

full.3    full.4

M    WB

T-1

0          0

T

1          0

0

T+1

1          0

0           0

_       _

1          0

0           0

-       -

t-1

1          0

1           0

Ii       -

t

1          0

1

         Ii


Пусть событие, вызывающее внешнее прерывание ev[j], устанавливается в течение цикла Tконвейерного выполнения P

ev[j]ПT-1 = 0    и ev[j]ПT = 1,

пусть t– первый цикл после T, для которого этап обратной записи полон, и пусть T ' + 1 – цикл в последовательном выполнении P' соответствующий циклу t, т.е.,

IП(4, t) = i = I(4, T ' + l).

В последовательном выполнении P, событие ev[j] тогда присваивается  такту T '

ev[j]T '= 1.

Так как внешние события собираются на этапе 3, велико искушение порассуждать о первом цикле ţ >= Tв котором этап 3 полон, т.е., i = IП (3, ţ). Для единственной непрерывной последовательности команд Pэто безразлично, поскольку команды, выполняемые на этапе 3, всегда пропускаются на этап 4 в конце цикла. Таким образом,

Однако, когда объединяются две последовательности P = I0 ,..., Ipи Q = J0 , J1 ,..., команды, выполняемые на этапе 3, могут отменяться JISR. Следовательно, это существенно в обсуждении выполнения команд на этапе 4. В примере из таблицы 5.16, внешнее событие ev[j] установлено, пока конструкция DLXПвыполняет переход на ISR. Когда обсуждается этап 3, внешнее событие присвоено команде Ip+1которая не имеет аналога в последовательном выполнении, поскольку, когда рассуждаем о этапе 4, событие присваивается первой команде последовательности Q.