Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
99
Добавлен:
10.05.2015
Размер:
1.62 Mб
Скачать

1.3.3. Конфликт по данным.

При загрузке в конвейер последовательности команд арифметических и логических операций могут возникнуть конфликты по данным, если команда, находящаяся в конвейере требует операнд, который еще не вычислен предыдущей командой [л 5, л.8]. В результате конвейер должен быть остановлен до вычисления требуемого результата. При этом в конвейере образуется «пузырь».

Предположим, что в конвейере обрабатывается следующий фрагмент программы:

1. ADD R1 R2 R3

2. SUB R4 R1 R5

3. AND R6 R1 R5

4. OR R8 R1 R9

где R1,R2,R3 … R9 – адреса регистров регистровой памяти;

ADD, SUB, AND, OR – ассемблерные обозначения операций сложения, вычитания, логического И, логического ИЛИ соответственно.

На рис. 19 представлена временная диаграмма работы конвейера, обрабатывающего выше приведенный фрагмент программы.

Рис. 19

Функции ступеней соответствуют рис.17. Конфликт по данным будет иметь место в 4-м такте, когда команда SUB потребует от 3-й ступени чтения из памяти 1-го и 2-го операндов. Первый операнд должен быть выбран из регистра R1, но он будет вычислен командой ADD только в 5-м такте и записан в память в 6-м такте. Выполнение команды SUB должно быть приостановлено до получения в R1 правильного результата в 6-м такте. Возникновение «пузыря» можно избежать, используя принцип обходных цепей.

Который заключается в следующем (рис.20). Выход сумматора коммутируется не только на вход регистра результата (РР), но одновременно с помощью обходной цепи на вход регистра Р2. Таким образом, в 4-м такте команда SUB читает операнд только из R5, а второй операнд принимается на Р2 в том же такте через обходную цепь. Конфликт ликвидирован.

Включение обходной цепи осуществляется в тех случаях, когда при загрузке в конвейер команд происходит совпадение в соседних командах адресов источников и приемника операндов.

Рис.20

Конфликт по данным не всегда удается ликвидировать посредством дополнительных аппаратных средств. В ряде случаев требуется использовать программные средства (соответствующие компиляторы). Они предназначены для предварительного просмотра программы и перестановке команд с целью ликвидации конфликта. При этом не должна меняться логика выполнения программы. Такой прием удобен, когда в программе есть последовательность команд не связанная между собой по данным. Например, требуется составить программу вычисления следующего выражения:

a = b + c

d = e – f

LW1 Rb; b загрузить b в регистр Rb

LW2 Rc; c загрузить с в регистр Rс

ADD Ra Rb Rс сложить

LW3 Re; e загрузить e в регистр Re

LW4 Rf; f загрузить f в регистр Rf

SUB Rd Rc Rf вычесть

При данной последовательности команд временная диаграмма конвейера будет иметь следующий вид (рис.21).

Рис.21

Конфликт по данным возникает в 5-м такте, когда команда ADD должна прочитать оба операнда, которые будут загружены в регистровую память только в 5-м и 6-м тактах. Поскольку команды ADD и SUB не связаны по данным, можно не нарушая логику вычислений произвести следующую перестановку команд:

LW1 Rb ; b

LW2 Rc ; c

LW3 Re ; e

LW4 Rf ; f

ADD Ra Rb

SUB Rd Rc Rf

В результате получим временную диаграмму следующего вида (рис.22).

Рис.22

Команда ADD может выполняться, т.к. операнды b и c загружаются в регистровую память в5-м и 6-м тактах, а команда ADD их читает из памяти в 7-м такте. На этом участке программы «пузырь» ликвидирован. Однако, при выполнении команды SUB проблема конфликта по данным остается. Она может быть ликвидирована путем перестановки со следующими (если это возможно) командами программы.