Radeon inside

для раздела Лаборатория
Как-то так получилось, что я все время занимался видеокартами Nvidia, сделал VBE, и последовали естественные вопросы "а как же ATI?". Пытался отнекиваться, мол нет аппаратуры для разработки, но вмешались www.Overclockers.ru, да и мне самому стало интересно взглянуть на внутренности. У меня оказался Radeon 9500 с возможностью полноценной переделки в Radeon 9700, так что тестирование было максимально приближено к боевому. Постараюсь затронуть общие вопросы, нюансы именно R300/350 не столь интересны. Итак, по пунктам и общепринятым заблуждениям ....

 

DeviceId

DeviceId (идентификатор устройства) состоит из двух полей - основного и дополнительного. Основной (биты с 2-го по 15) задается битами с фиксированным значением и перемычками (резисторами) на корпусе чипа.
Дополнительный DeviceId (биты 0 и 1) задается младшими двумя битами байта номер 74h во FLASH BIOS. Обычно, там лежит число 90h.

В состав процессора видеокарты входит ASIC (Application Specific Integrated Circuits) - относительно простой контроллер ввода-вывода и управления. На него возлагаются функции интерфейса внутренних узлов видеокарты с одной стороны, и остальных компонентов компьютера с другой стороны. Также, он выполняет начальную настройку и конфигурирование внутренних узлов видеокарты. По аппаратному сигналу reset ASIC Radeon'а выполняет чтение ряда байт из FLASH BIOS и по значению этих двух бит устанавливает младшие два бита в DeviceId. Вообще говоря, подобная технология достаточно распространена (только у Nvidia считываются "перемычки" на адресной шине) и достаточно удобна для производителя. Хочу особо предостеречь от бездумного изменения этого и близлежащих байт, особенно по адресу 75h - видеокарта может перейти в такой режим, что никакая дополнительная PCI карта не спасет!

Предполагаю, ASIC конфигурируется этим байтом, а одно из его состояний - "disable". При отключенном ASIC программное обновление FLASH BIOS невозможно. Впрочем, если у Вас есть паяльная станция SMD и программатор с соответствующей колодкой - можете попробовать.

Разбивка DeviceId на фиксированную и переменную часть дает возможность гарантировать неизменность типа устройства и гибкость для отбраковки по качеству используемых комплектующих как на этапе сборки, так и при финальном тестировании. Т.е., можно разграничивать, по сути, одно и то же устройство на варианты low, normal, high, super. Для плат Radeon 9500 Pro / 9700 ATI сделала принципиальное упущение - у них один и тот же тип 4E44h и Radeon 9500 Pro надо было назвать Radeon 9700 Lite, так было бы честнее :).

Основное поле DeviceId не может быть изменено без перестановки перемычек (перепайка одного или двух резисторов) на корпусе графического процессора. Другой, вполне возможный, вариант изменения значения этого регистра - воспользоваться JTAG, но что-то слабо верится в перспективность этого направления (JTAG - специальный последовательный интерфейс к внутренней архитектуре процессора). Это дает возможность читать и корректировать значения регистров даже при работающем процессоре. Технология очень распространена, но способ доступа весьма специфичен для каждого типа устройств.

Дополнительное поле DeviceId можно изменить соответствующей коррекцией двух младших бит байта по адресу 74h в BIOS. Делать это "на лету" нельзя - его значение "защелкивается" по reset и последующее изменение теряет всякий смысл (примечание: сигнал reset является общим для всех PCI/AGP устройств).

Таким образом, DeviceId может изменяться только в пределах своего типа. Например, для R9500 это будет 4144h ... 4147h, для R9700 - 4E44h ... 4E47h и так далее. Сам BIOS этот DeviceId не интересует, что лишний раз подтверждает унифицированность BIOS'ов для всего семейства. Впрочем, есть одно небольшое, но очень неприятное исключение ....





 

Начальный запуск

При старте BIOS должен знать адреса доступа к собственному устройству, но по технологии PnP эти адреса могут переназначаться основным BIOS в произвольное место. Чтобы узнать эти параметры, BIOS сканирует PCI configuration space на наличие собственного устройства. Для поиска берется пара DeviceId / VendorId (идентификатор производителя) как критерий соответствия. Это все правильно, как же иначе отождествить собственную аппаратуру? К слову сказать, Nvidia поступает проще - "не трясет" и работает через стандартный порт VGA. Так вот, если (случайно) прошить BIOS с не тем DeviceId или VendorId, то BIOS при запуске не найдет такого устройства, не сможет работать с аппаратурой и мы получим черный экран. Можно ограничить поиск только по VendorId, но ATI делает не только видеокарты и проблемы возможны. Т.е. этот прием допустим только для исследовательских целей, чтоб не мешался дополнительный DeviceId:

           push   eax
           push   bx
           mov    bx,cs:[***]
label1:    xor    dx,dx
           call   *****
           cmp    eax,cs:[offset DeviceVendorId]
           jne    label2
           mov    dl,14h
           call   *****
           mov    dh,ah
           jmps   label3
label2:    add    bx,8
           cmp    bh,9
           jb     label2
           mov    dx,cs:[***]
label3:    xor    dl,dl
           pop    bx
           pop    eax
           retn

В строке cmp  eax,cs:[offset DeviceVendorId] надо заменить 66h на 90h.
Прошу не забывать - там две почти одинаковых процедуры, править придется обе.
Еще раз обращаю внимание - это нельзя оставлять на всегда, проблемы будут.
Я не привожу конкретные адреса и коды для поиска/замены - они несколько меняются для разных BIOS'ов даже одного и того же устройства, примерный адрес порядка 5A00h.

 

Память и тайминги

Существует распространенное мнение, что максимальная рабочая частота памяти зависит исключительно от таймингов (временных соотношений управляющих сигналов). Это так и это не так. Когда началась разработка проекта TestMem4, ко мне обратился обратился один человек с интересным наблюдением - достаточно известная фирма что-то изменила в очередной версии BIOS материнской платы и разгонный потенциал памяти резко упал. Точнее, память перестала работать на своей частоте. Оказалось, что они честно следовали спецификациям и изменяли мощность (силу тока, импеданс) выходных каскадов шин адреса, данных в контроллере DRAM в зависимости от количества установленных модулей DIMM. Это правильно, но нагрузочные характеристики DRAM зависят и от фирмы производителя чипов, и от PCB и от партии. Так в TestMem4 появилась настройка интерфейса для некоторых чипсетов. Я заговорил о мощности управляющих сигналов вовсе неспроста - боюсь, что низкий разгонный потенциал связан именно с этим эффектом. Весьма возможно, что это делается умышленно самой ATI для разграничения продуктов.

Если сравнить внешнее проявление переразгона по памяти для Nvidia и ATI, то будет сильно заметен разный принцип сбоев. Для Nvidia это мусор на экране, и при снижении частоты дефект бесследно исчезает, а у ATI - дефекты в виде вспышек линий, и еще хотя бы при мизерном повышении частоты что-то "ломается". Лечится только полным выключением/включением питания, даже теплая перезагрузка не всегда спасает. Этот дефект никак не может быть вызван сбоями шин адреса или данных, а вот от сбоя управляющих сигналов это произойдет наверняка. Особенность идеологии SDRAM в том, что она программируется контроллером DRAM на нужные параметры. Программирование осуществляется специальным (временным) соотношением управляющих сигналов с передачей параметров по шине адреса. Это делает ASIC по командам BIOS при стартовой инициализации. Таким образом, один сбой управляющего сигнала и "голову" у SDRAM безвозвратно "сносит" до последующей холодной перезагрузки компьютера. Короче говоря, проблема или в мощности выходного каскада или в предкомпенсациях (небольших задержках сигнала) для некоторых управляющих сигналов.

 





"Чужой" BIOS

Обычно, для смены DeviceId ищется какой-то особенный "взломанный" BIOS. Пробовал различные версии и под различные видеокарты (R9500 / R9500 Pro / R9700** / R9800**) - лучше ни разу не было, только хуже. Вообще говоря, родной BIOS настраивают исходя их настроек платы и именно он должен больше всего подходить под существующую плату. Да, при переборе разных BIOS разброс разгонных свойств отличался достаточно сильно, например, для памяти разброс был в 100MHz, но проверялось это только для маленького фрагмента видеопамяти - текстового буфера по признаку появления мусора и помех на экране. Тестирование в TestVideoRAM на полном объеме памяти показало значительно меньший разброс частот. Наверно, корректнее будет изменить DeviceId в старом BIOS, если будут перепаиваться резисторы?

 

Утилиты

Ну, с этого все начиналось, так что - VBE под ATI R9500-9800. Она повторяет идеологию версии под Nvidia, но есть и некоторые различия. VBE (Video BIOS extender) - меню настройки для видеокарты по аналогии с обычным BIOS материнской платы. 

Начальная версия может управлять частотой GPU и памяти, включать TV-out (PAL) и выбирать тайминги из четырех вариантов - собственных и 3 заданных. Селективная установка каждого параметра таймингов весьма нетривиальное занятие и это проще делать другой программой - TestVideoRAM, реинкарнацию которой я также сделал.

TestVideoRAM - программа для тестирования видеопамяти карт Nvidia и ATI Radeon 9500-9800. При этом можно устанавливать начальные частоты GPU и памяти, отдельные тайминги памяти. Сам регистр таймингов выводится на экран, потом можно внести его или в VBE или в сам BIOS. Программа пытается найти максимально возможные частоты GPU и памяти, что может пригодиться при выборе предельных частот в Windows. Если упрощенно, то принцип программы прост - повышается частота до появления сбоев, потом снижается. Да, это может сопровождаться дефектами на экране, но это делается в DOS и делается очень маленькими шагами, что обеспечивает "щадящий" режим тестирования. Аналогичное тестирование в Windows может привести к зависанию. Но Windows держит открытыми файлы и копию FAT, часть из них кешируется, и подобный эксцесс иногда заканчивается печально.

Для ATI тестирование на максимальную частоту GPU не производится. Вообще говоря, ситуация с ATI очень напоминает ранние видеокарты Nvidia - Riva TnT и TnT2. В них не было (расширенной) системы кэширования. Очень неприятный "эффект" и хорошо бы его исследовать.





Загрузчик видео BIOS Loader позволяет перегружать BIOS на свое законное место. Loader очень хорошо подходит для первичного тестирования BIOS'а. Из положительных черт, кроме его возможности перезаписи в shadow RAM, можно отнести его устойчивость к BIOS'ам с интегрированным VBE и отсутствием проверок на правильность контрольных сумм. Это позволяет значительно проще корректировать BIOS. Но у Loader'а есть и существенный недостаток - ATI что-то нехорошее делает с BIOS (точнее - множественные проверки на "не ROM ли это") и файл BIOS'а работает не совсем честно, остается часть настроек от старого BIOS. Loader изначально писался под Nvidia, что ж тут поделаешь? Существует другая аналогичная программа - RAMBIOS. Эта программа корректно загружает BIOS, но также имеет ограничения: она несовместима с VBE-BIOS'ами (я использую видеопамять для хранения своих временных данных), и тратит 64 КБ под каждую загрузку BIOS. Это не так уж и мало, после 7-8 загрузок весь DOS раздел закончится и придется перегружаться.

 

Текущий список "глюков" программ

VBE для видеокарт ATI: 

  • не сохраняет временные параметры и при засыпании/просыпании компьютера настройки сбрасываются в BIOS-default. Событие редкое, будет исправлено в ближайшей версии; 
  • раздел "CPU" находится в разработке, будет сделан в следующей версии. 

TestVideoRAM 1.0: 

  • программа переписывалась практически заново и тест на видеокартах Nvidia работает неустойчиво, для них пользуйтесь предыдущей версией.

 

Ссылки

 

Благодарности

Ну кому, конечно www.Overclockers.ru за оказанное содействие. Если есть вопросы - прошу в соответствующие разделы конференции.

Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Страницы материала
Страница 1 из 0
Оценитe материал
рейтинг: 4.3 из 5
голосов: 15

Теги

Популярные новости

Сейчас обсуждают