Память

advertisement
Память
Память является необходимым компонентом любого компьютера. Без памяти не было бы
компьютеров, по крайней мере таких, какие есть сейчас. Память используется как для хранения
команд, которые нужно выполнить, так и данных.
Защелки
Чтобы создать один бит памяти, нам нужна схема, которая каким-то образом «запоминает»
предыдущие входные значения. Такую схему можно сконструировать из двух вентилей НЕ-ИЛИ, как
показано на рис. 3.21, а. Аналогичные схемы можно построить из вентилей НЕ-И. Мы не будем
упоминать эти схемы в дальнейшем, поскольку они, по существу, идентичны схемам с вентилями НЕИЛИ.
Рис. 3.21. Защелка НЕ-ИЛИ в состоянии 0 (а); защелка НЕ-ИЛИ в состоянии 1 (б); таблица истинности
для функции НЕ-ИЛИ (Й)
Схема, изображенная на рис. 3.21, а, называется SR-защелкой. У нее есть два
входа: S (setting — установка) и R (resetting — сброс). У нее также есть два дополнительных
выхода: Q и 𝑄̅ . В отличие от комбинационной схемы, выходные сигналы защелки не определяются
текущими входными сигналами.
Чтобы увидеть, как это осуществляется, предположим, что S=0 и R=0 (вообще они равны 0
большую часть времени). Чтобы провести доказательство, предположим также, что Q=0. Так как Q
возвращается в верхний вентиль НЕ-ИЛИ и оба входа этого вентиля равны 0, то его выход, Q, равен 1.
Единица возвращается в нижний вентиль, у которого в итоге один вход равен 0, а другой — 1, а на
выходе получается Q=0. Такое положение вещей, по крайней мере, состоятельно (рис. 3.21, а).
А теперь давайте представим, что Q=1, a R и S все еще равны 0. Верхний вентиль имеет входы 0
и 1 и выход 𝑄̅ (то есть 0), который возвращается в нижний вентиль. Такое положение вещей,
изображенное на рис. 3.21, б, также состоятельно. Положение, когда оба выхода равны 0,
несостоятельно, поскольку в этом случае оба вентиля имели бы на входе два нуля, что привело бы к
единице на выходе, а не к нулю. Точно так же невозможно иметь оба выхода равных 1, поскольку это
привело бы к входным сигналам 0 и 1, что вызывает на выходе 0, ане 1. Наш вывод прост: при
R=S=0 защелка имеет два стабильных состояния, которые мы будем называть 0 и 1 в зависимости от
Q.
А сейчас давайте рассмотрим действие входных сигналов на состояние защелки.
Предположим, что S принимает значение 1, в то в ремя как Q=0. Тогда входные сигналы верхнего
вентиля будут 1 и 0, что приведет к выходному сигналу 𝑄̅ =0. Это изменение делает оба входа в
нижний вентиль равными 0 и, следовательно, выходной сигнал равным 1. Таким образом, установка
S на значение 1 переключает состояние с 0 на 1. Установка R на значение 1, когда защелка находится
в состоянии 0, не вызывается изменений, поскольку выход нижнего вентиля НЕ-ИЛИ равен 0 и для
входов 10, и для входов 11.
Используя подобную аргументацию, легко увидеть, что установка S на значение 1 при
состоянии защелки 1 (то есть при Q=l) не вызывает изменений, но установка R на значение 1
приводит к изменению состояния защелки. Таким образом, если S принимает значение 1, то Q будет
равно 1 независимо от предыдущего состояния защелки. Сходным образом переход R на значение 1
вызывает Q=0. Схема «запоминает», какой сигнал был в последний раз: S или R. Используя это
свойство, мы можем конструировать компьютерную память.
Синхроные SR-защелки
Часто бывает удобно сделать так, чтобы защелка меняла состояние только в определенные
моменты. Чтобы достичь этой цели, мы немного изменили основную схему и получили синхронную
SR-защелку (рис. 3.22).
Рис. 3.22. Синхронная SR-защелка
Эта схема имеет дополнительный синхронизирующий вход, который обычно равен 0. Если этот
вход равен 0, то оба выхода вентилей И равны 0 независимо от S и R, и защелка не меняет состояние.
Когда значение синхронизирующего входа равно 1, действие вентилей И исчезает и состояние
защелки становится зависимым от S и R. Для обозначения того факта, что синхронизирующий вход
равен 1 (то есть состояние схемы зависит от значений S и R), часто используется термин
стробировать.
До сих пор мы скрывали, что происходит, если S=R=1. И по понятным причинам: когда и R, и S в
конце концов возвращаются к 0, схема становится недетерминированной. Единственное
состоятельное положение при S=R=1 — это Q=𝑄̅ =0, но как только оба входа возвращаются к 0,
защелка должна перейти в одно из двух стабильных состояний. Если один из входов принимает
значение 0 раньше, чем другой, оставшийся в состоянии 1 «побеждает», потому что когда один из
входов равен 1, он управляет состоянием защелки. Если оба входа переходят к 0 одновременно (что
маловероятно), защелка переходит в одно из своих состояний наугад.
Синхронные D-защелки
Чтобы разрешить неопределенность SR-защелки (неопределенность возникает в случае, если
S=R=1), нужно предотвратить появление подобной неопределенности. На рис. 3.23 изображена
схема защелки только с одним входом D. Так как входной сигнал в нижний вентиль И всегда является
обратным кодом входного сигнала в верхний вентиль И, ситуация, когда оба входа равны 1, никогда
не возникает. Когда D=1 и синхронизирующий вход равен 1, защелка переходит в состояние Q,= 1.
Когда D=0 и синхронизирующий вход равен 1, защелка переходит в состояние Q=0. Другими
словами, когда синхронизирующий вход равен 1, текущее значение D отбирается и сохраняется в
защелке. Такая схема, которая называется синхронной D-защелкой, представляет собой память
объемом 1 бит. Значение, которое было сохранено, всегда доступно на выходе Q. Чтобы загрузить в
память текущее значение D, нужно пустить положительный импульс по линии синхронизирующего
сигнала.
Рис. 3.23. Синхронная D-защелка
Триггеры (flip-flops)
Многие схемы выбирают значение на определенной линии в определенный момент времени и
запоминают его. В такой схеме, которая называется триггером, переход состояния происходит не
тогда, когда синхронизирующий сигнал равен 1, а во время перехода синхронизирующего сигнала с 0
на 1 (нарастающий фронт) или с 1 на 0 (задний фронт). Следовательно, длина синхронизирующего
импульса не имеет значения, поскольку переходы происходят быстро.
Подчеркнем еще раз различие между триггером и защелкой. Триггер запускается фронтом
сигнала, а защелка запускается уровнем сигнала. В литературе эти термины часто путаются. Многие
авторы используют термин «триггер», когда речь идет о защелке, и наоборот.
Существует несколько подходов к разработке триггеров. Например, если бы существовал
способ генерирования очень короткого импульса на нарастающем фронте синхронизирующего
сигнала, этот импульс можно было бы подавать в D-защелку. В действительности такой способ
существует. Соответствующая схема показана на рис. 3.24, а
Рис. 3.24. Генератор импульса (а); временная диаграмма для четырех точек на схеме(б)
На первый взгляд может показаться, что выход вентиля И всегда будет нулевым, поскольку
функция И от любого сигнала с его инверсией дает 0, но на самом деле ситуация несколько более
тонкая. При прохождении сигнала через инвертор происходит небольшая, но все-таки не нулевая
задержка. Данная схема работает именно благодаря этой задержке. Предположим, что мы
измеряем напряжение в четырех точках а, Ь, с и d. Входовый сигнал в точке а представляет собой
длинный синхронизирующий импульс (см. нижний график на рис. 3.24, б). Сигнал в точке b показан
над ним. Отметим, что этот сигнал инвертирован и подается с некоторой задержкой. Время
задержки зависит от типа инвертора и обычно составляет несколько наносекунд.
Сигнал в точке с тоже подается с задержкой, но эта задержка обусловлена только временем
прохождения сигнала (со скоростью света). Если физическое расстояние между а и с, например, 20
микрон, тогда задержка на распространение сигнала составляет 0,0001 нс, что, конечно,
незначительно по сравнению со временем, которое требуется на прохождение сигнала через
инвертор. Таким образом, сигнал в точке с практически идентичен сигналу в точке а.
Когда входные сигналы b и с подвергаются операции И, в результате получается короткий
импульс, длина которого (D) равна вентильной задержке инвертора (обычно 5 нс и меньше).
Выходной сигнал вентиля И — данный импульс, сдвинутый из-за задержки вентиля И (см. верхний
график на рис. 3 24, б). Этот временной сдвиг означает только то, что D-защелка активизируется с
определенной за-держкой после нарастающего фронта синхронизирующего импульса Он никак не
влияет на длину импульса. В памяти со временем цикла в 50 нс импульс в 5 нс (который сообщает,
когда нужно выбирать линию D) достаточно короткий, и в этом случае полная схема может быть
такой, какая изображена на рис. 3.25.
Рис. 3.25. D-триггер
Регистры
Существуют различные конфигурации триггеров. Например, по-другому устроен
восьмиразрядный триггер, изображенный на рис. 3.27. Здесь, в отличие от предыдущей схемы, у
восьми триггеров нет выхода (J и линий предварительной установки и все синхронизирующие линии
связаны вместе и управляются выводом 11. Инвертирующие входы аннулируются инвертором,
связанным с выводом 11, поэтому триггеры запускаются при переходе от 0 к 1. Все восемь сигналов
очистки также объединены, поэтому когда вывод 1 переходит в состояние 0, все триггеры также
переходят в состояние 0. Если вам не понятно, почему вывод 11 инвертируется на входе, а затем
инвертируется снова при каждом сигнале СК, то ответ прост: входной сигнал не имеет достаточной
мощности, чтобы запустить все восемь триггеров; входной инвертор на самом деле используется в
качестве усилителя.
Рис. 3.27. Восьмиразрядный триггер
Эта микросхема используется в качестве одного 8-разрядного регистра. Две такие микросхемы
могут работать параллельно, образуя 16-разрядный регистр. Для этого нужно связать
соответствующие выводы 1 и 11
Организация памяти
Хотя мы и совершили переход от простой памяти в 1 бит (см. рис. 3.23) к 8-разрядной памяти
(см. рис. 3.27), чтобы построить память большого объема, требуется другой способ организации, при
котором можно обращаться к отдельным словам. Пример организации памяти, которая
удовлетворяет этому критерию, показан на рис. 3.28. Эта память содержит четыре 3-битных слова.
Каждая операция считывает или записывает целое 3-битное слово. Хотя общий объем памяти (12
битов) ненамного больше, чем у нашего 8-разрядного триггера, такая память требует меньшего
количества выводов, и, что особенно важно, подобная организация применима при построении
памяти большого объема.
Рис. 3.28. Логическая блок-схема для памяти 4x3.
Хотя структура памяти, изображенная на рис. 3.28, может на первый взгляд показаться
сложной, на самом деле она очень проста благодаря своей регулярной структуре.
Она содержит 8 входных линий (3 входа для данных — l0, l1 и l2; 2 входа для адресов — А0 и А1;
3 входа для управления — CS (Chip Select — выбор элемента памяти), RD (для различия между
считыванием и записью) и ОЕ (Output Enable —разрешение выдачи выходных сигналов)) и 3
выходные линии для данных — О1, O2 и О3 - Такую память в принципе можно поместить в корпус с 14
выводами (включая питание и «землю»), а 8-разрядный триггер требует наличия 20 выводов.
Чтобы выбрать микросхему памяти, внешняя логика должна установить CS на 1, а также
установить RD на 1 для чтения и на 0 для записи. Две адресные линии должны указывать, какое из
четырех 3-битных слов нужно считывать или записывать. При операции считывания входные линии
для данных не используются. Выбирается слово и помещается на выходные линии для данных. При
операции записи биты, находящиеся на входных линиях для данных, загружаются в выбранное слово
памяти; выходные линии при этом не используются.
Микросхемы памяти
Преимущество памяти, изображенной на рис. 3.28, состоит в том, что подобная структура
применима при разработке памяти большого объема. Мы нарисовали схему 4x3 (для 4 слов по 3
бита каждое). Чтобы расширить ее до размеров 4x8, нужно добавить еще 5 колонок триггеров по 4
триггера в каждой, а также 5 входных и 5 выходных линий. Чтобы перейти от размера 4x3 к размеру
8x3, мы должны добавить еще четыре ряда триггеров по три триггера в каждом, а также адресную
линию А2. При такой структуре число слов в памяти должно быть степенью двойки для максимальной
эффективности, а число битов в слове может быть любым.
Рис. 3.30. Два способа организации памяти объемом 4 Мбит
При любом объеме памяти существует несколько различных способов организации
микросхемы. На рис. 3.30 показаны две возможные структуры микросхемы в 4 Мбит: 512 Кх8 и 4096
Kxl. (Размеры микросхем памяти обычно даются в битах, а не в байтах, поэтому здесь мы будем
придерживаться этого соглашения.) На рис. 3.30, а можно видеть 19 адресных линий для обращения
к одному из 219 байтов и 8 линий данных для загрузки или хранения выбранного байта.
На рис. 3.30, б используется другая схема адресации. Микросхема представляет собой матрицу
2048x2048 однобитных ячеек, что составляет 4 Мбит. Чтобы обратиться к микросхеме, сначала нужно
выбрать строку. Для этого N-битный номер этой строки подается на адресные выводы. Затем
устанавливается сигнал RAS (Row Address Strobe — строб адреса строки). После этого на адресные
выводы подается номер столбца и устанавливается сигнал CAS (Column Address Strobe — строб
адреса столбца). Микросхема реагирует на сигнал, принимая или выдавая 1 бит данных.
Сделаем небольшое замечание по поводу терминологии. На одних выводах высокое
напряжение вызывает какое-либо действие, на других — низкое напряжение. Чтобы избежать
путаницы, мы будем употреблять термин «установить сигнал»,когда вызывается какое-то действие,
вместо того чтобы говорить, что напряжение повышается или понижается. Таким образом, для одних
выводов установка сигнала значит установку на 1, а для других — установку на 0. Названия выводов,
̅̅̅ —
которые устанавливаются на 0, содержат сверху черту. Сигнал CS устанавливается на 1, а сигнал ̅𝐶𝑆
на 0. Противоположный термин — «сбросить».
ОЗУ и ПЗУ
Все виды памяти, которые мы рассматривали до сих пор, имеют одно общее свойство: в них
можно и записывать информацию, и считывать ее. Такая память называется ОЗУ (оперативное
запоминающее устройство). Существует два типа ОЗУ: статическое и динамическое. Статическое ОЗУ
конструируется с использованием D-триггеров. Информация в ОЗУ сохраняется на протяжении всего
времени, пока к нему подается питание.
В динамическом ОЗУ, напротив, триггеры не используются. Динамическое ОЗУ представляет
собой массив ячеек, каждая из которых содержит транзистор и крошечный конденсатор.
Конденсаторы могут быть заряженными и разряженными, что позволяет хранить нули и единицы.
Поскольку электрический заряд имеет тенденцию исчезать, каждый бит в динамическом ОЗУ должен
обновляться (перезаряжаться) каждые несколько миллисекунд, чтобы предотвратить утечку данных.
Существует несколько типов динамических ОЗУ. Самый древний тип — FPM (Fast Page Mode —
быстрый постраничный режим). Это ОЗУ представляет собой матрицу битов. В настоящее время
FPM замещено EDO (Extended Data Output — память с расширенными возможностями вывода),
которая позволяет обращаться к памяти еще до того, как закончилось предыдущее обращение.
И FPM, и EDO являются асинхронными. В отличие от них так называемое синхронное
динамическое ОЗУ управляется одним синхронизирующим сигналом. Данное устройство
представляет собой гибрид статического и динамического ОЗУ. Синхронное динамическое ОЗУ часто
используется при производстве кэш-памяти большого объема.
ОЗУ — не единственный тип микросхем памяти. Во многих случаях данные должны
сохраняться, даже если питание отключено (например, если речь идет об игрушках, различных
приборах и машинах). Более того, после установки ни про- граммы, ни данные не должны
изменяться. Эти требования привели к появлению ПЗУ (постоянных запоминающих устройств),
которые не позволяют изменять и стирать хранящуюся в них информацию.
Чтобы компаниям было проще разрабатывать новые устройства, основанные на ПЗУ, были
выпущены программируемые ПЗУ. В отличие от обычных ПЗУ, их можно программировать в
условиях эксплуатации, что позволяет сократить время выполнения заказа.
Следующая разработка этой линии — стираемое программируемое ПЗУ, которое можно не
только программировать в условиях эксплуатации, но и стирать с него информацию. Если кварцевое
окно в данном ПЗУ подвергать воздействию сильного ультрафиолетового света в течение 15 минут,
все биты установятся на 1.
Следующий этап — электронно-перепрограммируемое ПЗУ, с которого можно стирать
информацию, прилагая к нему импульсы, и которое не нужно для этого помещать в специальную
камеру, чтобы подвергнуть воздействию ультрафиолетовых лучей. Кроме того, чтобы
перепрограммировать данное устройство, его не нужно вставлять в специальный аппарат для
программирования, в отличие от стираемого программируемого ПЗУ, Но с другой стороны, самые
большие электронно-перепрограммируемые ПЗУ в 64 раза меньше обычных стираемых ПЗУ, и
работают они в два раза медленнее.
Более современный тип электронно-перепрограммируемого ПЗУ — флэш-память. В отличие от
стираемого ПЗУ, которое стирается под воздействием ультрафиолетовых лучей, и от электроннопрограммируемого ПЗУ, которое стирается по байтам, флэш-память стирается и записывается
блоками. Как и любое электронно-перепрограммируемое ПЗУ, флэш-память можно стирать, не
вынимая ее из микросхемы.
Микросхемы процессоров и шины
Микросхемы процессоров
Все современные процессоры помещаются на одной микросхеме. Это делает вполне
определенным их взаимодействие с остальными частями системы. Каждая микросхема процессора
содержит набор выводов, через которые происходит обмен информацией с внешним миром. Одни
выводы передают сигналы от центрального процессора, другие принимают сигналы от других
компонентов, третьи делают и то и другое. Изучив функции всех выводов, мы сможем узнать, как
процессор взаимодействует с памятью и устройствами ввода-вывода на цифровом логическом
уровне.
Выводы микросхемы центрального процессора можно подразделить на три типа адресные,
информационные и управляющие. Эти выводы связаны с соответствующими выводами на
микросхемах памяти и микросхемах устройств ввода-вывода через набор параллельных проводов
(так называемую шину).
Чтобы вызвать команду, центральный процессор сначала посылает в память адрес этой
команды по адресным выводам. Затем он запускает одну или несколько линий управления, чтобы
сообщить памяти, что ему нужно, например, прочитать слово. Память выдает ответ, помещая
требуемое слово на информационные выводы процессора и посылая сигнал о том, что это сделано.
Когда центральный процессор получает данный сигнал, он принимает слово и выполняет вызванную
команду.
Команда может требовать чтения или записи слов, содержащих данные. В этом случае весь
процесс повторяется для каждого дополнительного слова.
Число адресных выводов и число информационных выводов — два ключевых параметра,
которые определяют производительность процессора. Микросхема, содержащая m адресных
выводов, может обращаться к 2m ячейкам памяти. Микросхема, содержащая n информационных
выводов, может считывать или записывать n-битное слово за одну операцию.
Кроме адресных и информационных выводов каждый процессор содержит выводы
управления. Выводы управления регулируют и синхронизируют поток данных к процессору и от него,
а также выполняют другие разнообразные функции. Все процессоры содержат выводы для питания
(обычно +3,3 В или +5 В), «земли» и синхронизирующего сигнала (меандра). Остальные выводы
разнятся от процессора к процессору. Тем не менее выводы управления можно разделить на
несколько основных категорий:
1. Управление шиной.
2. Прерывание.
3. Арбитраж шины.
4. Состояние.
5. Разное.
Выводы управления шиной по большей части представляют собой выходы из центрального
процессора в шину. Они сообщают, что процессор хочет считать информацию из памяти, или
записать информацию в память, или сделать что-нибудь еще.
Выводы прерывания — это входы из устройств ввода-вывода в процессор. В большинстве
систем процессор может дать сигнал устройству ввода-вывода начать операцию, а затем приступить
к какому-нибудь другому действию, пока устройство ввода-вывода выполняет свою работу.
Выводы разрешения конфликтов в шине нужны для того, чтобы регулировать поток
информации в шине, то есть не допускать таких ситуаций, когда два устройства пытаются
воспользоваться шиной одновременно. В целях разрешения конфликтов центральный процессор
считается устройством.
Некоторые центральные процессоры могут работать с различными сопроцессорами. Чтобы
обеспечить обмен информации между процессором и сопроцессором, нужны специальные выводы
для передачи сигналов.
Кроме этих выводов у некоторых процессоров есть различные дополнительные выводы. Одни
из них выдают или принимают информацию о состоянии, другие нужны для перезагрузки
компьютера, а третьи — для обеспечения совместимости со старыми микросхемами устройств
ввода-вывода.
Шины
Шина — это группа проводников, соединяющих различные устройства. Шины можно
разделить на группы в соответствии с выполняемыми функциями. Они могут быть внутренними по
отношению к процессору и служить для передачи данных в АЛУ и из АЛУ, а могут быть внешними по
отношению к процессору и связывать процессор с памятью или устройствами ввода-вывода. Каждый
тип шины обладает определенными свойствами, и к каждому из них предъявляются определенные
требования.
Первые персональные компьютеры имели одну внешнюю шину, которая называлась
системной шиной. Она состояла из нескольких медных проводов, которые встраивались в
материнскую плату. На материнской плате находились разъемы на одинаковых расстояниях друг от
друга для микросхем памяти и устройств ввода-вывода. Современные персональные компьютеры
обычно содержат специальную шину между центральным процессором и памятью и по крайней
мере еще одну шину для устройств ввода-вывода. На рис. 3.32 изображена система с одной шиной
памяти и одной шиной ввода-вывода.
Рис. 3.32. Компьютерная система с несколькими шинами
Начнем с того, как работают шины. Некоторые устройства, связанные с шиной, являются
активными и могут инициировать передачу информации по шине, тогда как другие являются
пассивными и ждут запросов. Активное устройство называется задающим устройством, пассивное —
подчиненным устройством. Когда центральный процессор требует от контроллера диска считать или
записать блок информации, центральный процессор действует как задающее устройство, а
контроллер диска — как подчиненное устройство.
Двоичные сигналы, которые выдают устройства компьютера, часто недостаточно интенсивны,
чтобы активизировать шину, особенно если она достаточно длинная и если к ней подсоединено
много устройств. По этой причине большинство задающих устройств шины обычно связаны с ней
через микросхему, которая называется драйвером шины, по существу являющуюся двоичным
усилителем. Сходным образом большинство подчиненных устройств связаны с шиной приемником
шины. Для устройств, которые могут быть и задающим, и подчиненным устройством, используется
приемопередатчик шины. Эти микросхемы взаимодействия с шиной часто являются устройствами с
тремя состояниями, что дает им возможность отсоединяться, когда они не нужны. Иногда они
подключаются через открытый коллектор, что дает сходный эффект. Когда одно или несколько
устройств на открытом коллекторе требуют доступа к шине в одно и то же время, результатом
является булева операция ИЛИ над всеми этими сигналами. Такое соглашение называется
монтажным ИЛИ. В большинстве шин одни линии являются устройствами с тремя состояниями, а
другие, которым требуется свойство монтажного ИЛИ, — открытым коллектором.
Как и процессор, шина имеет адресные линии, информационные линии и линии управления.
Тем не менее между выводами процессора и сигналами шины может и не быть взаимно
однозначного соответствия. Микросхема-декодер должна тогда связывать данный процессор с такой
шиной, чтобы преобразовывать кодированный сигнал в отдельные сигналы, которые могут
управлять линиями шины.
Ширина шины
Ширина шины — самый очевидный параметр при разработке. Чем больше адресных линий
содержит шина, тем к большему объему памяти может обращаться процессор. Если шина содержит
n адресных линий, тогда процессор может использовать ее для обращения к 2n различным ячейкам
памяти. Для памяти большой емкости необходимо много адресных линий.
Проблема заключается в том, что для широких шин требуется больше проводов, чем для узких.
Они занимают больше физического пространства (например, на материнской плате), и для них
нужны разъемы большего размера. Все эти факторы делают шину дорогостоящей. Следовательно,
необходим компромисс между максимальным размером памяти и стоимостью системы.
Многие разработчики систем недальновидны, что приводит к неприятным последствиям.
Первая модель IBM PC содержала процессор 8088 и 20-битную адресную шину (рас. 3.33, а). Шина
позволяла обращаться к 1 Мбайт памяти. Когда появился следующий процессор (80286), Intel решил
увеличить адресное пространство до 16 Мбайт, поэтому пришлось добавить еще 4 линии (не
нарушая изначальные 20 по причинам совместимости с более старыми версиями), как показано на
рис. 3.33, б. К сожалению, пришлось также добавить линии управления для новых адресных линий.
Когда появился процессор 80386, было добавлено еще 8 адресных линий и, естественно, несколько
линий управления, как показано на рис. 3.33, в. В результате получилась шина EISA. Однако было бы
лучше, если бы с самого начала имелось 32 линии.
Рис. 3.33. Расширение адресной шины с течением времени
С течением времени увеличивается не только число адресных линий, но и число
информационных линий. Хотя это происходит по несколько другой причине. Можно увеличить
пропускную способность шины двумя способами: сократить время цикла шины (сделать большее
количество передач в секунду) или увеличить ширину шины данных (то есть увеличить количество
битов за одну передачу). Можно повысить скорость работы шины, но сделать это довольно сложно,
поскольку сигналы на разных линиях передаются с разной скоростью (это явление называется
перекосом шины). Чем быстрее работает шина, тем больше перекос.
При увеличении скорости работы шины возникает еще одна проблема: в этом случае она не
будет совместимой с более старыми версиями. Старые платы, разработанные для более медленной
шины, не могут работать с новой. Такая ситуация невыгодна для владельцев и производителей
старых плат. Поэтому обычно для увеличения производительности просто добавляются новые линии,
как показано на рис. 3.33.
Также, чтобы обойти эту проблему, разработчики иногда отдают предпочтение
мультиплексной шине. В этой шине нет разделения на адресные и информационные линии. В ней
может быть, например, 32 линии и для адресов, и для данных. Сначала эти линии используются для
адресов. Затем они используются для данных.
Синхронизация шины
Шины можно разделить на две категории в зависимости от их синхронизации. Синхронная
шина содержит линию, которая запускается кварцевым генератором. Сигнал на этой линии
представляет собой меандр с частотой обычно от 5 до 100 МГц. Любое действие шины занимает
целое число так называемых циклов шины. Асинхронная шина не содержит задающего генератора.
Циклы шины могут быть любой требуемой длины и необязательно одинаковы по отношению ко всем
парам устройств.
Синхронные шины
Содержит линию, которая запускается кварцевым генератором, сигнал - меандр, 5-100 МГц,
любое действие - целое число тактов. Большинство шин - синхронные. При удачном выборе
компонентов синхронные шины работают хорошо. Пример: tин = 40МГц = 25нс. Считывание 1-го
символа информации из RAM занимает 40нс с момента, когда адрес стал постоянным. Таким
образом, потребуется 3 цикла шины.
Синхронную магистраль легче реализовать и протестировать, но она хуже работает с модулями
разной производительности, поскольку все они должны быть привязаны к тактовым импульсам.
После того, как адрес установлен, память не успевает передать данные за период T2. Чтобы
процессор не ждал поступления данных, память устанавливает сигнал на линии WAIT в начале T2 –
дополнительный цикл ожидания. В Т3 процессор считывает данные с шины, после чего сбрасывает
сигналы MREQ и RD. Данный пример сильно упрощает версию реального процесса, где ограничения
на задержки сигналов многочисленны. Недостатки синхронных: целое число циклов, узкие границы,
в пределах которых могут увеличивать быстродействие устройства, подключённые к шине.
Рис. 3.34. Временная диаграмма процесса считывания на синхронной шине
Асинхронные шины
Асинхронные шины – шины без задающего генератора, как показано на рис. 3.35. Здесь ничего
не привязывается к генератору. Когда задающее устройство устанавливает адрес, MREQ (), RD (Read –
чтение/запись) и любой другой требуемый сигнал, он выдает специальный сигнал, который мы
будем называть MSYN (Master SYNchronization). Когда подчиненное устройство получает этот сигнал,
оно начинает выполнять свою работу настолько быстро, насколько это возможно. Когда работа
закончена, устройство выдает сигнал SSYN(Slave SYNchronization).
Сигнал SSYN означает для задающего устройства, что данные доступны. Он фиксирует их, а
затем отключает адресные линии вместе с MREQ, RD и MSYN. Отмена сигнала MSYN означает для
подчиненного устройства, что цикл закончен, поэтому устройство отменяет сигнал SSYN, и все
возвращается к первоначальному состоянию, когда все сигналы отменены.
Стрелочки на временных диаграммах асинхронных шин показывают причину и следствие
какого-либо действия (рис. 3.35). Установка сигнала MSYN приводит к запуску информационных
линий, а также к установке сиганала SSYN. Установка сигнала SSYN, в свою очередь, вызывает
отключение адресных линий, MREQ, RD и MSYN. Наконец, отключение MSYN вызывает отключение
SSYN, и на этом процесс считывания заканчивается.
Набор таких взаимообусловленных сигналов называется полным квитированием. Здесь, в
сущности, наблюдается 4 события:
1. Установка сигнала MSYN
2. Установка сигнала SSYN в ответ на завершение передачи данных
3. Отмена сигнала MSYN в ответ на сигнал SSYN
4. Отмена сигнала SSYN в ответ на отмену сигнала MSYN
Следует уяснить, что взаимообусловленность сигналов не зависит от синхронизации. Каждое
событие вызывается предыдущим событием, а не импульсами генератора. Если какая-то пара двух
устройств (задающего и подчиненного) работает медленно, это никак не повлияет на следющую пару
устройств, которая работает гораздо быстрее.
Преимущества асинхронной шины очевидны, но в действительности большинство шин
являются синхронными. Дело в том, что синхронную систему построить проще, чем асинхронную. ЦП
просто выдает сигналы,а память просто реагирует на них. Здесь нет никакой причинно-следственной
связи, но если компоненты выбраны удачно, все будет работать и без квитирования.
Рис. 3.35. Работа асинхронной шины
Арбитраж шины
До этого момента мы неявно предполагали, что существует только одно задающее устройство
шины — центральный процессор, В действительности микросхемы ввода-вывода могут становиться
задающим устройством при считывании информации из памяти и записи информации в память.
Кроме того, они могут вызывать прерывания. Сопроцессоры также могут становиться задающим
устройством шины. Возникает вопрос: «Что происходит, когда задающим устройством шины могут
стать два или несколько устройств одновременно?» Чтобы предотвратить хаос, который может при
этом возникнуть, нужен специальный механизм — так называемый арбитраж шины.
Механизмы арбитража могут быть централизованными или децентрализованными.
Рассмотрим сначала централизованный арбитраж. Простой пример централизованного арбитража
показан на рис. 3.36, а. В данном примере один арбитр шины определяет, чья очередь следующая.
Когда арбитр видит запрос шины, он запускает линию предоставления шины. Эта линия
последовательно связывает все устройства ввода-вывода (как в елочной гирлянде). Когда физически
ближайшее к арбитру устройство воспринимает сигнал предоставления шины, оно проверяет, нет ли
запроса шины. Если запрос есть, устройство пользуется шиной, но не распространяет сигнал
предоставления дальше по линии. Если запроса нет, устройство передает сигнал предоставления
шины следующему устройству. Это устройство тоже проверяет, есть ли запрос, и действует
соответствующим образом в зависимости от наличия или отсутствия запроса. Передача сигнала
предоставления шины продолжается до тех пор, пока какое-нибудь устройство не воспользуется
предоставленной шиной. Такая система называется системой последовательного опроса. При этом
приоритеты устройств зависят от того, насколько близко они находятся к арбитру. Ближайшее к
арбитру устройство обладает главным приоритетом.
Чтобы обойти такую систему, в которой приоритеты зависят от расстояния от арбитра, в
некоторых шинах устраивается несколько уровней приоритета. На каждом уровне приоритета есть
линия запроса шины и линия предоставления шины. На рис. 3.36, 6 изображено 2 уровня. Если
одновременно запрашивается несколько уровней приоритета, арбитр предоставляет шину самому
высокому уровню.
Рис. 3.36. Одноуровневый централизованный арбитраж шины с использованием системы
последовательного опроса (а); двухуровневый централизованный арбитраж (б)
В системах, где память связана с главной шиной, центральный процессор должен завершать
работу со всеми устройствами ввода-вывода практически на каждом цикле шины. Чтобы решить эту
проблему, можно предоставить центральному процессору самый низкий приоритет.
Возможен также децентрализованный арбитраж шины. Например, компьютер может
содержать 16 приоритетных линий запроса шины. Когда устройству нужна шина, оно запускает свою
линию запроса. Все устройства контролируют все линии запроса, поэтому в конце каждого цикла
шины каждое устройство может определить, обладает ли оно в данный момент высшим
приоритетом и, следовательно, разрешено ли линии пользоваться шиной в следующем цикле. Такой
метод требует наличия большего количества линий, но зато не требует затрат на арбитра. Он также
ограничивает число устройств числом линий запроса
При другом типе децентрализованного арбитража используется только три линии независимо
от того, сколько устройств имеется в наличии (рис. 3.37). Первая линия — монтажное ИЛИ. Она
используется для запроса шины. Вторая линия называется BUSY. Она запускается текущим задающим
устройством шины. Третья линия используется для арбитража шины. Она последовательно
соединяет все устройства. Начало цепи связано с источником питания с напряжением 5 В.
Рис. 3.37. Децентрализованный арбитраж шины
Принципы работы шины
Обычно за раз передается одно слово. При использовании кэш-памяти желательно сразу
вызывать всю строку кэш-памяти (то есть 16 последовательных 32-битных слов). Часто передача
блоками может быть более эффективна, чем такая последовательная передача информации. Когда
начинается чтение блока, задающее устройство сообщает подчиненному устройству, сколько слов
нужно передать (например, помещая общее число слов на информационные линии в период Ti).
Вместо того чтобы выдать в ответ одно слово, задающее устройство выдает одно слово в
течение каждого цикла до тех пор, пока не будет передано требуемое количество слов. На рис. 3.38
изображена такая же схема, как и на рис. 3.34, только здесь появился дополнительный сигнал BLOCK,
который указывает, что запрашивается передача блока. В данном примере считывание блока из 4
слов занимает 6 циклов вместо 12.
Рис. 3.38. Передача блока данных
Существуют также другие типы циклов шины. Например, если речь идет о системах с двумя или
несколькими центральными процессорами на одной шине, нужно быть уверенным, что в
конкретный момент только один центральный процессор может использовать определенную
структуру данных в памяти. Если центральному процессору нужно получить доступ к структуре
данных, он должен считать переменную, и если она равна 0, придать ей значение 1. Проблема
заключается в том, что два центральных процессора могут считать переменную на последовательных
циклах шины. Если каждый процессор видит, что переменная равна 0, а затем каждый процессор
меняет значение переменной на 1, как будто только он один использует эту структуру данных, то
такая последовательность событий ведет к хаосу. Чтобы предотвратить такую ситуацию, в
многопроцессорных системах предусмотрен специальный цикл шины, который дает возможность
любому процессору считать слово из памяти, проверить и изменить его, а затем записать обратно в
память; весь этот процесс происходит без освобождения шины. Такой цикл не дает возможности
другим центральным процессорам использовать шину и, следовательно, мешать работе первого
процессора.
Еще один важный цикл шины — цикл для осуществления прерываний. Когда центральный
процессор командует устройству ввода-вывода произвести какое-то действие, он ожидает
прерывания после завершения работы. Для сигнала прерывания нужна шина. В некоторый момент
микросхема конроллера прерываний должна определить, на какой именно вход поступил сигнал
прерывания. Для этого она помещает номер входа на информационную шину. Эта операция требует
наличия особого цикла шины. Центральный процессор использует этот номер для обращения в
таблицу указателей, которую называют таблицей векторов прерывания, чтобы найти адрес
процедуры, производящей соответствующее прерывание
Download