Жмакин А.П. Архитектура ЭВМ (2006) (1186252), страница 17
Текст из файла (страница 17)
При вертикальном способе кодирования в поле микроопераций помещается номер выполняемой микрооперации. При этом количество разрядов N, которое следует предусмотреть в поле микроопераций, определяется выражением: N = k^\og2n. Достоинство способа в экономном использовании памяти микрокоманд. Недостаток— в невозможности реализовать в микрокоманде более одной микрооперации.
Если реализуемые алгоритмы и структура OA таковы, что в каждом такте дискретного времени выполняется не более одной микрооперации, то вертикальный способ кодирования — оптимальное решение. В иных случаях можно попытаться преобразовать исходную микропрограмму к такому виду, чтобы в каждом такте выполнялось не более одной микрооперации. Например, если в микропрограмме (представленной в форме ГСА) имеется операторная вершина, в которой устанавливаются в исходное состояние несколько ячеек (элементов) памяти (и, следовательно, она включает несколько микроопераций), то ее можно заменить на несколько вершин, в каждой из которых устанавливается только один элемент с помощью одной микрооперации. Теперь можно применить вертикальный способ кодирования, правда, при этом увеличивается время реализации алгоритма.
Однако во многих случаях структура операционного автомата не допускает возможности разнесения во времени некоторых действий, управляемых различными микрооперациями. Тогда вертикальный способ кодирования поля микроопераций не применим.
Вертикальный и горизонтальный способы кодирования — две крайности. Истина обычно лежит "посередине". Рассмотрим смешанный способ кодирования, идея которого состоит в следующем. Если во всех микропрограммах, реализуемых УА, нет микрокоманды с большим, чем s , числом микроопераций, то в поле микроопераций можно предусмотреть s подполей разряд ностью к, в каждом из которых помещать номер нужной микрооперации Такой способ позволяет в любой микрокоманде реализовать произвольную s-ку микроопераций, т. е. сохранить гибкость горизонтального кодирования, при возможном значительном сокращении разрядности поля микроопераций: N = s-k = s\og2n. Так, для приведенного выше примера (« = 80, s = 6) определим к = 1 > log2 80, N = 7 • 6 = 42 (тоже, конечно, немало), что позволит почти вдвое сократить разрядность поля микроопераций по сравнению с горизонтальным способом кодирования.
Эффективность применения смешанного кодирования существенно зависит от значения s , которое может лежать в диапазоне 1 й s < п. При s = 1 имеем случай вертикального кодирования, при s - п — горизонтального.
Канонический способ смешанного кодирования, идея которого представлена выше, предполагает, что каждое из s подполей микроопераций содержит к разрядов, следовательно, в любом подполе можно закодировать любую микрооперацию у s Y. Возможно, например, построение микрокоманды, содержащей s одинаковых микроопераций у^^.-У/, что является явно бессмысленным.
С целью сокращения разрядности полей микроопераций множество микроопераций Y разбивается на подмножества Yx, Y2,Yp, такие, что
Каждое подполе поля микроопераций кодирует микрооперации только одного подмножества YtczY . Поскольку V|^-| <|у|, разрядность к, каждого из под-полей может быть меньше к . Очевидно, при "удачном" (пока скажем так) распределении микроопераций по подмножествам можно будет реализовать любую операторную вершину ГСА микропрограммы с помощью одной микрокоманды (т. е. достигнуть быстродействия, характерного для горизонтального способа кодирования), при этом значительно уменьшить разрядность поля микроопераций даже по сравнению с каноническим способом смешанного кодирования.
"Удачное" разбиение исходного множества микроопераций связано с понятием совместимости (несовместимости) микроопераций [7]. Некоторые из используемых в микропрограмме микроопераций могут выполняться параллельно во времени, в то время как другие — только последовательно. Свойство совокупности микроопераций, гарантирующее возможность их одновременного выполнения, называется совместимостью. Микрооперации, не обладающие указанным свойством, называются несовместимыми.
Рассматриваются два аспекта совместимости. Совместимость, обусловленная содержанием операторов, реализуемых под действием микроопераций, называется функциональной. Примером двух функционально несовместимых микроопераций могут взаимно несовместимые микрооперации. При проектировании УА возникает нопрос: какой тип совместимости микроопераций учитывать при разбиении исходного множества Y на подмножества?
Если несовместимыми считать только те микрооперации, которые принципиально нельзя реализовать на заданной (спроектированной) структуре OA, то таких пар окажется немного, большинство микроопераций будут попарно совместимыми, следовательно, их необходимо включать в разные подмножества. При этом число подмножеств р может превысить значение s и приближаться к п.
Если рассматривать в качестве совместимых только те микрооперации, которые размещаются в одной операторной вершине реализуемых алгоритмов, а все остальные считать несовместимыми, даже если их можно выполнить одновременно в структуре OA (но не требуется при реализации данных алгоритмов), то р —> s , эффективность кодирования будет значительно выше. Правда, если потребуется модифицировать реализуемый алгоритм или добавить еще группу алгоритмов для реализации, и в одной операторной вершине окажутся микрооперации, включенные ранее в одно подмножество, придется заново перепроектировать УА.
Разработано несколько формальных методов [7] разбиения множества микроопераций на подмножества. В простейшем случае можно воспользоваться методом "прямого включения". Рассмотрим пример проектирования УАПЛ по заданной микропрограмме.
Пример проектирования УАПЛ
Мы уже говорили, что исходным для проектирования УА является микропрограмма, представленная, например, в форме ГСА. На рис. 4.14 изображена некоторая микропрограмма, которую мы будем считать исходной для проектирования нашего автомата.
Заметим, что на этапе проектирования управляющего автомата семантика ГСА не рассматривается: сейчас нас уже не интересует "правильность" микропрограммы относительно реализуемого алгоритма. Просто имеется синтаксически правильно построенная ГСА и требуется разработать устройство, реализующее это поведение.
В качестве управляющего устройства будем проектировать управляющий микропрограммный автомат с программируемой логикой.
Общая структура такого устройства представлена на рис. 4.8. Исходя из описанных выше вариантов организации адресации и способов кодирования поля микроопераций, выберем естественную адресацию и смешанный способ кодирования микроопераций. Ограничимся единственным форматом микрокоманды.
Определение формата микрокоманды
На разрядность полей микрокоманды влияют следующие параметры:
□ количество различных микроопераций, формируемых УА, в конечном итоге определяет (с учетом выбранного способа кодирования) длину поля микроопераций;
□ количество различных логических условий определяет длину поля л:;
□ количество вершин ГСА связано с общим числом микрокоманд, а следовательно, с объемом памяти микропрограмм и разрядностью поля адреса микрокоманды.
Множество микроопераций У, используемых в заданной ГСА — Y\У\*Уг»У\э}* мощность множества |г| = 13. При горизонтальном кодировании поле микроопераций будет занимать 13 разрядов. Вертикальный способ кодирования микроопераций к заданной ГСА неприменим, поскольку ГСА содержит вершины с двумя и тремя микрооперациями. Попробуем реализовать разбиение множества Y на подмножества несовместимых микроопераций. Воспользуемся методом прямого включения, учитывая, что отношение совместимости задано на самой ГСА. Строго говоря, следовало бы построить матрицу совместимости микроопераций, но в рассматриваемом примере небольшой размер алгоритма позволяет определять отношение совместимости непосредственно по ГСА. На сколько подмножеств следует разбивать исходное множество? По меньшей мере, на 5 = 3 в нашем случае. Образуем три подмножества — Yx, Y2, Г3 и разместим в них микрооперации операторной вершины, имеющей s микроопераций. Если в ГСА таких вершин несколько— выберем любую из них.
Теперь разместим по множествам микрооперации следующей вершины, содержащей (в нашем случае) три микрооперации:
Заметим, что первая микрооперация второй рассматриваемой вершины совпадает с первой микрооперацией первой вершины. Она уже присутствует в множестве Yx (yxeYx), поэтому не включается вторично. Наконец, разместим микрооперации третьей "тройной" вершины:
Теперь нераспределенными остались микрооперации (некоторые) "двойных" и "одинарных" вершин. Вершина (у2, У(,)— обе микрооперации несовместимы с уже распределенными, поэтому могут располагаться произвольно, лишь бы они находились в разных подмножествах:
Вершина (у2, Уд)— Уд нельзя помещать в Yx, поскольку совместимая с ней у2 gYx. Подмножества лучше заполнять равномерно, поэтому разместим уд в У3:
Остались две нераспределенные микрооперации— у3 и ухо, первая из которых совместима с у5, поэтому ее нельзя помещать в Y2, а вторая несовместима ни с какими другими и может размещаться произвольно. Поместим их в множество, имеющее пока наименьшую мощность — Yx:
Все 13 микроопераций распределились по трем подмножествам, при этом выполняются условия (4.8) (т. е. имеет место разбиение исходного множества У), однако УА обычно должен вырабатывать еще одну микрооперацию, свидетельствующую об окончании выполнения алгоритма и предназначенную для использования не в OA, а в управляющем автомате верхнего уровня иерархии. Назовем эту микрооперацию ук и включим в произвольное множество (например, в У2), поскольку она, естественно, несовместима ни с одной микрооперацией. Итак, имеем следующее распределение: