Архитектуры SRAM
Оглавление
Введение 3
Глава 1 Архитектура SRAM 4
1.1 Устройство 4
1.1.1 В ядре 5
1.1.2 Устройство триггера 6
1.1.3 Устройство элемента "НЕ" (инвертора) 7
1.1.4 Устройство матрицы статической памяти 8
1.1.5 Устройство интерфейсной обвязки 10
1.1.6 Временные диаграммы чтения/записи 11
1.1.7 Цикл чтения 11
1.1.8 Цикл записи 12
1.2 Применение 13
Глава 2 SRAM в кэше 16
2.1 Виды кэша 16
2.1.1 Полностью ассоциативный кэш 16
2.1.2 Кэш с прямым отображением адресов 19
2.1.3 N-ассоциативный кэш 23
Заключение 28
Список
используемой литературы 29
Введение
Цель данной курсовой работы: анализ архитектуры SRAM. Начиная с первых 16-разрядных микросхем памяти; чипов памяти, применяемых в сегодняшних РС и перспективные направления развития статической памяти. Будут рассмотрены логическая организация памяти, быстродействие, синхронизация работы (по отношению к процессору), контроль чётности, режимы страничного доступа, расслоение ОЗУ на банки и пакетно - конвейерный режим.
Все персональные компьютеры используют три вида памяти: оперативную, постоянную и внешнюю (различные накопители). Память нужна как для исходных данных так и для хранения результатов. Она необходима для взаимодействия с периферией компьютера и даже для поддержания образа, видимого на экране. В компьютерных системах работа с памятью основывается на очень простых концепциях. В принципе, всё, что требуется от компьютерной памяти, - это сохранять один бит информации так, чтобы потом он мог быть извлечён оттуда.
Актуальность данной темы вполне очевидна, ведь микросхемы этого типа весьма широко применяются в кэше. Кэш процессора — это быстродействующая память небольшого объёма, используемая для уменьшения (в среднем) времени доступа процессора к медленной оперативной памяти. Кэш хранит копию части данных оперативной памяти. Уменьшение времени доступа происходит из-за того, что большинство данных, требуемых процессором, оказываются в кэше, и количество обращений к оперативной памяти снижается.
Кэш особенно актуален в современных системах, в которых велик разрыв между скоростью работы процессора и скоростью работы оперативной памяти. Если данные, требуемые процессору для дальнейших вычислений, находятся в оперативной памяти (а не в кэше), то процессор будет вынужден их ожидать, пропуская десятки операций. Если же данные находятся в кэше, то они могут быть переданы процессору в ритме, необходимом для его безостановочной работы.
Глава 1 Архитектура SRAM
1.1 Устройство
Статическая память — SRAM (Static Random Access Memory), как и следует из ее названия, способна хранить информацию в статическом режиме — то есть сколь угодно долго при отсутствии обращений (но при наличии питающего напряжения). Ячейки статической памяти реализуются на триггерах — элементах с двумя устойчивыми состояниями. По сравнению с динамической памятью эти ячейки более сложные и занимают больше места на кристалле, однако они проще в управлении и не требуют регенерации. Быстродействие и энергопотребление статической памяти определяется технологией изготовления и схемотехникой запоминающих ячеек[1].
Асинхронная статическая память (Asynchronous SRAM, Async SRAM), она же обычная, или стандартная, подразумевается под термином SRAM по умолчанию, когда тип памяти не указан.
Микросхемы этого типа имеют простейший асинхронный интерфейс, включающий шину адреса, шину данных и сигналы управления CS#, ОЕ# и WE#. Микросхема выбирается низким уровнем сигнала CS# (Chip select), низкий уровень сигнала ОЕ# (Output Enable) открывает выходные буферы для считывания данных, WE# (Write Enable) низким уровнем разрешает запись.
При операции записи управление выходными буферами может производиться как сигналом ОЕ# (цикл 1), так и сигналом WE# (цикл 2). Для удобства объединения микросхем внутренний сигнал CS# может собираться по схеме «И» из нескольких внешних, например CSO#, CSt и CS2# — в таком случае микросхема будет выбрана при сочетании логических сигналов 0,1,0 на соответствующих входах.
Время доступа — задержка появления действительных данных на выходе относительно момента установления адреса — у стандартных микросхем SRAM составляет 12,15 или 20 наносекунд, что позволяет процессору выполнять пакетный цикл чтения 2-1-1-1 (то есть без тактов ожидания) на частоте системной шины до 33 МГц. На более высоких частотах цикл будет не лучше 3-2-2-2.
Синхронная пакетная статическая память, Sync Burst SRAM, оптимизирована под выполнение пакетных (burst) операций обмена, свойственных кэш-памяти. В ее структуру введен внутренний двухбитный счетчик адреса (не позволяющий перейти границу четырехэлементного пакетного цикла). В дополнение к сигналам, характерным для асинхронной памяти (адрес, данные, CS#, OE# и WE#), синхронная память использует сигнал CLC (Clock) для синхронизации с системной шиной и сигналы управления пакетным циклом ADSP#, CADS* и ADV#. Сигналы CADS* (Cache ADdress Strobe) и ADSP# (ADdress Status of Processor), которыми процессор или кэш-контроллер отмечает фазу адреса очередного цикла, являются стробами записи начального адреса цикла во внутренний регистр адреса. Любой из этих сигналов инициирует цикл обращения, одиночный (single) или пакетный (burst), а сигнал ADV# (ADVance) используется для перехода к следующему адресу пакетного цикла. Все сигналы, кроме сигнала управления выходными буферами ОЕ#, синхронизируются по положительному перепаду сигнала CLK. Это означает, что значение входных сигналов должно установиться до перепада и удерживаться после него еще некоторое время. Выходные данные при считывании будут также действительны во время этого перепада. Микросхемы синхронной статической памяти, как и SDRAM, обычно имеют сигнал, выбирающий режим счета адреса: чередование {для процессоров Intel) или последовательный счет (для Power PC).
1.1.1 В ядре
Ядро микросхемы статической оперативной памяти (SRAM - Static Random Access Memory) представляет собой совокупность триггеров - логических устройств, имеющих два устойчивых состояния, одно из которых условно соответствует логическому нулю, а другое - логической единице. Другими словами, каждый триггер хранит один бит информации, - ровно столько же, сколько и ячейка динамической памяти[2].
Между
тем, триггер как минимум по двум
позициям обыгрывает конденсатор: а) состояния
триггера устойчивы и при наличии
питания могут сохраняться
К недостаткам триггеров следует отнести их высокую стоимость и низкую плотность хранения информации. Если для создания ячейки динамической памяти достаточного всего одного транзистора и одного конденсатора, то ячейка статической памяти состоит как минимум из четырех, а в среднем шести - восьми транзисторов, поэтому мегабайт статической памяти оказывается по меньшей мере в несколько раз дороже.
1.1.2 Устройство триггера
В основе всех триггеров лежит кольцо из двух логических элементов "НЕ" (инверторов), соединенных по типу "защелки" (рисунок. 1). Рассмотрим, как он работает. Если подать на линию Q сигнал, соответствующий единице, то, пройдя сквозь элемент D.D1 он обратится в ноль. Но, поступив на вход следующего элемента, - D.D2 - этот ноль вновь превратится в единицу. Поскольку, выход элемента D.D2 подключен ко входу элемента D.D1, то даже после исчезновения сигнала с линии Q, он будет поддерживать себя самостоятельно, т.е. триггер перейдет в устойчивое состояние. Образно это можно уподобить дракону, кусающему себя за хвост[2].
Естественно, если на линию Q подать сигнал, соответствующий логическому нулю, - все будет происходить точно так же, но наоборот!
Рисунок 1. Устройство простейшего триггера.
1.1.3 Устройство элемента "НЕ" (инвертора)
Как
устроен элемент "НЕ"? На этот вопрос
нельзя ответить однозначно. В зависимости
от имеющейся у нас элементарной
базы, конечная реализация варьируется
в очень широких пределах. Ниже
в качестве примера приведена
принципиальная схема простейшего
инвертора, сконструированного из двух
последовательно соединенных
Рисунок 2. Устройство элемента НЕ (инвертора).
1.1.4 Устройство матрицы статической памяти
Подобно ячейкам динамической памяти, триггеры объединяются в единую матрицу, состоящую из строк (row) и столбцов (column), последние из которых так же называются битами (bit).
В
отличии от ячейки динамической памяти,
для управления которой достаточно
всего одного ключевого транзистора,
ячейка статической памяти управляется
как минимум двумя. Это не покажется
удивительным, если вспомнить, что триггер,
в отличии от конденсатора, имеет
раздельные входы для записи логического
нуля и единицы соответственно. Таким
образом, на ячейку статической памяти
расходуется целых восемь транзисторов
(рисунок 3) - четыре идут, собственно, на
сам триггер и еще два - на управляющие
"защелки"[1].
Рисунок 3. Устройство 6-транзистроной одно-портовой ячейки SRAM-памяти.
Причем, шесть транзисторов на ячейку - это еще не предел! Существуют и более сложные конструкции! Основной недостаток шести транзисторной ячейки заключается в том, что в каждый момент времени может обрабатываться всего лишь одна строка матрицы памяти. Параллельное чтение ячеек, расположенных в различных строках одного и того же банка невозможно, равно как невозможно и чтение одной ячейки одновременно с записью другой.
Этого ограничения лишена многопортовая память. Каждая ячейка многопортовой памяти содержит один-единственный триггер, но имеет несколько комплектов управляющих транзисторов, каждый из которых подключен к "своим" линиям ROW и BIT, благодаря чему различные ячейки матрицы могут обрабатываться независимо. Такой подход намного более прогрессивен, чем деление памяти на банки. Ведь, в последнем случае параллелизм достигается лишь при обращении к ячейкам различных банков, что не всегда выполнимо, а много портовая память допускает одновременную обработку любых ячеек, избавляя программиста от необходимости вникать в особенности ее архитектуры. (Замечание: печально, но кэш-память x86-процессор не истинно многопортовая, а состоит из восьми одно-портовых матриц, подключенных к двух портовой интерфейсной обвязке)
Наиболее часто встречается двух - портовая память, устройство ячейки (рисунок 4). (внимание! это совсем не та память которая, в частности, применяется в кэше первого уровня микропроцессоров Intel Pentium). Нетрудно подсчитать, что для создания одной ячейки двух - портовой памяти расходуется аж восемь транзисторов. Пусть емкость кэш-памяти составляет 32 Кб, тогда только на одно ядро уйдет свыше двух миллионов транзисторов!
Рисунок 4. Устройство 8-транзистроной двух портовой ячейки SRAM-памяти.
Рисунок 5,6. Ячейка динамической памяти воплощенная в кристалле.
1.1.5 Устройство интерфейсной обвязки
Пожалуй,
единственное различие в интерфейсах
статической и динамической памяти
заключается в том, что микросхемы
статической памяти имея значительно
меньшую емкость (а, следовательно -
и меньшее количество адресных линий)
и геометрически располагаясь гораздо
ближе к процессору, могут позволить
себе роскошь не прибегать к
Если статическая память выполнена в виде самостоятельной микросхемы, а не располагается непосредственно на кристалле процессора, линии ее входа зачастую объединяют с линиями выхода, и требуемый режим работы приходится определять по состоянию специального вывода WE (Write Enable). Высокое состояние вывода WE готовит микросхему к чтению данных, а низкое - к записи. Статическая память, размещенную на одном кристалле вместе с процессором, обычно не мультиплексирует, и в этом случае содержимое одной ячейки можно читать параллельно с записью другой (линии входа и выхода ведь раздельные!).
Номера столбцов и строк поступают на декодеры столбца и строки соответственно (рисунок 7). После декодирования расшифрованный номер строки поступает на дополнительный декодер, вычисляющий, принадлежащую ей матрицу. Оттуда он попадает непосредственно на выборщик строки, который открывает "защелки" требуемой страницы. В зависимости от выбранного режима работы чувствительный усилитель, подсоединенный к битовым линейкам матрицы, либо считывает состояние триггеров соответствующей raw-линейки, либо "перещелкает" их согласно записываемой информации.
Рисунок 7. Устройство типовой микросхемы SRAM-памяти.
1.1.6 Временные диаграммы чтения/записи
Временные диаграммы чтения/записи статической памяти практически ничем не отличаются от аналогичных им диаграмм микросхем динамической памяти (что и неудивительно, т. к. интерфейсная обвязка в обоих случаях схожа).
1.1.7 Цикл чтения
Цикл чтения начинается со сброса сигнала CS (Chip Select - Выбор Чипа) в низкое состояние, давая понять тем самым микросхеме, что чип "выбран" и сейчас с ним будут работать (и работать будут, и прорабатывать!).
К тому моменту, когда сигнал стабилизируется, на адресных линиях должен находиться готовый к употреблению адрес ячейки (т.е. номер строки и номер столбца), а сигнал WE должен быть переведен в высокое состояние (соответствующее операции чтения ячейки). Уровень сигнала OE (Output Enable - разрешение вывода) не играет никакой роли, т.к. на выходе пока ничего не содержится, точнее выходные линии находятся в, так называемом, высоко импедансом состоянии[3].
Спустя некоторое время (tAddress Access), определяемое быстродействием управляющей логики и быстротечностью переходных процессорах в инверторах, на линиях выхода появляются долгожданные данные, которые вплоть до окончания рабочего цикла (tCycle) могут быть непосредственно считаны.
1.1.8 Цикл записи
Цикл записи происходит в обратном порядке. Сначала мы выставляем на шину адрес записываемой ячейки и одновременно с этим сбрасываем сигнал WE в низкое состояние. Затем, дождавшись, когда наш адрес декодируется, усилиться и поступит на соответствующие битовые линии, сбрасываем CS в низкий уровень, приказывая микросхеме подать сигнал высокого уровня на требуемую линию row. Защелка, удерживающая триггер, откроется и в зависимости от состоянии bit-линии, триггер переключится в то или иное состояние[3].
Рисунок 8. Временные диаграммы чтения/записи асинхронной статической памяти.
Задержка данных относительно синхронизирующего перепада у современных микросхем РВ SRAM составляет 4,5-8 не! Но, как и в случае Sync Burst SRAM, этот параметр не является временем доступа в чистом виде (не следует забывать о двух-трех тактах в первой передаче), а отражает появление действительных данных относительно очередного перепада сигнала синхронизации. Интерфейс РВ SRAM аналогичен интерфейсу Sync Burst SRAM.
1.2 Применение
Самое распространенное применение статической памяти - кэширование ОЗУ. Когда процессор ПК работал на тактовой частоте 16 МГц и ниже, DRAM могла быть синхронизирована с системной платой и процессором, поэтому кэш был не нужен. Однако, как только тактовая частота процессора поднялась выше 16 МГц, синхронизировать DRAM с процессором стало невозможно, и именно тогда разработчики начали использовать SRAM в персональных компьютерах. Это произошло в 1986–87 годах, когда появились компьютеры с процессором 386, работающим на частотах 16 и 20 МГц. Именно в этих ПК впервые нашла применение так называемая кэш-память, т.е. высокоскоростной буфер, построенный на микросхемах SRAM, который непосредственно обменивается данными с процессором. Быстродействие кэша может быть сравнимо с быстродействием процессора, контроллер кэша может предугадывать потребности процессора в данных и предварительно загружать необходимые данные в высокоскоростную кэш память.
На микросхемах статической памяти обычно строится внешний кэш, в котором используется архитектура прямого отображения или наборно-ассоциативная . Функции кэш-контроллера выполняет чипсет. Микросхемы хранения данных кэша организуются в банки, число микросхем в банке должно соответствовать разрядности системной шины процессора. Банк должен заполняться микросхемами одного объема, требуемое быстродействие микросхем зависит от частоты системной шины. Банков может быть и несколько, количество заполненных банков и организация установленных микросхем, определяющие объем кэш-памяти (VCACHE), задаются джамперами или определяются автоматически[4].
Для хранения тегов обычно используется отдельная микросхема асинхронной SRAM - Tag SRAM, а для более чем 8-битного тега - пара микросхем. Здесь асинхронная память используется как для асинхронного, так и для синхронного кэша. Ее объем может и превышать минимально необходимый для установленной кэш-памяти. Требуемое быстродействие определяется тактовой частотой системной шины. Необходимый объем памяти тегов (количество ячеек) можно вычислить, разделив объем установленной кэш-памяти на длину строки кэша, определяемой чипсетом. Длина строки обычно равна количеству байт, передаваемых за один стандартный пакетный цикл (4х4=16 байт для i486, 4х8=32 байта для Pentium).
Для старых системных плат с процессором Pentium были широко распространены модули COAST (Cache On A Stick) - "кэш на палочке". Это небольшой модуль с двусторонним печатным разъемом, устанавливаемый в специальный слот. Модуль содержит собственно кэш-память необходимой разрядности (асинхронную Async SRAM, синхронную пакетную Sync Burst SRAM или конвейерную РВ SRAM), на нем же может быть установлена и асинхронная память тегов. Модуль может использоваться и как расширение кэша, запаянного на системной плате. Аналогичные модули применялись и в других компьютерных платформах (например, в Power PC), но у них может не совпадать порядок следования адресов пакетного цикла синхронной памяти (у Power PC - последовательный) со специфическим порядком чередования, принятым для процессоров х86 Intel и совместимых с ними (порядок адресов задается логическим уровнем на одном из выводов микросхем Burst SRAM). В результате снижения цен на микросхемы статической памяти кэш фиксированного размера (чаще - максимального для конкретного чипсета) стали запаивать на системную плату, не применяя дополнительных модулей и разъемов[6].
Перед пользователем обычно не встаёт проблема выбора кэш - памяти: в материнских платах для Pentium кэш - память была просто распаяна на плате. Более того, кэш - память первого уровня давно встраивается в центральный процессор, а начиная с процессоров линии Pentium II эта участь постигла и кэш II-го уровня. То же самое произошло и с процессорами для Socket 7 (стандартный Pentium - разъем), например процессор AMD К6 - 3 содержит кэш второго уровня. В отличии от Pentium II он поддерживал кэш третьего уровня на материнской плате. При этом кэш-память второго уровня работает на полной частоте процессора, обеспечивая на порядок большую производительность, чем кэш-память в более старых процессорах (произведенных до 1999 года), реализованная в виде отдельной внешней микросхемы. Кэш-память второго уровня во многих старых процессорах работает на частоте, составляющей половину или одну треть частоты ядра процессора. Быстродействие кэш-памяти имеет особое значение, поэтому компьютеры с кэш-памятью, представляющей собой отдельную микросхему, установленную на системной плате, обладали небольшой производительностью.
Кэш-память второго уровня
Перенос кэш-памяти в один корпус с процессором улучшил положение дел, а добавление кэш-памяти непосредственно в ядро обеспечило оптимальные результаты. Таким образом, любой процессор с кэш-памятью второго уровня, интегрированной в ядро и работающей на полной частоте процессора, обладает значительным преимуществом в быстродействии по сравнению с другими схемами использования кэш-памяти второго уровня.
Кэш-память второго уровня, встроенная в процессор (в ядро или корпус), работает быстрее, чем при установке на системную плату. Поэтому современные системные платы не содержат модулей кэш-памяти.
Кэш-память третьего уровня была впервые представлена в процессорах для рабочих станций и серверов, таких, как Xeon и Itanium, в 2001 году. Первым процессором для настольных ПК, в котором использовался кэш третьего уровня, был представленный в конце 2003 года процессор Pentium 4 Extreme Edition; он был оснащен интегрированным кэшем третьего уровня объемом 2 Мбайт[7].
Глава 2 SRAM в кэше
2.1 Виды кэша
2.1.1 Полностью ассоциативный кэш
Пусть адрес байта оперативной памяти состоит из 32-х бит (4-х байт). Составим кэш из строк: пусть каждая строка содержит (хранит) адрес и байт, который соответствует этому адресу в оперативной памяти. Хранимый адрес принято называть тегом (tag), чтобы не путать его с адресом (номером) строки кэша.
Такой кэш называется полностью ассоциативным, так как любой байт оперативной памяти может оказаться в любой строке кэша. Пусть, кроме того, каждая строка кэша снабжена устройством, которое сравнивает тег, хранящийся в строке, с адресом памяти, к которому обращается процессор, и, в случае совпадения, выдаёт соответствующий байт данных (рисунок 9). Про такую память говорят, что она адресуется данными[8].
Рисунок
9. Пример поиска элемента в кэше по его
адресу.
Данные приведены в шестнадцатеричном
виде.
Когда процессор хочет прочесть данные по какому-либо адресу оперативной памяти, он передаёт этот адрес в контроллер кэш-памяти. Кэш осуществляет одновременное сравнение всех имеющихся у него тегов с переданным адресом. Если адрес найден, то кэш выдаёт требуемый байт данных (рисунок 9). Если же данные не найдены (промах кэша), то производится обращение к оперативной памяти.
Скорее всего, только что прочитанные данные вскоре понадобятся вновь, поэтому, в случае промаха кэша, их нужно занести в кэш. Но кэш всегда полон. Это означает, что перед занесением новых данных какие-то другие данные из него нужно выбросить. Алгоритм, определяющий, какие данные нужно выбросить из кэша, называется политикой замещения данных.
Выбрасывать нужно тот элемент, к которому наиболее долго не будет обращений. Но, так как кэш не знает, какие обращения к памяти будут в будущем, он вынужден использовать какое-то правило, которое бы хорошо «угадывало» нужный элемент. Например, можно выбрасывать случайную строку из кэша. Но на практике чаще всего выбрасывается тот элемент, который дольше всех не использовался. Мотивация такая: «если строка долго не использовалась, то она, скорее всего, ещё не скоро понадобится вновь»[9].
Но как определить, какая строка дольше всех не использовалась? Пусть, например, в кэше имеются 65536 строк. Тогда в каждую строку кэша можно добавить двухбайтовое целое число, которое будет обозначать «возраст» этой строки́. Строка, к которой обращались наиболее давно, имеет возраст, равный 65535. Строка, к которой было произведено обращение в последнюю очередь, имеет возраст 0.
Рисунок 10. Дополнительные байты для хранения возраста строки.
Пусть произошло попадание в кэш, и соответствующая строка имела возраст N. Присвоим ей возраст 0, а возрасты всех остальных строк, которые были меньше N, увеличим на единицу. Нетрудно видеть, что после такой операции все элементы кэша вновь имеют правильный возраст, соответствующий порядку их использования. Чтобы ускорить эту процедуру, нужно снабдить все стро́ки кэша устройствами, одновременно добавляющими единицу к возрасту своих строк. В случае промаха кэша из него выбрасывается элемент с максимальным (65535) возрастом, все возрасты увеличиваются на единицу, а новый элемент получает возраст 0.
Теперь рассмотрим процесс записи. Пусть процессор хочет записать данные в память. Скорее всего, эти данные вскоре понадобятся вновь, поэтому они должны быть записаны в кэш. Но нужно ли писать их при этом ещё и в оперативную память? Если данные в оперативную память записываются одновременно с записью в кэш, то он называется кэшом со сквозной записью[9].

- Архитектуры корпоративных информационных систем
- Архитентурно-нонструитивные решения
- Архитипическая символика процесса индивидуации
- Архівна комунікація та її документно-комунікаційна складова
- Архівна справа в період Великої Вітчизняної війни: історія евакуації та реевакуації архівних установ
- Архівний фонд підприємства: технологія зберігання ділових документів
- Архітектура Венеції
- Архитектурные формы
- Архитектурные центры Екатеринбурга
- Архитектурный ансамбль древнего Кремля
- Архитектурный ансамбль соборной площади Московского кремля
- Архитектурный комплекс античной Олимпии
- Архитектурный облик Парфенона
- Архитектурный ордер