Доброго времени суток! Мужики, помогите кто чем может Я уже с ума схожу. Кто нибудь знает принцип работы сдвоенной PLL? Частота расчитывается так: Частота кварца (27MHz) * NA * NB / (MA * MB * 2^P), где P - общий для обоих PLL. Имеем: ~112 мегагерц NA=14h, NB=5h, MA=3h, MB=1h, P=3 (P^2=8). Все работает отлично. Далее - изменяем значения NA=64h, NB=1h результат не изменился НО частота "поплыла"! Идем еще дальше NA=DCh, NB=86h, MA=8Bh, MB=33h, P=0 - Ничего не пашет, хотя результат по прежнему ~112 mhz Почему? Фигня какая-то.... Заранее благодарен хотя-бы за какие-нибудь домыслы. PS: Девайсы Geforce FX все кроме 5200 (у нее одна PLL) Вот исходники на C для вычисления на всякий случай может там есть подсказка, но черт, не могу я ничего понять кроме асма
Ole Понял из XFree А что за формула такая странная? Хотя вроде понял что ты имеешь ввиду. А это что за фигня NA=DCh, NB=86h, MA=8Bh, MB=33h, P=0 ? Если я тебя понял верно. То ошибка в числах P и MB и NB лежат в 1 байте. твой MB 0 Selects a VCO loop divide value of 4. 1 Selects a VCO loop divide value of 16. твой NB 00 = 4 01 = 1 10 = 20 11 = 5 P 000 =1 001 =2 010 =4 011 =8 100 =16 101 =32
Pavia спасибо что откликнулся. С P все ясно, постделитель со времен ривы-тнт не поменялся. А вот про NB и MB можно ли чуть подробнее? Формула... наверное правильнее будет привести ее к виду Fout=Fref*((NA*NB)/(MA*MB))/P^2, где NA-множитель 1-PLL, NB множетель 2-PLL, MA-делитель 1 PLL и т.д. хотя результат этой формулы тот-же. NA=DCh, NB=86h, MA=8Bh, MB=33h, P=0 - это вычисленные значения. 27mhz*((DC*86)/(8B*33))/1 = 112 mhz. PS. Заметил такую вещь: NB если больше 4 бит - частота начинает дурить чем дальше тем больше. Я так понял что в PLL1 значения N и M любые от 0 до FF. А вот PLL2... PPS. MB от 0 до 5 работает железно
Ole Да я тебя сначала не понял. Сейчас скачал исходники от XFree там сложнее. Зависет от дивайса. if(pll & 0x00000080) { MB = (pll >> 4) & 0x07; NB = (pll >> 19) & 0x1f; } else { MB = 1; NB = 1; }
"Датащита" не существует, все вслепую на удачу. Вы думаете зачем я задавал бы совершенно идиотские вопросы, если бы смотрел в док. Прогресс немного есть, сама грубая ошибка заключалась в том, что не понимая что такое PLL, я не знал о преобразовании уровня напряжения в частоту. Из этого следовало, что далеко не с любого места она генерит, а существует определенный отрезок задаваемый как ни странно постделителем. Посмотрев на мой прошлый алгоритм я удивляюсь что не спалил видяшку. Весьма странно что это никто не знал, вопрос конкретно упирается в электронику.
Ole Я бы очень удивился, если бы узнал, что можно спалить видяшку или что-либо другое через PLL. PLL для того и предусмотрен, чтобы частота не зашкаливала.
Ну видяшку, это грубо сказал. А вот плл вполне возможно, я думаю. И дело не в зашкалевшей частоте (опасно после плл). А в уровне напряжения на VCOmax. По крайней мере у меня, после этого, компьютер не реагировал на ресет, только выключение питания... Я тоже не больно верю что можно вообще что-то спалить, но если представить что уважаемая нвидиа не поставила ограничитель... а она его скорее всего не поставила, потому что в регистр, предельное значение которого 4h свободно пишется до ffh (как раз где-то на 22..24 перестает срабатывать reset), то получаем примерно следущее: "рабочий отрезок" от 350 до 700 МГц нижняя граница которого формируется напряжением .. к примеру 1,65в верхняя - просто умножается на 2. Далее, при нашем запросе низкой частоты, мы сдвигаем отрезок вниз с помощью P, что кстати подтвеждает код биоса. А теперь задираем частоту (тупо) И что происходит с напряжением? PS. Все выше описанное касается внутренностей ПЛЛ, то есть на выходе частота должна быть правильной. Но правильную частоту можно получить разными напряжениями. Тем более есть множитель, делитель и постделитель, все они управляются уровнем напряжения. Поправьте если что.
Поправлю, во избежании непонимания. Не работает ресет - это я имел ввиду ресет видеоплаты. А про регистр в который пишется до ff - пишем, потом читаем и пишем в файл. Так я узнал. Не при чёрном мониторе