В данной статье речь пойдёт об одном из важнейших применений WPCREDIT - настройке встроенных контроллеров A64 и Barcelona в частности. Поскольку настольные чипсеты Intel перешли на PCI-E регистры, то можно поставить вопрос об актуальности WPCREDIT в настоящем времени, что и было сделано при обсуждении моей
статьи об использовании WPCREDIT. Но есть ещё процессоры AMD, обладающие северным мостом, встроенным в процессор. Одним из важнейших компонентов северного моста является контроллер памяти. И все его настройки находятся как раз в PCI регистрах северного моста (0,0,0).
BarcelonaКакие же интересные новинки представлены в представителе новой архитектуры AMD? В первую очередь это два контроллера памяти, каждый по 64 бит и работает со своим каналом. Это значит, что мы можем выставить разные тайминги для разных каналов памяти, но частота на обоих модулях должна быть одинаковой. Контроллеры могут работать либо как 2 по 64 бита, либо связанно, как один двухканальный 128 битный контроллер, как в процессорах K8. Стоит заметить, что согласно терминологии AMD, канал памяти - это контакты, соединяющие процессор с одной частью модулей DIMM. Процессор поддерживает два канала. В процессоре находятся два контроллера памяти, каждый из которых контролирует один 64-битный канал DDR DIMM (
BIOS and Kernel Developer's Guide (BKDG) For AMD Family 10h Processors, стр. 60). Представление о влиянии количества модулей на канал и их тип на максимально возможную частоту можно получить из рисунка:
Перейдём непосредственно к настройке. Скачаем
даташит с описанием регистров процессора. Откроем программу и выберем там устройство DevID-VendorID 1202-1022. Хочу заметить, что в даташите описание регистров представлено в 32-битном виде, потому, возможно лучше будет переключить WPCREDIT в аналогичный вид группировки регистров. Не будет проблем с нумерацией.
Взглянем на список наиболее интересных, на мой взгляд, параметров:
78[32:22]=
MaxRdLatency: maximum read latency 78[19]=
EarlyArbEn: early arbitration enable 78[13:12]=
Trdrd[3:2]: read to read timing 78[11:10]=
Twrwr[3:2]: write to write timing 78[9:8]=
Twrrd[3:2]: write to read DIMM termination turnaround 84[22:20]=
Tcwl: CAS write latency 84[6:4]=
Twr: write recovery 88[31:24]=
MemClkDis: MEMCLK disable 88[23:22]=
Trrd: row to row delay (or RAS to RAS delay) 88[21:20]=
Twr: write recovery time. 88[19:16]=
Trc: row cycle time. 88[15:12]=
Tras: row active strobe 88[11:10]=
Trtp: read to precharge time 88[9:7]=
Trp: row precharge time 88[6:4]=
Trcd: RAS to CAS delay 88[3:0]=
Tcl: CAS latency 8C[31:29]=
Trfc3: auto-refresh row cycle time for logical DIMM 3 8C[28:26]=
Trfc2: auto-refresh row cycle time for logical DIMM 2 8C[25:23]=
Trfc1: auto-refresh row cycle time for logical DIMM 1 8C[22:20]=
Trfc0: auto-refresh row cycle time for logical DIMM 0 8C[17:16]=
Tref: refresh rate 8C[15:14]=
Trdrd[1:0]: read to read timing 8C[13:12]=
Twrwr[1:0]: write to write timing 8C[11:10]=
Twrrd[1:0]: write to read DIMM termination turnaround 8C[9:8]=
Twtr: internal DRAM write to read command delay 8C[7:4]=
TrwtTO: read to write turnaround for data, DQS contention 8C[3:0]=
TrwtWB: read to write turnaround for opportunistic write bursting 90[22:21]=
IdleCycLowLimit: idle cycle low limit 90[20]=
DynPageCloseEn: dynamic page close enable 90[11]=
Width128: width of DRAM interface in 128-bit mode 94[31:28]=
FourActWindow[3:0]: four bank activate window 94[27:24]=
DcqBypassMax: DRAM controller queue bypass maximum 94[20]=
SlowAccessMode: slow access mode (a.k.a. 2T mode) 94[19]=
DcqArbBypassEn: DRAM controller arbiter bypass enable 94[2:0]=
MemClkFreq: memory clock frequency Полный список намного больше и может быть найден в даташите. Рассмотрим, как же нам работать с ними. Для примера, рассмотрим выставление таймингов на привычные всем 3-3-3-12 1T для DDR2-667. Выбираем регистр 88. Смотрим на расшифровку значений регистров:
Ставим 88[3:0]=0010. То есть должно быть значение "1" в бите 1, а в остальных (3,2,0) - "0". В результате регистр должен иметь следующий вид: 88[9:0]=0000000010. Этим мы получим 3-3-3. 88[15:12]=1001. Это даст нам 3-3-3-12. И, наконец, ставим 94[20]=0. Всё, заветная формула 3-3-3-12 1T получена. Чтобы сменить её на 4-4-4-12 1T, нужно поменять регистр 88; 88[9:0]=0100010011. Аналогичным образом, следуя расшифровке значений регистров в даташите, можно настроить все желаемые
тайминги, и не только.
Надеюсь, данная статья пригодится тем, кто занимается глубоким исследованием работы контроллеров памяти A64 и желающим настроить его на максимальную производительность.
Обсудить статью можно
здесь.
Antinomy, 16.09.07