К ВОПРОCУ О tRAS

К ВОПРОCУ О tRAS <br/>Идея написанного ниже – разобраться более глубже в том как работают модули DDR, и объяснение некоторых таймингов и их взаимосвязи друг с другом (сразу хочу сказать что тут больше вопросов чем ответов). А мысль разобраться с этим у меня появилась после того как я узнал что в BIOS (у DFI) и в А64Tweaker можно выставить tRAS=0, что противоречило моему пониманию принципа работы (тоесть я сразу подумал “да не может такого быть!”), потому я решил как то структурировать прочитанное и разобраться, да и вообще выложить это чтоб услышать мнения/дополнения/поправки и т.д. других участников форума. В соответствии с законами дидактики, учитывая, что большинство уже знают про принцип работы и понятия, я изложу по дедукции (от общего к частному). <br/>Почитал я тут по повод...
16 октября 2005, воскресенье 03:42
MrUser для раздела Блоги
К ВОПРОCУ О tRAS
Идея написанного ниже – разобраться более глубже в том как работают модули DDR, и объяснение некоторых таймингов и их взаимосвязи друг с другом (сразу хочу сказать что тут больше вопросов чем ответов). А мысль разобраться с этим у меня появилась после того как я узнал что в BIOS (у DFI) и в А64Tweaker можно выставить tRAS=0, что противоречило моему пониманию принципа работы (тоесть я сразу подумал “да не может такого быть!”), потому я решил как то структурировать прочитанное и разобраться, да и вообще выложить это чтоб услышать мнения/дополнения/поправки и т.д. других участников форума. В соответствии с законами дидактики, учитывая, что большинство уже знают про принцип работы и понятия, я изложу по дедукции (от общего к частному).
Почитал я тут по поводу таймингов tRCD-tCL-tRP -tRAS. Для начала вкратце (без “воды”) изложу суть моего понимания работы модулей (все на основе статей с сайтов www.ixbt.com (SPD: схема последовательного детектирования, Настройка подсистемы памяти в BIOS SETUP ) и www.thg.ru (Как ускорить работу с памятью?) информацию обработал и выделил главное, курсивом выделены цитаты), чтоб исключить различное понимание терминов которые встречаются да и чтоб не было путаницы (с банк, строка и т.д.- потому: Микросхема состоит из четырех (в нашем случае) логических банков памяти, которые в свою очередь делятся на строки (называемые еще страницами), а строки делятся на столбцы (то есть получился своего рода многомерный массив). Эти четыре логических банка способны независимо друг от друга регенерироваться, (при работе с одним банком другой в это время может регенерироваться). Тайминги – это такты, (пример: 200МГц шины памяти1/200МГц =5нс, тоесть tCL = 2 (10нс) )
Чтение
Таким образом у нас есть матрица с ячейками, для того чтобы считать ячейку происходят такие действия : 1. Выбирается и активизируется лог. банк, 2 . Определяется адрес строки (на шину подается адрес строки, в качестве запирания подается строб RAS# (Row Address Srobe)) , 3. И эта строка передается на внутреннею шину данных и направляется на усилители уровня (это необходимо потому что емкость ячейки в банках мала: около 10^-15Ф), 4. После усиления, данные запираются синхросигналом (tRCD), 5. После этого подается команда чтения вместе с адресом столбца, 6. После подачи команды чтения, происходит задержка строба выбора столбца tCL 7. в течение которой данные, выбранные из усилителя уровня, синхронизируются и передаются на внешние выводы микросхемы. За первым словом (слово = ширине шины данных микросхемы памяти = 64бит) следуют остальные в течение каждого последующего синхросигнала, отрабатывая полную установленную длительность пакета Burst Length (количество непрерывно передаваемых слов за одну фазу передачи данных). Лучше чтоб Burst Length (BL) = 8 (64бит*8 = 64байт) то количество информации переданной в один цикл передачи = 64 байта (= строке кеша L2). 8. После того как вся информации ”передалась”, данные возвращаются из усилителя (выходного регистра) назад в строку банка (“там, где их взяли”).
Обновление
Память динамическая и заряд со временем ослабевает, для этого нужно, его усилив, перезаписывать, делать регенерацию данных. “Включается внутрикристальный счетчик регенерации. В этот период микросхема памяти является пассивным относительно системы устройством и не отвечает на команды, поскольку интерфейс синхронизации деактивирован. После проведения фазы внутренней регенерации механизм внешней синхронизации активизируется и устройство возвращается в активное состояние по команде Refresh Exit. Тем не менее, полная фаза активизации с момента начала подачи сигнала CKE до готовности принять первую команду от контроллера занимает 4—7 тактов и называется Refresh RAS Assertion.” В связи с этим и используют для серверов память с ЕСС. У себя проверил влияние параметра RefreshMode(RM) memtest86+v1.6,
Memory(RM=64T)=2015MB/s; Memory(RM=7.8uSec)=2604; Memory(RM=15.6uSec)= =Memory(RM=64uSec (Auto))=2658MB/s. Рекомендую поставить этот параметр побольше на 64uSec, чтоб реже “отрывать от работы” микросхему на обновление (если позволяют чипы) да и меньше грется будет. Также max интервал выставлен не в тактах а в uSec дает преимущество при разгоне (больше “рабочих” периодов влезет в интервал, если уменьшать длительность периода)
Запись
Запись аналогична фазе чтения с разницей в дополнительном интервале tWR, характеризующем период восстановления интерфейса после проведения операции. Период восстановления в фазе записи — это обычно двухтактная задержка между окончанием выдачи данных на шину (последний импульс по Data Bus) и инициированием нового цикла. Этот временной интервал обеспечивает восстановление интерфейса после проведения операции записи и гарантирует корректность ее выполнения. В результате, по окончанию передачи последнего слова в фазе записи, строка банка, к которой происходит обращение, входит в стадию регенерации не сразу, а по истечении дополнительной задержки, минимальное значение которой обуславливается наименьшим интервалом, в течение которого ожидается корректное завершение текущей операции записи. Поэтому время активности страницы в фазе записи становиться больше значения tRAS фазы чтения на длительность периода восстановления, tWR ( write recovery time ).
Тоесть tRAS (записи) = tRAS(чтения) + tWR
Тайминги (такты)
Предисловие:
Кстати тут тоже не совсем понятно с обозначениями, тоесть например в
Общая схема назначения адресных байт SPD SIMM/DIMM

9Временной цикл с максимальной задержкой сигнала CAS# (tCK)
10Длительность задержки данных на выходе модуля с учетом CL=Х
11Интерфейс модуля (None/Parity/ECC...)
12Тип и способ регенерации данных
13Тип организации используемых микросхем памяти
14Ширина шины данных ЕСС модуля
15Минимальная задержка произвольного доступа к столбцу
16Длительность передаваемых пакетов (BL)
17Количество логических банков каждой микросхемы в модуле
18Поддерживаемые длительности задержки сигнала CAS# (CL)
19Задержка выдачи сигналов выбора кристалла CS# (tA(S))
20Задержка выдачи сигнала разрешения записи WE# (tA(W))
21Специфические атрибуты модуля памяти
22Атрибуты общего порядка микросхемы памяти
23Минимальный цикл CLX-1
24Максимальное время доступа к данным с минимальным циклом CLX-1 (tAC)
25Минимальный цикл CLX-2
26Максимальное время доступа к данным с минимальным циклом CLX-2 (tAC)
27Минимальное время регенерации данных в странице (tRP)
28Минимальная задержка между активизацией соседних страниц (tRRP)
29Минимальная задержка RAS-to-CAS (tRCD)
30Минимальная длительность импульса сигнала RAS# (tRAS)
31Емкость одного физического банка модуля памяти
32Время установки адресов и команд перед подачей синхроимпульса (tIS)
33Время ожидания на входе после подачи синхроимпульса (tIH)
34Интервал установки данных на входе перед подачей синхроимпульса (tDS)
35Время ожидания данных на входе после подачи синхроимпульса (tDH)

нет tWR но программы например RightMark Memory Analyzer version 3.58 , RaBiT (Radeon BIOS Tuner v 1.7) и др. выдают ряд таймингов.
В часности для примера приведу резалт из RaBiT v1.7
tWL = 1.0; tCL = 4; tCMD = 0 clock; tSTB = equals tWrL + 1/2 clocks; tRcdRD = 6; tRcdWR = 4; tRP = 5; tRAS = 12; tRRD = 4; tR2W = CL + 3; tWR = 3; tW2R = 2; tW2Rsb = Use tWR Rule; tR2R = 2; MemRR = 2A; tRFC = 19; tRBS = CL + 3; tERST = CL – 1; tQSREQ = CL - 1 tDQM = WL - 0.5; tDQS = WL - 0.5; tDQM_Adv = 1 clock earlier for WL 1 clock and more; tDQS_Adv = 1 clock earlier for WL 1 clock and more
Это можно объяснить тем что некторые тайминги являются сумой других.

RAS Precharge Time (tRP)
-длительность подзаряда строки
обуславливаемая накоплением заряда в строке, необходима для перемещения данных обратно в массив (закрытие банка/страницы) до момента прихода команды активизации следующего банка. Так, 30—60 % от общего количества передаваемых запросов на чтение теряется в пределах одной страницы (Page), стандартно называемая строкой логического банка), что получило название попадания в страницу (Page Hit). Поэтому в данном случае нет необходимости активизировать банк, так как данные уже находятся в странице, и все, что требуется — это изменить адрес столбца посредством выдачи сигнала CAS#. Если запрашиваемые данные не найдены в пределах данной страницы, их необходимо вернуть обратно в массив и закрыть банк. Если запрашиваемые данные существуют в одном и том же банке, но в разных строках, необходимо подать команду перезаряда, чтобы банк закрылся (промежуток, составляющий длительность подзаряда), а новая команда активизации банка откроет правильную строку (задержка tRCD), где размещаются необходимые данные.
То есть идея в том что даже если запрашиваемые данные размещены в другой строке одного и того же (из четырех логических ) банков, то его нужно все равно закрыть, а потом опять активизировать и открыть уже другую строку из него же (если данные находятся в одном банке, но в разных строках, то банк необходимо не просто закрыть, а еще и реактивировать. Поэтому каждый банк имеет очень малое время, в течение которого он остается открытым, и длительность цикла tRC (RowCycle time или Bank Cycle Time)становится довольно критическим фактором.).
Но если нужные данные находятся в строке другого логического банка, то нет необходимости тратить время на ожидание закрытия первого банка, поэтому задержка tRP в данном случае не учитывается. (она есть но не влияет на производительность). Разделение логического массива ядра на четыре части позволяет использовать интерфейс выбора кристалла для управления всеми логическими банками одновременно и дает возможность держать сразу по одной открытой странице в каждом банке.

RAS-to-CAS Delay (tRCD)
-задержку от начала передачи команды активизации конкретного логического банка до момента приема команды чтения/записи по приходу фронта CAS#.
-после подачи команды активизации банка, строку, к которой происходит обращение, необходимо предварительно зарядить (выполнить цикл накопления заряда, Precharge) до момента поступления команды чтения (определяемой адресом столбца).

CAS Latency Time (tCL)
-обозначает минимальное количество циклов шины (Clock Period) от момента "фиксации" запроса данных стробом CAS# до момента их устойчивого определения и считывания.
Иными словами, CL — это задержка между формированием логикой управления кристалла микросхемы команды чтения и доступностью к чтению первого слова.
Если регистрация (опознавание приемником сигнала конкретного логического уровня) команды чтения происходит по фронту такта N, а CL составляет M тактов, то соответствующие данные будут доступны через N+M тактов. Однако, для обеспечения гарантированной выдачи данных, транзисторы выходных цепей линий данных включаются на один такт раньше (N+M-1), т.е. на них выводятся данные с неопределенными (на тот момент) уровнями, в результате чего контроллер памяти ожидает еще один такт, и только после этого принимает поступающие данные. При использовании CL2 для модулей, рассчитанных для данной частоты на CL3, выходные цепи могут не успеть выставить нужный уровень (и обеспечить номинальный ток) для точного представления данных на шине и может возникнуть ошибка.


RAS# Active time (tRAS)
-интервал, в течение которого строка открыта для переноса данных. После того, как сигнал RAS# активизировал банк, данные запираются в усилителе уровня.
— это время, необходимое для накопления полного заряда в строке и восстановления данных до начала цикла следующего передзаряда. В свою очередь, перезаряд является командой, закрывающей страницу или банк, поэтому tRAS также характеризуется как минимальное время активности страницы.
Если к tRAS добавить еще и длительность цикла перезаряда, то в результате получится общее количество тактов, необходимое для открытия и закрытия банка, именуемое циклом банка (tRC)


Row Cycle time(tRC )
-количество тактов, необходимых после выставления команды активизации банка до начала фазы перезаряда. Другими словами, после открытия страницы ее необходимо поддерживать в открытом состоянии некоторый промежуток времени до того как она снова закроется. Параметр tRC определяет минимальное количество тактов от момента начала обращения к строке до тех пор, пока банк реактивируется. (tRС=tRAS+tRP).
Теперь вы понимаете каково было мое удивление на то что мне сказали что можно выставить (в bios DFI && A64Tweaker) и выставляется ! tRAS=0, это как бы означает что страница и вовсе не открывалась, что как вы понимаете полностью противоречит теории. Потому я и заподозрил подвох и сказал об этом, (правда отнеслись к этому скептически .) Да, действительно некоторые тайминги могут равняться нулю, то есть задержки нет, но некоторые как например tRAS не могут, в принципе, как суть. Тогда вопрос остался открытым, я попросил Gorod –a провести эксперимент……

CS# (tA(S)) && WE# (tA(W))
-Задержка выдачи сигналов выбора кристалла CS# (tA(S))
-Задержка выдачи сигнала разрешения записи WE# (tA(W))
контроллеру памяти необходимо послать несколько сигналов доступа, чтобы выполнить полную фазу обращения к конкретной микросхеме памяти: CS# (выбор кристалла), MA (адрес памяти), WE# (разрешение записи) RAS# (строб подтверждения адреса строки) и CAS# (строб подтверждения адреса столбца).

Bank Interleaving
-чередования логических банков микросхемы памяти, в то время, как один логический банк проходит цикл обновления содержимого, другой находится в активном состоянии и отрабатывает цикл обращения. Это улучшает эффективность функционирования подсистемы памяти (реальную пропускную способность приближает к теоретической пиковой) относительно неоптимизированного механизма (предвыборка) и "скрывает" время обновления содержимого каждого отдельного банка. (Устройства с емкостью ядра 64Mbit и выше организованы четырехбанковой логической структурой, разделенной внутренними магистралями и трассами ввода/вывода.)
-адреса строк и столбцов используются совместно между всеми логическими банками в пределах одной микросхемы. Вследствие этого контроллер может перенаправлять обращения от одного внутреннего банка к другому, производя необходимые операции. Данные перемежения и получили названия чередующихся обращений, которые дают преимущество, когда при закрытии одного логического банка данные продолжают поступать в/из другого, создавая непрерывный поток. Таким образом, в случае промаха в страницу, фаза перезаряда строки является системно-прозрачной операцией. Тем не менее, одновременное открытие сразу всех логических банков (обращение к конкретной странице в каждом) невозможно, поскольку команды активизации в данном случае могут подаваться с минимальной задержкой в один такт.
Обычно команда активизации может открыть один банк в определенный момент времени (предвыборка), а затем считать данные после задержки tRCD+CL. Однако, практически сразу же, после посылки команды активизации одного банка, контроллер памяти может послать команду активизации другого в этом же цикле, таким образом открыв следующий банк. Если контроллер точно знает какие данные следует передать в другой банк, он может послать команду чтения без трешинга (Trashing, режим интенсивной передачи данных при нехватке системной памяти) пакета данных первого банка. В этом случае делается возможным переход от одного банка к другому с задержкой лишь в один цикл (Bank-to-Bank Latency, задержка перехода "банк-банк") между пакетами из четырех слов (BL=4). В дополнение, фазы накопления заряда и закрытия банка могут выполняться в "фоновом режиме" в процессе считывания данных из перемежающихся банков.
(4-Way Interleave, данные коммутируются между четырьмя логическими банками). Режим чередования логических банков работает только в том случае, если последовательно запрашиваемые адреса находятся в разных банках — иначе транзакции данных происходят по обычной схеме No Interleave. (в доступе от одного банка к другому, когда соответствующие страницы открыты в каждом банке).
В этом случае системе придется простаивать время прохождения обращения и цикл регенерации, после чего запрос повторится. Тем не менее, поддержка конкретного режима должна быть реализована еще и на уровне конкретного приложения. Вообще, любая программа, сильно зависящая от процессорного кэша (объема, типа и иерархии), не способна оптимально использовать режимы чередования по простой причине ограниченности размера страницы, и данные из кэша могут потеряться. В результате, чередование банков может отрицательно сказаться на производительности, поскольку неправильный открытый банк необходимо закрыть до выполнения следующего цикла доступа к данным.

Продолжение следует, еще напишу про пару таймингов: CMD …