Микросхемы SDRAM оптимизированы для пакетной передачи. У них при инициализации программируется длина пакета и операционный режим. Пакетный режим может включаться как для всех операций (normal), так и только для чтения (Multiple Burst with Single Write). Этот выбор позволяет оптимизировать память для работы либо с WB, либо с WT-кэшем. Обратим внимание, что внутренний счетчик адреса работает по модулю, равному запрограммированной длине пакетного цикла (например, при длине пакета 4 он не позволяет перейти границу обычного четырехэлементного пакетного цикла).
Пакетные циклы могут прерываться (принудительно завершаться) последующими командами, при этом оставшиеся адреса отбрасываются. На рисунке приведен пример прерывания команды чтения по адресу A командой чтения по адресу B (подразумевается, что для адреса B строка уже открыта). В случае прерываний пакетов, как и при полных пакетах, шина данных при активированных банках может быть полезно нагруженной в каждом такте, за исключением случая чтения, следующего за записью. При этом шина будет простаивать CL тактов. В команде WR имеется возможность блокирования записи данных любого элемента пакета — для этого достаточно в его такте установить высокий уровень сигнала маскирования.
Микросхемы SDRAM имеют средства энергосбережения. В режиме саморегенерации Self Refresh микросхемы периодически выполняют циклы регенерации по внутреннему таймеру, в этом режиме они не реагируют на внешние сигналы и внешняя синхронизация может быть остановлена. В режиме пониженного потребления Power Down микросхема не воспринимает команды и регенерация не выполняется, поэтому длительность пребывания в нем ограничена периодом регенерации.
Синхронный интерфейс позволяет довольно эффективно использовать шину и обеспечить на частоте 100 МГц пиковую производительность 100 Мбит/пин (на 1 вывод шины данных). SDRAM используют в составе модулей DIMM с 8-байтной разрядностью, что дает производительность 800 Мбайт/с. Однако эта теоретическая производительность не учитывает накладные расходы на регенерацию и подразумевает, что требуемые страницы уже открыты. Из-за указанных выше ограничений на реальном произвольном потоке запросов производительность, конечно же, будет ниже. Потенциальные возможности почти одновременного обслуживания множества запросов, предоставляемая микросхемами SDRAM, будут реализованы лишь при достаточно “умном” контроллере памяти. От его предусмотрительности эффективность памяти зависит, пожалуй, больше, чем у простых FPM и EDO DRAM.
Память DDR SDRAM (Dual Data Rate — удвоенная скорость данных) представляет собой дальнейшее развитие SDRAM. Как и следует из названия, у микросхем DDR SDRAM данные внутри пакета передаются с удвоенной скоростью — они переключаются по обоим фронтам синхроимпульсов. На частоте 100 МГц DDR SDRAM имеет пиковую производительность 200 Мбит/пин, что в составе 8-байтных модулей DIMM дает производительность 1600 Мбайт/с. На высоких тактовых частотах (100 МГц) двойная синхронизация предъявляет очень высокие требования к точности выдерживания временных диаграмм. Для повышения точности синхронизации предпринят ряд мер.
Сигнал синхронизации микросхемы подается в дифференциальной форме, что позволяет снизить влияние смещения уровней на точность синхронизации.
Для синхронизации данных в интерфейс введен новый двунаправленный стробирующий сигнал DQS. Стробы генерируются источником данных: при операциях чтения DQS генерируется микросхемой памяти, при записи — контроллером памяти (чипсетом).
Для синхронизации DQS с системной тактовой частотой (CLK) микросхемы имеют встроенные схемы DLL (Delay Locked Loop) для автоподстройки задержки сигнала DQS относительно CLK. Эта схема работает наподобие фазовой автоподстройки (PLL) и способна выполнять синхронизацию (обеспечивать совпадение фронтов DQS и CLK) лишь в некотором ограниченном диапазоне частот синхронизации.
В отличие от обычных SDRAM, у которых данные для записи передаются одновременно с командой, в DDR SDRAM данные для записи (и маски DQM) подаются с задержкой на один такт (write latency). Значение CAS# Latency может быть и дробным (CL=2, 2.5, 3). Микросхемы SDRAM до “штатного” использования должны быть инициализированы — кроме предзаряда банков у них должны быть запрограммированы параметры конфигурирования. В DDR SDRAM из-за необходимости настройки цепей DLL программирование несколько сложнее.
Теперь, имея общее представление о работе разных типов динамической памяти, обсудим варианты построения модулей памяти и “организационные” способы повышения производительности.
Микросхемы DRAM выпускают с разрядностью данных 1, 4, 8/9, 16/18 бит. Минимальной единицей упаковки, которая воспринимается системной платой компьютера, является банк памяти. Банк представляет собой объединение микросхем, обеспечивающее разрядность данных шины памяти. Так, для 386SX банк имеет разрядность 16 бит, для 386DX-486 — 32 бита, а для P5–P6 — 64 бита (8 байт). В банке все одноименные адресные входы микросхем и линии RAS# соединяются параллельно. Каждый банк выбирается своим сигналом RAS#. Линии CAS# или (и) WE должны быть индивидуальными для каждого байта, чтобы обеспечить возможность индивидуальной записи в любой байт банка. Микросхемы собираются в модули разрядностью 1 (SIMM-30, SIPP), 4 (SIMM-72) или 8 байт (DIMM). Модули могут содержать один или два банка микросхем (двусторонние модули). Однако полный банк памяти для машин с процессорами P5–P6 набирается парой модулей SIMM-72 или одним DIMM. Количество банков на системной плате ограничивается возможностями чипсета (количеством линий RAS#) или (и) количеством слотов для памяти. Первое ограничение является причиной известной проблемы с “двусторонними” модулями — в ряде плат установка такого модуля в один слот не позволяет использовать еще один слот. Увеличению числа слотов препятствует ограниченная нагрузочная способность шины памяти — каждый слот (тем более, с модулем) вносит паразитную емкость и индуктивность, ограничивающие быстродействие шины. Из-за влияния этой нагрузки для работы модулей SDRAM на частоте шины 100 МГц была разработана спецификация PC100, в которой кроме требований к быстродействию микросхем памяти задаются и правила разводки сигнальных и питающих проводников и прочие конструктивные нюансы. Теперь появляется и аналогичная спецификация PC133 — для частоты шины 133 МГц. Однако повышение тактовой частоты традиционной шины памяти технически сложно из-за большого числа сигнальных проводников. Популярные ныне модули DIMM SDRAM используют 32 адресных и управляющих линии и 64 (72 или 80 с контрольными) линии данных, при этом каждый дополнительный слот памяти требует еще несколько управляющих линий. На высоких частотах приходится учитывать задержки распространения сигналов в проводниках, и что самое неприятное — неодинаковость этих задержек, или перекос (skew).
Установка более одного банка памяти дает потенциальную возможность повышения производительности памяти за счет организации чередования банков (bank interleaving). Идею чередования проще пояснить на примере двух банков. Адресация памяти организуется так, чтобы ячейки, передаваемые в соседних тактах пакетного цикла, располагались в разных банках (сделать это несложно, поскольку пакеты выравниваются по границам строк кэша, которые фиксированы). Теперь контроллер памяти при передаче пакета будет обращаться к банкам поочередно, в результате чего частота передачи данных в такой системе может быть удвоенной по отношению к максимальной частоте работы отдельного банка. В чередовании может участвовать и большее число банков. Из разбиения на мелкие банки можно извлечь и другую выгоду. Поскольку современные процессоры способны параллельно выставлять несколько запросов на транзакции с памятью, скрытые фазы обработки запросов, обусловленные необходимым временем доступа, относящихся к разным банкам, могут выполняться одновременно. Однако это требует некоторого усложнения контроллера памяти и обеспечения независимости банков (возможности активации одного банка до предзаряда предыдущего). Независимость банков для асинхронной памяти достигается сугубо экстенсивным способом — увеличением числа линий интерфейса. Микросхемы SDRAM могут иметь внутреннюю 4-банковую организацию, независимость банков поддерживается синхронным интерфейсом. Чем больше будет независимых банков в ОЗУ, тем больше вероятность возможности их одновременного использования при обслуживании произвольных конкурирующих запросов.
1. Повышают быстродействие ядра (запоминающих ячеек) — пока остановились на 40 нс.