Ruins
Как связаны логические банки с физическими
..подкину и я свои 5-шекелей в копилку темы:
HWiNFO32 Version 5.50-3130
--------------------------
Memory:
Module Type SO-DIMM / DDR3-SDRAM
Module Size 2048 МB
Memory Speed 800.0 MHz (DDR3-1600 / PC3-12800)
Burst Lengths(BL) 8
SPD:
Row Address Bits 15
Column Address Bits 10
Number Of Banks 8
Number Of Ranks 1
Device Width 8 bits
Bus Width 64 bits
Module Voltage 1.5 V
SPD показывает организацию модуля памяти..
8 логических банков требуют 3-бита для адресации, которые (на самом деле) являются старшими битами адреса-строки (RowAddr). Итого получаем 18-бит, которыми можно адресовать всего 262.144 строк матрицы. Если разделить 262144 на 8, то младшие 15-бит адреса будут одинаковы для всех банков, поэтому разводим их параллельно по всем\восьми чипам модуля памяти.
Три старших бита BA[2:0] (Bank Activate) контроллёр памяти отсекает от 18-битного адреса строки, и направляет их на дешифратор банка, который собран по схеме "3-in-8". Это позволяет автоматом выбирать номер банка, по адресу строки:
|<-- MA[14:0] -->| Диапазон строк
| |
000.111.1111.1111.1111 <-- 000000..032767 Банк(0)
001.111.1111.1111.1111 <-- 032768..065535 Банк(1)
010.111.1111.1111.1111 <-- 065536..098303 Банк(2)
011.111.1111.1111.1111 <-- 098304..131071 Банк(3) <---
100.111.1111.1111.1111 <-- 131072..163839 Банк(4)
101.111.1111.1111.1111 <-- 163840..196607 Банк(5)
110.111.1111.1111.1111 <-- 196608..229375 Банк(6)
111.111.1111.1111.1111 <-- 229376..262144 Банк(7)
| | ___
+-+-----/-3-->| Д |
BA[2:0] | |--/-8---> Активация банка
|___|
Лин\строка : 100100d = (011).000.0111.0000.0100b
DRAM-строка: банк(3), строка(1796)
Организация чипа (х8) подразумевает соединение между собой каждого из восьми столбцов матрицы, что приводит к слиянию их адресов (ячейка 8-бит). Организация закладывается на этапе производства чипа разработчиком:
Организация (х1) Организация (х8)
_____________ _____________
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_ _|_|_|_|_|_|_|_|__|_|_|_|_|_|_|_|_
| | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | |
0 1 2 3 4 5 6 7 0 1 <---- номер столбца
Для адреса столбцов выделяется 10-бит МА[9:0], значит всего 1-байтных столбцов в матрице =1024. Их адрес приходит по тем-же линиям МА[14:0], что и адрес строки. То есть уже разведён по чипам параллельно. По стробу RAS#, мультиплексор адреса в чипе переключает линии адреса МА[14:0] на дешифратор строки, ..по стробу CAS# - на декодер столбца.
Несложной арифметикой можно получить размер модуля (в данном случае 2Gb)..
Если одна строка чипа равна 1Кб (1024 однобайтных столбца), а всего строк в матрице 262144, то ёмкость одного чипа будет 256 Мбайт. 8 чипов дадут на выходе 2 гига.
Таким образом, при организации физического банка (ранка), все управляющие-линии и линии-адреса разводятся по 8-ми чипам параллельно, а 8-битные инфо-шины каждого из чипов - соединяются последовательно, образуя 64-битную\внешнюю шину модуля к процессору.
В ранке, кол-во строк и банков остаётся прежним - 8 банков, по 32768-строки в каждом. А вот общее кол-во столбцов увеличится до 1024*8(чипов)=8192, хотя адресуемых по-прежнему только 1024. Так-как адреса столбцов совпадают для всех чипов (параллельная разводка), то при выборе столбца автоматом выбираются и соответствующие столбцы в соседних чипах. Общая для всех чипов строка представляет из-себя "страницу DRAM-памяти" (здесь 8Кб).
Модули DDR заточены для пакетной передачи данных (чтение соседних ячеек без подачи адреса столбца). Длинна пакета задаётся параметром "Burst Length" (BL=1,2,4,8,16,Page). Основное назначение пакетной передачи - заполнение данными линейки кэша за одно обращение к памяти. Размер кэш-строки совремнных ЦП равен 64-байта, а параметр(BL) у меня равен(8). Подсмотреть текущее значение(BL) можно в "Аиде" (в разделе чипсет), или прочитать из поля(10h) данных SPD (отчёт CPU-Z).
После открытия DRAM-страницы стробом(RAS#) и заполнения буфера "Sense Amplifier" данными активной страницы, подаётся адрес столбца, который выбирает смещение нужного байта в SenseAMP. Страница остаётся открытой на всё время пакетного цикла (низкий уровень RAS#), и контроллёр продолжает читать смежные (от указанного столбца) ячейки памяти по внутреннему счётчику чипа, исходя из значения BL=8.
По окончанию пакетного цикла, DRAM-страница закрывается (высокий уровень RAS#), и в выходном буфере модуля оказываются 64-байта данных, которые отправляются на внешнюю шину модуля и далее в кэш. DRAM-cтраница возвращается из SenseAMP обратно на свою строку, адрес которой всё-это время был защёлкнут в регистре-защёлке адреса строки - регенерация страницы памяти.