pll что это такое

Pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

PLL (Permutation of the Last Layer) – заключительный этап сборки в методе Фридрих, заключающийся в перестановке (пермутации) ребер и улов последнего слоя, относительно друг друга, когда они уже ориентированы.

Для каждой из 21 ситуации были подобраны скоростные алгоритмы с различных сторон. Поэтому если вы только начали изучать PLL, то вам не нужно искать алгоритмы на других ресурсах, т. к. лучшие из них собраны здесь, и вы сможете выбрать для себя алгоритм с интересующей вас стороны для любой из ситуаций.

Треугольники углов (А-perms)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Lw’ U R’ D2 R U’ R’ D2 R2

y x’ R2 D2 R’ U’ R D2 R’ U R’

y’ R U R’ U’ R’ F R U R’ U’ R’ F’ R U R2 U’ R’

y’ Rw L D2 L’ U’ L D2 L’ U L’

y’ x’ U’ R U’ L2 U R’ U’ L2 U2

y2 Rw’ U L’ D2 L U’ L’ D2 L2′

x R2 D2 R U R’ D2 R U’ R

y U’ R’ F’ R U R U’ R2 F R U R’ F’ R F

y Lw U’ R D2 R’ U R D2 R2

y’ R U R2 U’ R’ F R U R U’ R’ F’ R U R U’ R’

y’ Rw U’ L D2 L’ U L D2 L2

y’ Rw U’ L Uw2 R’ U R Uw2′ L2

Терминатор (E-perm)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

x’ R U’ R’ D R U R’ D’ R U R’ D R U’ R’ D’

R’ U’ R’ D’ R U’ R’ D R U R’ D’ R U R’ D R2

R’ U2 R’ D’ R U R’ D R U’ R’ D’ R U2 R’ D R2

Саночки (Z-perm)

Крест сторон (H-perm)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

U’ M’ U M2 U M2 U M’ U2 M2

y/y’ M2 U’ M2 U’ M’ U2 M2 U2 M’ U2

U2 M’ U2 M2 U2 M’ U’ M2 U’ M2

M2′ U2 M’ U’ M2′ U’ M2′ U’ M’ U

y’ R’ U’ R U’ R U R U’ R’ U R U R2 U’ R’ U2

M2 U’ M2 U2 M2 U’ M2

M2 U M2 U2 M2 U M2

Треугольники сторон (U-perms)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R U’ R U R U R U’ R’ U’ R2

U2 R U R’ U R’ U’ R2 U’ R’ U R’ U R

y2 R2 U’ R’ U’ R U R U R U’ R

y2 M2 U M’ U2 M U M2

y’ R2 U’ F B’ R2 F’ B U’ R2

y’ M2 Uw’ M’ Uw2 M’ Uw’ M2

R2 U R U R’ U’ R’ U’ R’ U R’

y2 R’ U R’ U’ R’ U’ R’ U R U R2

y2 M2 U’ M’ U2 M U’ M2

y’ R2 U F B’ R2 F’ B U R2

y M2 Uw M’ Uw2 M’ Uw M2

Лямбды (J-perms)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R U R’ F’ R U R’ U’ R’ F R2 U’ R’ U’

R U2 R’ U’ R U2 L’ U R’ U’ L

y R U’ L U2 R’ U R U2 R’ L’ U

y2 R’ z R U R’ D R2 U’ R U R2 U’

y2 z R U R’ D R2 U’ R U R2′ U’ D’

y2 R’ U2 R U R’ F’ R U R’ U’ R’ F R2 U’ R’ U R

y2 x U2 Lw U Lw’ U2 Rw U’ L U L2

U’ R’ U L’ U2 R U’ R’ U2 R L

L U’ R’ U L’ U2 R U’ R’ U2 R

R’ U2 R U R’ z R2 U R’ D R U’

x U2 Rw’ U’ Rw U2 Lw’ U R’ U’ R2

F U’ R’ F R2 U’ R’ U’ R U R’ F’ R U R’ F’

y L’ U R’ z R2 U R’ U’ R2 U D R’

y2 L’ U’ L F L’ U’ L U L F’ L2 U L U

y2 L’ U2 L U L’ U2 R U’ L U R’

Cемерки (R-perms)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R’ U2 R U2 R’ F R U R’ U’ R’ F’ R2 U’

U R2 F R U R U’ R’ F’ R U2 R’ U2 R

R’ U2 R’ D’ R U’ R’ D R U R U’ R’ U’ R U’

U R’ U R U R’ U’ R’ D’ R U R’ D R U2 R

L U2 L’ U2 L F’ L’ U’ L U L F L2 U

R U R’ F’ U’ F R U R’ F R’ F’ R2 U2 R’

y R U’ R’ U’ R U R D R’ U’ R D’ R’ U2 R’ U’

y2 U’ R U R’ F’ R U2 R’ U2 R’ F R U R U2 R’

Буква Т (T-perm)

Копье (Y-perm)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R U R’ U’ R’ F R2 U’ R’ U’ R U R’ F’

(Dw2) R U R’ U’ R’ F R2 U’ R’ U F’ L’ U L

y2 L’ U’ L U L F’ L2 U L U L’ U’ L F

F R U’ R’ U’ R U R’ F’ R U R’ U’ R’ F R F’

F R’ F R2 U’ R’ U’ R U R’ F’ R U R’ U’ F’

R2 U’ R’ U R U’ x’ z’ L’ U’ R U’ R’ U’ L U

R’ U’ R U’ R U R’ F’ R U R’ U’ R’ F R2 U’ R2 U R

y2 L2′ U’ L’ U L U’ y Rw’ U’ R U’ R’ U’ L U

y2 z U’ R’ U2 R’ D R2 U’ R U R2 U’ D’ R U’ R U

Параллельный перенос (F-perm)

Летающая тарелка (V-perm)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R’ U’ F’ R U R’ U’ R’ F R2 U’ R’ U’ R U R’ U R

U’ R’ U R U’ R2 F’ U’ F U R F R’ F’ R2

y R’ U2 R’ U’ y R’ F’ R2 U’ R’ U R’ F R U’ F

y’ R’ U R U’ R2 F’ U’ F U R U’ R2 Fw’ U’ Fw

y’ R’ U R U’ R2 F’ U’ F U R U’ x’ R2 U’ R’ U

y2 F’ U2 F’ U’ R’ F’ R2 U’ R’ U R’ F R U’ F

y2 F Rw2 R’ U2 Rw U’ Rw’ U2 x’ R2 U’ R’ U Rw2 D’

R’ U R’ U’ y R’ F’ R2 U’ R’ U R’ F R F

R’ U2 R U2 L U’ R’ U L’ U L U’ R U L’

y F’ U F’ U’ R’ F’ R2 U’ R’ U R’ F R F

y2 L’ U2 L U2 R U’ L’ U R’ U R U’ L U R’

Буквы X (N-perms)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R U R’ U R U R’ F’ R U R’ U’ R’ F R2 U’ R’ U2 R U’ R’

z R U R’ D R2 U’ R D’ U R’ D R2 U’ R D’

R U’ R’ U Lw U F U’ R’ F’ R U’ R U Lw’ U R’

R U R’ U’ L U2 L’ U’ L U2 R’ U L’ U’ R U R U’ R’

R U’ L U2 R’ U L’ R U’ L U2 R’ U L’ U’

R’ U R U’ R’ F’ U’ F R U R’ F R’ F’ R U’ R

R’ U R’ F R F’ R U’ R’ F’ U F R U R’ U’ R

R’ U L’ U2 R U’ R’ L U L’ U2 R U’ L U

L’ U R’ z R2 U R’ U’ D R D’ R2 U R’ z’ R

R’ U’ R U’ L U’ R’ U L’ U2 R U’ R’ U2 R U R’ U R

Восьмерки (G-perms)

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R2′ F2 R U2 R U2′ R’ F R U R’ U’ R’ F R2

y2 R2′ Uw’ R U’ R U R’ Uw R2 B U’ B’

y2 R2 U’ R U’ R U R’ U R2 D’ U R U’ R’ D U’

y2 D R2 U’ R U’ R U R’ U R2 D’ U R U’ R’ U’

R2′ F’ R U R U’ R’ F’ R U2′ R’ U2′ R’ F2 R2

y’ R U R’ y’ R2 Uw’ R U’ R’ U R’ Uw R2

y’ R U R’ U’ D R2 U’ R U’ R’ U R’ U R2 U D’

y2 Fw R Fw’ R2 Uw’ R U’ R’ U R’ Uw R2

y2 U D’ R U R’ U’ D R2 U’ R U’ R’ U R’ U R2

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

R2 Uw R’ U R’ U’ R Uw’ R2 y’ R’ U R

L2 F2 L’ U2 L’ U2 L F’ L’ U’ L U L F’ L2

y’ U D’ R2 U R’ U R’ U’ R U’ R2 D U’ R’ U R

Источник

Использование PLL

PLL широко используются при телекоммуникации, в компьютерах и других электронных устройствах.

Замечу, что в микросхеме серии MAX II, которая стоит на нашей первой плате Марсоход, не было встроенных PLL. Серия Altera MAX II слишком простая.

В микросхеме Altera Cyclone III, установленной на новую плату Марсоход2, есть встроенные PLL. Это очень важный компонент, так как с помощью PLL обычно в проекте создаются все частоты, нужные для дизайна. Именно поэтому нужно познакомиться с PLL поближе.

Рассмотрим принцип действия PLL.

Это было достаточно упрощенное изложение. Более подробно о работе PLL можно почитать в документации компании Альтера например про микросхему Cyclone III: Clock Networks and PLLs in the Cyclone III Device Family.

В этой Альтеровской документации, например, блок-схема PLL изображена вот так:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Вроде бы сложно, но по сути так же, как я нарисовал выше.

Теперь спустимся с небес на землю и посмотрим, как же эти PLL использовать в проектах для Cyclone III и в частности для платы Марсоход2.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

А вот и самый главный экран визарда.
Здесь мы должны задать коэффициенты умножения и деления для исходной частоты, чтобы получилась нужная нам частота.

Коэффициенты можно задать самостоятельно вручную или задать желаемую частоту и Quartus II Wizard сам расчитает коэффициенты, которые нужно потом скопировать.

Вот, например, для работы первого проекта для платы Марсоход2 для видеорежима 1440×900 60Hz нужна по стандарту VESA частота 106.5Мгц.

Для каждого выxода PLL будет соответствующая страница визарда с настройками.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Вот пожалуй все первоначальные сведения для использования PLL в проектах для микросхему Altera Cyclone III.

Источник

Фазовая модуляция радиосигнала в ПЛИС

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Так иногда бывает, что занимаешься одной технической проблемой, но, по мере погружения в задачу и во время поиска ее решения, появляются «побочные продукты». Так случилось и в этот раз. Я исследовал различные методы измерения временных интервалов с помощью ПЛИС. В одном из предложенных методов измерений был использован динамический сдвиг фазы тактовой частоты с PLL. Позже пришла идея: используя свойства PLL можно попробовать сделать в ПЛИС простейший радиопередатчик с фазовой модуляцией.

И кое-что получилось!

Пожалуй нужно немного рассказать, что такое PLL. PLL (Phase Locked Loop) — это устройство фазовой автоподстройки частоты генератора. Выглядит примерно вот так:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Здесь есть ГУН — Генератор, Управляемый Напряжением. Он выдает желаемую частоту, которая через обратную связь идет на фазовый детектор. Фазовый детектор определяет разность фаз между опорной частотой F0 и получившейся частотой F1, разность фаз — это сигнал ошибки, который отфильтровывается и воздействует на ГУН, заставляя его колебаться чуть быстрее или чуть медленнее. Так, на выходе ФАПЧ получается частота, синхронная с опорной.

В микросхемах ПЛИС, например, от компании Интел (эх… когда-то была Альтера) серии MAX10 есть встроенный PLL, который выглядит вот так:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Кажется, что это что-то гораздо более сложное, чем то, что изображено выше. Но нет, если присмотреться внимательно, то видны общие черты: ГУН, Генератор Управляемый Напряжением — это VCO, Voltage Controlled Oscilator. PFD — это фазовый детектор, LF — Loop Filter, фильтр фазовой ошибки.

Кроме всего прочего, PLL внутри ПЛИС имеет набор счетчиков делителей. Например, делитель частоты M в цепи обратной связи позволяет получить на выходе PLL частоту в несколько раз выше, чем опорная. Так же имеются выходные счетчики C0-C4, которые позволяют на пяти выходах PLL получить сетку частот с разными делителями.

Есть внутри PLL еще компоненты, которые почему-то обычно не изображаются на структурных схемах в документации Altera/Intel — это схемы управляющие перезагрузкой и перенастройкой PLL. Логические схемы в ПЛИС могут на лету перезагружать коэффициенты счетчиков делителей в PLL и еще они позволяют сдвигать фазу выходных частот PLL. Конечно, перезагрузить на лету параметры PLL — это не очень простая операция, которая к тому же занимает определенное время. А вот сдвигать фазу выходной частоты PLL можно довольно просто и быстро. Причем, разрешающая способность по фазе напрямую зависит от частоты Fvco. Сдвигать фронт тактовой частоты можно на 1/8 периода Fvco. Например, входная частота на PLL Fin=100МГц, а делитель M в цепи обратной связи к фазовому детектору равен 13-ти. Тогда Fvco=1300МГц, а разрешение по фазе для выходной частоты PLL Fout=100МГц будет составлять всего 3,46 градуса.

Для разработки проекта для ПЛИС Altera/Intel используется среда САПР Quartus Prime и в ней есть средства настройки экземпляров PLL: Megawizard Plug-In Manager. С его помощью можно устанавливать нужные свойства PLL:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Здесь как раз и видно какие получаются Fvco и разрешение по фазе для выходных частот.

Для управления фазой выходных частот у компонента PLL есть дополнительные сигналы: SCANCLK, PHASESTEP, PHASEUPDOWN, PHASECOUNTERSELECT, PHASEDONE.

В документации Altera/Intel написано, как управлять этими сигналами, чтобы получить единичный сдвиг фазы на избранной выходной частоте.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Получается так: сигнал PHASEUPDOWN определяет в какую сторону нужно двигать фазу. PHASECOUNTERSELECT определяет сигнал какой именно тактовой частоты PLL будет сдвинут (например, если нужно сдвинуть частоту c1, то PHASECOUNTERSELECT=3’b011 — это есть в документации). Цикл сдвига фазы начинается с установки сигнала PHASESTEP и заканчивается, когда PLL выставит в ноль PHASEDONE. Если нужно сдвинуть фазу значительно, то придется выполнить несколько таких циклов. Все это при желании можно даже просимулировать в ModelSim, как это делается я писал вот здесь.

Теперь, дальше — интереснее. Плавно перехожу к моему «радиопередатчику»:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Я использую плату Марсоход3bis на чипе ПЛИС Altera/Intel MAX10. Плата имеет встроенный программатор на базе двухканального чипа FTDI. Причем один канал FT2232HL используется под JTAG (загрузка ПЛИС, отладка в SignalTap), а второй канал используется для передачи данных в плату, как последовательный порт.

К плате, прямо к двум цифровым пинам-выходам подключены два куска провода по 0,75 метра. Это антенна, «полуволновый вибратор». Без выходного аналогового фильтра на излучаемый диапазон, конечно, не хорошо, но сама антенна уже какой-то фильтр, да и мощность передатчика невелика…

Проект написан на языке Verilog HDL — всего-то пара десятков строк кода:

Весь проект для САПР Intel Quartus Prime можно взять на GitHub: github.com/marsohod4you/Fpga-PM-Radio.

В проекте есть PLL с двумя выходами c0 и c1, на каждом из них 100МГц. Выход c0 используется для тактирования всей схемы, а вот выход c1 — это и есть несущая 100МГц, частота моего «радиопередатчика» (FM-диапазон). Ее я и собираюсь модулировать по фазе.

Я собираюсь посылать сырой аудиофайл с компьютера в плату через последовательный порт. При формате данных 8 бит на одну аудиовыборку, моно, 22050Гц, наиболее удобна скорость последовательного порта 230400 бод. В самом деле, каждый байт при последовательной передаче имеет старт бит и один или два стоп бита. Если два стоп бита, то получается 11 передаваемых бит на байт данных. Значит 230400/11=20945 выборок в секунду. Это конечно не идеал, не 22050, но чуть-чуть похоже. Ну получится у меня звук немного ниже, чем нужно, мне для моих экспериментов не важно… Итак в проекте есть приемник последовательных данных.

Полученный из последовательного порта байт w_rx_byte внутри ПЛИС сравнивается с внутренней переменной (регистром) current_pll_phase. Разница меж ними — это и есть количество шагов по сдвигу фазы, которые нужно сделать в одну или другую сторону. Таким образом выполняется фазовая модуляция на выходе c1 у PLL.

Теперь второй вопрос. Предположим, что передатчик с фазовой модуляцией работает, а чем слушать?

Я исхожу из того, что ФМ и ЧМ непосредственно связаны друг с другом интегральным/дифференциальным законом. Мгновенная частота радиосигнала — это производная от его фазы. Производная синуса — это косинус. Вряд ли слушатель радиопередачи отличит их на слух (шутка). В общем, я решил попробовать передавать аудио файл моим «радиопередатчиком» с фазовой модуляцией, а слушать мою «радиопередачу» обычным FM-приемником. Я использую мобильный телефон с гарнитурой в качестве FM приемника.

Вот как это выглядит:

Удивительно, но передаваемая мной музыка устойчиво слышна в FM радиоприемнике мобильного телефона на расстоянии до 10-15 метров.

PS: В России 7 мая отмечается День радио. В 1895 году выдающийся русский физик и изобретатель Александр Попов в Санкт-Петербургском университете продемонстрировал созданную им первую в мире искровую беспроводную приемо-передающую радиосистему. В России этот факт был принят за точку отсчета начала радиосвязи.

Источник

Использование PLL

PLL широко используются при телекоммуникации, в компьютерах и других электронных устройствах.

Замечу, что в микросхеме серии MAX II, которая стоит на нашей первой плате Марсоход, не было встроенных PLL. Серия Altera MAX II слишком простая.

В микросхеме Altera Cyclone III, установленной на новую плату Марсоход2, есть встроенные PLL. Это очень важный компонент, так как с помощью PLL обычно в проекте создаются все частоты, нужные для дизайна. Именно поэтому нужно познакомиться с PLL поближе.

Рассмотрим принцип действия PLL.

Это было достаточно упрощенное изложение. Более подробно о работе PLL можно почитать в документации компании Альтера например про микросхему Cyclone III: Clock Networks and PLLs in the Cyclone III Device Family.

В этой Альтеровской документации, например, блок-схема PLL изображена вот так:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Вроде бы сложно, но по сути так же, как я нарисовал выше.

Теперь спустимся с небес на землю и посмотрим, как же эти PLL использовать в проектах для Cyclone III и в частности для платы Марсоход2.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

А вот и самый главный экран визарда.
Здесь мы должны задать коэффициенты умножения и деления для исходной частоты, чтобы получилась нужная нам частота.

Коэффициенты можно задать самостоятельно вручную или задать желаемую частоту и Quartus II Wizard сам расчитает коэффициенты, которые нужно потом скопировать.

Вот, например, для работы первого проекта для платы Марсоход2 для видеорежима 1440×900 60Hz нужна по стандарту VESA частота 106.5Мгц.

Для каждого выxода PLL будет соответствующая страница визарда с настройками.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Вот пожалуй все первоначальные сведения для использования PLL в проектах для микросхему Altera Cyclone III.

Источник

Первые эксперименты со смешанным Litex+Verilog проектом для ПЛИС

В предыдущей статье мы начали осваивать построение шинно-ориентированных систем на базе среды Litex (которая всё делает на Питоне) с внедрением собственных модулей на Верилоге. Статья так разрослась, что практические опыты мы оставили на потом. Пришла пора провести их. Сегодня мы подключимся к VGA-монитору и поуправляем изображением, которое выдаёт модуль gpu, описанный в файле gpu.v, то есть, реализованный на языке Verilog. Управлять мы им будем через регистр команд, расположенный в блоке CSR, спроецированном на шину Wishbone. Все эти сущности, в свою очередь относятся к среде Litex. Инструменты для опытов мы тоже будем использовать штатные, Litex-овские. Приступаем!

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Луч спит – развёртка идёт

Итак, мы проверяем пример, который формирует изображение через шнур VGA. Но что за константы в найденном на просторах сети коде? Они какие-то непонятные. Многие статьи просто ссылаются на готовые таблицы. Давайте я расскажу подробнее, откуда они взялись. Если я спрошу, сколько строк на экране в развёртке VGA, многие ответят, что 480. А если я спрошу, сколько строк было на экране отечественного телевизора, многие также ответят, что 625. Сейчас мы узнаем страшную тайну. Хоть эти цифры и не должны совпадать (первый ответ родом из шестидесятигерцовой NTSC, а второй – из нашей пятидесятигерцовой системы), но относятся к совершенно разным измерениям.

Дело в том, что 480 строк в VGA – это всего лишь видимые строки. А 625 строк в отечественной развёртке – это именно строки, передаваемые в сигнале. В чём разница?

Во-первых, в кинескопе лучу нужно время для обратного хода. Дойдя до нижней точки экрана, он должен пролететь назад. И ему нужно время, гораздо большее, чем время хода одной строки. У очень старых чёрно-белых телевизоров при максимальной яркости эти линии даже можно было разглядеть. Я в детстве так любил баловаться. Вот я нашёл на Гугле типичный рисунок:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Получается, что в сигнале должно быть предусмотрено время на этот процесс. Что в это время передаётся – не важно, так как луч здорового телевизора при этом погашен. Но время на сам процесс выделено быть должно.

То же касается и строчного обратного хода, хоть там время и намного меньше.

Дальше, аналоговые системы, да ещё и докварцевых времён, требовали некоторой подстройки. Вот таблица УЭИТ:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Белые тонкие линии на реперной области по краям экрана, должны были совмещаться с его границами. Что за линией – не должно быть видно. Ну, это на случай, если изображение будет немного плавать. А в сигнале эти точки присутствовать должны!

Вот и получается, что не все сигнальные строки (да и точки строк) являются видимыми. Из отечественных 625 строк, видимыми являлись только 576. А в американском стандарте, 480 строк – это видимая часть экрана при 525 строках в сигнале.

Шло время. Ушли в прошлое кинескопы. Их заменили матрицы, в которых нет ни электронного луча, ни его обратного хода, а картинка для них хранится в ОЗУ, поэтому непрерывность развёртки уже не требуется. Но для совместимости сигнал остался прежним. Мало того, если цикл статей не прервётся из-за отсутствия спроса, и мы дойдём до полностью цифрового HDMI, то увидим, что даже там есть невидимые участки растра! Поэтому, формируя картинку 640х480 точек, мы реально должны передавать по проводам область несколько большего размера.

Здесь я опустил массу эфирных штучек: замешивание синхроимпульсов в сам сигнал, чересстрочную развёртку и прочее, прочее, прочее. Мы сейчас просто посмотрели саму идею, откуда взялись эти лишние строки и точки внутри строк, привязав их к мониторным сущностям. Что же до точных цифр, то мы их вычислять не должны, так что все нюансы нам не потребуются. Есть масса статей, где приведены таблицы, сколько точек надо добавить к картинке. Причём на самом деле, добавленные значения измеряются в микросекундах, но внутри ПЛИС мы оперируем понятиями «точка» и «строка». Поэтому существуют таблицы либо калькуляторы, которые позволят нам узнать или вычислить эти дополнительные параметры именно в таких единицах измерения для каждого конкретного разрешения при конкретной частоте кадров.

Вот хорошая статья с картинкой, которая поясняет суть добавок к сигналу с привязкой к ПЛИС (но без того, что я описал выше): Учим iCEstick передавать видео-сигнал по VGA | Записки программиста (eax.me)

Оттуда есть ссылка на полезные таблицы martin.hinner.info/vga/timing.html

Уффф! Теперь становится понятно, что значат константы в найденном нами на просторах Интернета файле hvsync_generator.v. Сравните сами:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Кое-что не совпало, но находится в пределах погрешности.

Результаты работы онлайн-калькулятора, кстати, совпадают точнее:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Пара слов про файл hvsync_generator.v

Собственно, если мы уж заговорили про файл hvsync_generator.v, то с ним всё просто. Он формирует кадровый и строчный синхроимпульсы, согласно заданным параметрам. Чтобы изменить разрешение, надо эти параметры задать согласно требованиям, а также не забыть сменить частоту следования точек, о чём мы поговорим в следующем разделе. А вот так из базовых параметров рассчитываются рабочие:

Вот так формируются многократно используемые условия:

Ну, и просто работают счётчики строк и формирователи синхроимпульсов.

Обратите внимание, что отсюда импульсы выходят всегда в прямой полярности. Кажется, калькулятор допускает это дело:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Что у нас с тактовой частотой

В прошлый раз я уже упоминал, что нам предстоит разобраться с тактовой частотой. Только что из таблиц мы поняли, что нам необходима частота, близкая к 25 МГц. А в коде на Питоне я определял частоту вот так:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Вроде, я использую сущность clk. Но давайте не будем долго рассуждать, а посмотрим сгенерированный Верилоговский файл:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такоеТо же самое текстом.

Погодите, какой ещё sys_clk? Мы же просили просто clk… Потому что нам повезло, у нас на плате припаян генератор на 25 МГц. Но ещё есть шанс, что это какое-то хитрое именование… Ну-ка… Ищем, где этот сигнал формируется…

assign sys_clk = basesoc_crg_clkout0;

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такоеТо же самое текстом.

Последние сомнения развеяны! Перед нами самые что ни на есть 60 мегагерц. А нам надо 25! И они в системе есть, надо только правильно поправить Питоновский скрипт. Давайте я суну нос в описание генератора тактовых сигналов в уже хорошо нам знакомом файле Litex\litex-boards\litex_boards\targets\colorlight_5a_75x.py.

Дело ясное, что дело тёмное. Вот я вижу clk. Вроде как, это вход… Короче, кончаем пытаться разбираться по-сухому! Зря я что ли создавал проект в Visual Studio? Давайте попробуем трассернуть и посмотреть, где можно взять сигнал, не дожидаясь милости от природы! Идём в код, который написали в прошлый раз, и ставим точку останова здесь:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Запускаем проект на исполнение, и сначала, чтобы настроить глазомер, смотрим значение той переменной, которая заносится сейчас:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

А теперь я нахально ставлю курсор на поле cd_sys и начинаю ездить по всем полям этой переменной, пытаясь найти что-то, похожее на то, что я уже видел, но содержащее что-то, похожее на вход PLL. Не найдя ничего приличного, сдвинусь левее… И так, осматривая реальную систему, когда она уже запущена, постепенно нахожу параметр, очень похожий по значению. Давайте я даже сделаю анимированный gif.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

В общем, в переменной soc.crg.pll есть замечательное поле clkin_freq, равное 25000000 (это наши 25 мегагерц, заданные в герцах), а поле clkin похоже на описание ножки… Вот давайте и заменим строку:

Собираем, запускаем, проверяем – нам повезло! Мы угадали с первой попытки. Трассировка – великая вещь! А кто тянется ставить минус за «низкий технический уровень», приговаривая, что такое надо находить в справочниках – попробуйте, найдите и дайте ссылочку, а также путь, как нашли. А потом поговорим. Я долго искал. Трассировка же всё выявила за 5 минут. Поэтому и пропагандирую её использование.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такоеТо же самое текстом.

assign basesoc_crg_clkin = clk25;

Уффф. С этим разобрались! Да здравствует живая трассировка! Проверяем на мониторе? Давайте не будем торопиться. Подключимся сначала к логическому анализатору и проверим картинку там.

Выявляем проблему там, где не ждали

Итак. Собираем получившийся проект, загружаем его в плату, запускаем, смотрим на анализаторе. С виду — всё красиво. Видны кадровые синхроимпульсы, видны строчные синхроимпульсы, видны отображаемые точки:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Всё? Проверяем на мониторе? Не спешите! Измеряем частоту кадровых импульсов (на рисунке выше видна стрелочка между парой из них). Получаем примерно 120 Гц.

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Строчная частота тоже удвоенная. Ох, и посидел я с экспериментами. Ну разумеется, во всём была обвинена неверно установленная частота! Но не тут-то было! Верная она! 25 МГц честные приходят. Ларчик просто открывался. Файл gpu.v я нашёл в Интернете и, так как он простенький, доверял ему всецело. А зря. Вот как он выглядит:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такоеТо же самое текстом.

Классно, да? Обещаем 640 точек по горизонтали, а в модуль развёрток передаём всего 320. Вот он быстрее и работает! Потому что у автора кварц был на 12 МГц, вот он всё и пересчитал под такую частоту. Короче, удаляем все эти параметры, благо внутри модуля развёрток есть хорошо описанные! Остаётся:

Вот и верь после этого людям! Доверяй, но проверяй!

Уффф. Теперь можно экспериментировать с монитором. Как мы будем к нему подключаться?

Добавляем VGA разъём к плате

Единственно, что у нашей платы выходы пятивольтовые, так что резисторы в их схеме надо заменить на 470 Ом. А так – я скопирую схему включения оттуда:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Но самое ценное там – конструктив. Вот как это сделано на той странице:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Это же гениально! А этот разъём нужно подключить Ардуиновскими проводочками к нашей макетке. Красный и синий провода – заземлить (благо земляных ножек у нас много), а зелёный и синхросигналы – подать на контакты, которые мы недавно назначили. Кстати, обратите внимание, как неудобно их искать! Вот наш список использованных gpio линий:

Сначала надо посмотреть, к каким контактам разъёма они подключены:

Затем – каким цепям соответствуют:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такоеТо же самое текстом.

На самом деле, язык Питон позволяет всё это оформить более наглядно. Так что если будем развивать тему, то в следующей статье мы как раз наведём красоту. Пока же – пользуемся тем, что найдено в минималистичных примерах.

С моими кривыми руками получилась вот такая штука:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Подключаем плату к монитору, заливаем в неё «прошивку» и видим такую красоту:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Начинаем эксперименты

Наконец-то мы подготовили всю инфраструктуру для основной части эксперимента. Мы же всего-навсего собирались записывать что-то в порты Verilog модуля, пользуясь механизмом CSR. Приступаем!

До сих пор мы работали с каталогом PyTest2\build\colorlight_5a_75b\gateware. Теперь перейдём в PyTest2\build\colorlight_5a_75b\software. Там нас интересует файл с говорящим именем

В текущей нашей реализации информации там самый минимум. Смотрим:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такоеТо же самое текстом.

Итак, нами было создано четыре регистра, в каждом из которых используется по 16 бит, а 16 бит – зарезервированы. Можно ли объединять данные в одном регистре, а если да, то как – тема для отдельной статьи. Также в отдельной статье можно рассмотреть, как сделать код на Питоне самодокументирующимся. Чтобы из него автоматически вставлялись бы подробности в этот заголовочный файл. Пока – просто запомнили регистры. Да на самом деле одного регистра хватит, X1. У него смещение +4. А относительно чего смещение? Это нам подскажет содержимое файла mem.h:

Как замечательно! Базовый адрес CSR равен нулю.

Напомню, в прошлой статье я указывал опции сборки системы:

Для доступа к шине через сеть, нам нужна утилита wishbone-tool. Готовую сборку под свою ОС можно скачать здесь:

Распаковываем и пишем по адресу шины 4 значение 600 при помощи команды:

Это я параметр X2 сделал равным шестистам (при разрешении экрана 640х480). Прямоугольник стал таким:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

И, собственно, всё. Мы убедились, что всё проецируется на шину, а мы имеем возможность управлять значениями через регистр команд…

Упрощаем себе жизнь

Как-то даже обидно, так много готовились и так мало экспериментировали. Давайте, что ли проведём один маленький эксперимент по упрощению себе жизни.

В файловой системе, на уровне скрипта, который мы делали в прошлой статье, добавляем каталог scripts

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

А в сам наш многострадальный Питоновский скрипт вставляем буквально одну строчку. Я покажу её вместе с теми, между которыми она помещена:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такоеТо же самое текстом.

Прогоняем скрипт, и в каталоге Scripts возникает новый файл csr.csv. Вот его начало:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

Теперь нам не надо ни смотреть никакие заголовки, ни даже скачивать wishbone-tool. Поместим в каталог scripts файл moverect.py со следующим содержимым:

Теперь в отдельном терминале идём в каталог Litex\litex\litex\tools… Вот его содержимое для справки:

pll что это такое. Смотреть фото pll что это такое. Смотреть картинку pll что это такое. Картинка про pll что это такое. Фото pll что это такое

И там запускаем отладочный сервер строкой:

Оставляем этот терминал. Он будет обеспечивать нам сервер, дающий сетевой доступ к шине Wishbone из любых Питоновских скриптов. Не спрашивайте, зачем так сложно. Я не реализую эту систему, а учу, как пользоваться готовой.

Теперь в основном терминале можно запустить и только что написанный скрипт. Он будет работать через этот сервер. Итак, пишем:

python moverect.py localhost

И гипнотизируем экран, по которому слева направо ездит квадрат. В этом опыте мы не смотрели никаких констант. Мы просто пользовались символическими именами, взятыми из файла csr.csv. Плюс к тому, мы не использовали никаких инструментов, не входящих в поставку Litex. Правда, сервер в отдельном окне нам запустить пришлось. Но этот сервер организован на Питоновском скрипте, входящем в основной комплект Litex.

Немного философии

Давным-давно, у меня БК-шка была подключена к ламповому чёрно-белому телевизору. Потом мне выдали ламповый цветной, с более устойчивым растром. И я сказал, что стало намного лучше. Потом я раздобыл монитор МС6105 с антибликовым кинескопом. И сказал, что стало намного лучше. Шло время. При смене ЭВМ МС6105 сменился на Samsung SyncMaster 3NE. И я сказал, что стало намного лучше, так как нет того пятидесятигерцового мерцания в глазах, даже когда я просто хочу заснуть. Потом была чреда других мониторов с кинескопами, каждый из которых создавал свои проблемы, которая завершилась покупкой первого ЖК монитора. И я сказал, что стало намного лучше. Никакого мерцания!

Дальше монитор сменился на новый, имеющий кабель DVI. И я бы даже не сказал, что стало намного лучше. Но когда через несколько месяцев пришлось поработать с VGA кабелем – я понял, что к хорошему быстро привыкаешь. В аналоговом кабеле немного гуляют вертикальные линии, в аналоговом кабеле «кипит» однотонное изображение. Это дико раздражает. Особенно когда привык к чёткой цифровой картинке.

Цифра – это цифра, аналог – это аналог. До цифровой революции ему не было замены. Сейчас – есть. Поэтому руку с VGA мы набили, а вот пользоваться этим – лично я не собираюсь. Мне нервное спокойствие дороже. Если цикл будет востребован – сделаем и HDMI выход, благо я упоминал макетку с ПЛИС Lattice, содержащую такой разъём. А VGA – это просто красивый пример, где можно быстро сделать аппаратуру и на простых, удобных сущностях освоить вывод в регистр команд.

Заключение

Мы испытали работу с регистрами команд при помощи утилиты wishbone-tool (по абсолютным адресам) и при помощи штатных средств из поставки Litex (для чего нам пришлось сделать символический файл csr.csv).

Финальный пример, разобранный в статье, можно посмотреть тут.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *