В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 20. ПЛИС в ЦАП. Quartus II + Altera USB Blaster

📆20 февраля 2018   ✒️AlexD   🔎19.709   💬12  

В тот момент, когда почти все типы ЦАП изготовлены и отслушаны, пощупаны и попробованы на вкус, возникает вопрос: «А что дальше-то?»
Статья подготовительная и теоретическая — первое знакомство со средой Quartus, ПЛИС (он же PLD) и их возможностями.
Проект ЦАПа только вскользь упоминается, его описание запланировано дальше.

С малых лет у меня была особенность — мне интересен процесс, а не результат. Поэтому все мои поделки либо раздаются, либо разбираются, либо глубоко модернизируются.
Естественно возникла шальная идея: а почему бы мне не попробовать ПЛИС?
Мир цапостроя не заканчивается на РСМ63 или AD1862, а новые форматы и поддерживающие их чипы уже доступны.
Это интересно. И не так уж сложно. Достаточно иметь нужный набор инструментов, который стал доступен практически каждому, и желание пробовать и экспериментировать.

Небольшое вступление: CPLD она же ПЛИС

ПЛИС, что расшифровывается как Программируемая Логическая Интегральная Схема, по буржуйски — CPLD, что означает Complex Programmable Logic Device, в цапостроении применяется уже давно. А в мире цифровых устройств еще раньше.
Один из моих самосборных компьютеров «Орион-128» имел в стартовом комплекте печатную плату и прошитую ПЛИС, без которой плата бы никогда не запустилась бы. А это было… Ох, уже и не вспомню.
Но давно.

ПЛИС бывают разные. Основные производители на данный момент — это Xilinx и Altera, ну может кто-то еще — не вдавался. Бывают они разной структуры, назначения, ёмкости. Всего не перечислить. Технологии-то уже более 20 лет… Не беда, лампы вон до сих пор в цене:)

Однако, приступим!

Когда я искал материал по ПЛИС, наткнулся на статью моего тёзки с ником Lexus. Называется она «Использование ПЛИС в DAC». За статью автору огромное спасибо! Возможно это единственный материал, где подробно разжёвано всё от начала и почти до конца. Всёе остальное, включая документацию от производителей, довольно тяжело осваивать «в лоб». Вот на базе этого материала я и расскажу о своём опыте работы с ПЛИС. Я конечно постараюсь покороче, ну, а вы готовьте помидоры и изучайте.

Для начала нужно определиться, для чего и как будем использовать этот самый ПЛИС. Задача конвертации RJ в I2S, описанная в вышеуказанной статье — это просто, и как то меня она минула за ненадобностью, а вот коммутация входов, деление частоты на костыле из 3 корпусов 74НС74, переключение генераторов — вот минимальная задача, ради которой стоит начать знакомство с этой технологией.
Поэтому за основу был взят готовый ЦАП на AK4137, описанный в моей предыдущей статье.

Следующий шаг — обеспечить себя необходимым окружением. Для этого качаем из сети рекомендованный Лексусом Quartus II 9.1 SP 2. Я для интереса скачал самый новый. Не знаю, на любителя. Например, в новой версии отсутствует поддержка устаревших версий ПЛИС (а именно — нужной нам ЕРМ3064), обилие наворотов и обязательная регистрация перед скачиванием (и так спам девать некуда) мне не понравились.

Далее покупаем программатор. Или собираем на коленке.
Мне оказалось проще купить: USB Blaster (Altera CPLD/FPGA programmer)
Можно сначала купить — потом качать Quartus, не важно. У меня например было время немного освоить этот Quartus, пока мой программатор пинали ногами на транзитных пунктах китайской почты.


Ну и естественно — сам ПЛИС. Как же без него? Для своего проекта выбираем EPM3064ATC44-10N. Это ПЛИС с питанием 3,3 В, на 64 логических ячейки, с возможностью программирования через JTAG, в корпусе TQFP44 (аккурат как у АК4399, паять несложно) и с грейдом 10. Половина этой странной инфы нам не нужна. Важно лишь питание и рабочая частота.
Для этой микросхемы она равна 150 МГц, что в принципе хватит за глаза и выше. Другие подробности есть в даташите, там же есть масса инфы, которую я еще не переварил, да и, как выяснилось, эта инфа избыточна для наших задач.


Задача в подробностях

Теперь более подробно расскажу о поставленной перед нами задаче.
Итак: простая схема взаимодействия блоков и модулей в среднестатистическом ЦАП показана на рисунке:

Художник из меня просто шедевральный, поэтому прокомментирую это чудо.
Самое интересное в красном квадрате в центре.
Сигнал со входов I2S или SPDIF/I2S в формате I2S через мультиплексор подается на вход ЦАП.
После мультиплексора выдергивается сигнал MCLK и идет на модуль CLOCK, в котором находится два генератора для сетки частот 44х и 48х и несколько буферных элементов.
Задача модуля — если ЦАП работает в режиме MASTER, поглядеть какая сетка частот используется и отдать ЦАП клок с нужного генератора, а также отдать этот клок источнику.
Если ЦАП в режиме SLAVE, то просто пропустить через себя тот клок, что пришел к нему от мультиплексора. Сигнал сетки просто игнорируется.
А еще выдать для измерения частоту LRCK для PCM или DSDCLK для DSD.
За всем этим бдительно следит контроллер.
Естественно все это мной уже реализованно на рассыпной логике.
Так вот задача в принципе проста — все функции красного квадрата возложить на ПЛИС, и адаптировать схему под работу с проверенным мной AK4137.

Как-то так вот:


Теперь можно ставить софт и готовить проект

Особенностей установки нет никаких, просто после установки нужно выбрать тип Quartus II для внешнего вида программы. Пути установки по умолчанию.
Далее заходим в меню File→New-Project-Wizard.
Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 20. ПЛИС в ЦАП. Quartus II + Altera USB Blaster

Далее идем по списку:

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

Отвечаем на странные вопросы.

Далее проходим без остановок.

Пока не подходим к самому интересному! Тут обязательно выбрать именно тот тип ПЛИС, с которым будем работать. Их там шибко много, но нужный найти можно.

Далее тоже ничего пока не нужно:

Ну и почти все.

Проверяем, если накосячили, еще можно уехать назад.
И вот оно. Маленькое наше счастье. Все создалось и загрузилось.


Но не спешите радоваться — нам нужна схема! Для этого идем далее в меню File→New.
Откроется это окно:

Это наша будущая схема.

Схемный редактор конечно не фонтан, особенно если привык к Splan, но работать можно.
Теперь нужно сохранить файл внутри нашего проекта.

С названием не мудрствую, чтоб не путаться.
Получится так:


Все готово. Теперь можно творить!

Для того чтобы сделать мелкую пакость поместить компонент в схему нужно два раза клацнуть на пустом поле редактора где сетка.

В составе набора готовых компонентов есть почти вся логика серии 74, а также масса виртуальных компонентов. Для обычного проекта этого хватает с головой, но если нужно что-то серьезнее, нужно качать дополнительные компоненты. Но помните, даже из имеющихся, не все компоненты смогут работать в составе выбранной серии ПЛИС.
Но об этом нам сообщит компилятор в процессе.

В поле «Name» набираем 74257. Это мультиплексор 2×4. Далее, обязательно нужно накидать входы и выходы. Для входа набираем input, для выхода — output.
По даташиту смотрим логику работы ног (например здесь для разрешения работы надо на OE (или GN) подать лог 0), и подключаем куда надо vcc или gnd. Все это также набирается в поле «Name».
Ну и рисуем соединения согласно выбранной схемы. Обязательно нужно дать уникальные имена входам и выходам, чтоб потом не запутаться. Я их назвал по имени сигнала с которым они работают.

Должно получиться примерно так:


Я сделал проще — я сначала нарисовал схему,

и по ней именовал ноги.
Так получилось более наглядно.

После этого нужно скомпилить проект. Для этого вверху в меню есть треугольный значок с названием «Start compilation».
Результат получается примерно такой:

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

После этого надо назначить ноги, точнее привязать ноги к конкретным пинам ПЛИС. Для этого лучше использовать рисунок платы:

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

Для привязке физических ног к виртуальным используется функция Pin Planner. Это самое шикарное во всем процессе. Не надо думать как и куда развести ноги на плате, просто накидал при разводке платы и назначил в процессе!
Pin Planner находится левее кнопки компилятора (чип с карандашом и символом пина).
Вот такое окошко:

Тут видно наш выбранный в начале проекта чип и его доступные для назначения ноги. Они обозначены кружочками.
Внизу список наших имеющихся виртуальных ног.
Просто берем node name из левой колонки и назначаем ему location. При этом назначенный пин станет темно красным на рисунке.
Вот так.

После привязки всех ног окончательная схема выглядит так:

Возле входов и выходов появились номера физических ног микросхемы.
Тут я поигрался немного с разными типами делителей. И отдельно вывел выход мониторинга шины DATA или DSDL. По ней стоит делитель с нереальным коэффициентом деления аж 262144 на пяти счетчиках 7493. Теперь у меня весело мигает светодиод при передаче данных. Оно конечно нафиг не нужно, но получилось наглядно.

Все, готово. Еще раз компилим проект. Если все хорошо — можно пробовать шить, или прошивать нашу плис. Естественно она должна быть припаяна в схему.

И на нее надо подать питание.

Подключить программатор.

Сам программатор можно поставить в систему заранее, драйвера есть в папке с программой %\altera\91sp2\quartus\drivers\usb-blaster, но питание его выходного буфера производится от платы с ПЛИС, поэтому без питания работать он не будет.

Теперь, когда все готово, идем в меню с программатором. Оно тоже вверху.
Вот такое окно:

Кнопкой Hardware Setup выбираем USB Blaster, тип загрузки — JTAG.
Внизу наш проект. Галочками отмечаем нужные опции.
Включаем питание ПЛИС и дрожащей рукой нажимаем Start…

Процесс идет очень быстро, я даже испугаться не успел. Если что-то прошилось, то внизу в логе будет такое:

Можно выдохнуть.
Девайс умный. Сам читает тип ПЛИС, так что другой проект просто не зашьется.
Также в случае перепутанных/не припаяных ногах программатора будет грязная ругань, что девайс не опознан или проблема программатора.

Но это не значит что все заработало как надо. Возможно потребуются коррективы схемы, изменение логики и повторная прошивка.
Производителем заявлено 100 циклов перезаписи ПЛИС, мой личный рекорд в этом проекте — 6!
А все потому, что я считал например, что у буфера с именем btri, что я использовал как логический аналог 74lvc1g125, вход разрешения работы OE имеет активное состояние лог 1, а оказалось, что это полный аналог 125 го буфера, и OE у него активно при лог 0.
Прошивать можно в любой момент, даже в процессе работы ЦАП. Ничего страшного не происходит.

Возможное количество прошивок больше 100, но производитель не гарантирует работоспособность ПЛИС при превышении этого порога. Реально можно шить больше и чаще, специалисты проверяли.
Но о сотне всегда помнишь и много раз подумаешь, прежде жать кнопку «Старт».

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

Настоящие разработчики делают еще одну «фишку» — формирование SPI для управления ЦАП с помощью ПЛИС.
Я, как неспециалист, конечно попытался реализовать подобное на макетной плате на базе EPM240, но получилось немного не так, как хотелось. Точнее получилось г*, и я сразу потерял интерес к этому процессу.

Но оно и понятно, тут уже нужно использовать не логические элементы, а описание логики работы на hardware description language (HDL). Он чем то напоминает старый добрый Basic, но моих знаний пока недостаточно для его освоения. К тому же формировать SPI управление на том же STM32/Arduino оказалось проще с точки зрения количества задействованных ног у контроллера и количества проводов в связке ЦАП-МК.
То есть выигрыш в формировании SPI в ПЛИС оказался лично для меня пока сомнительным удовольствием. Может потом и освою, а пока по старинке используем контроллер.


Ну, а если, к примеру, наш проект окажется большего размера, и не хватит нам ног или ёмкости ПЛИС, можно использовать что-нибудь из серии MAX-II, например EPM240T100C5.
Шаг ног там конечно поменьше, зато ног побольше и емкость уже 240 ячеек. Я их зачем-то заказал, но смог нагрузить только на 20%, поэтому, чтоб не валялись, пришлось применять. Вон она, слева от генераторов притаилась.


Итого

Как вы понимаете, применение ПЛИС не ограничивается ЦАП. Наоборот, эту технологию активно применяют там, где нужно сэкономить место и заменить десятки корпусов обычной логики на один корпус ПЛИС.
Любой конечный автомат, вроде блока управления вертушкой, механикой, или какие-нибудь электронные часы — это само простое, что пришло в голову.

Думаю, данный материал будет полезен многим.
Ну, а у меня на сегодня все.
Продолжение следует!

С уважением, Алексей.


Картина Дудикова «Утро над ЦАПом», 2017 год.
Холст, масло, сыр, чай с сахаром
lol

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

Читательское голосование

Нравится

Статью одобрил 71 читатель.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 1. pcm2704 + ad822... Когда очень хочется слушать музыку… Я беру в руки перфоратор! Собираем аудиоцап на pcm2704! Когда...
Схема на Датагоре. Новая статья Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 13. PCM63P-K, о грейде чипов ЦАП... На столе PCM63P-K. Заняться изготовлением данного утройства меня подтолкнуло любопытство. Когда я...
Схема на Датагоре. Новая статья Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 21, заключительная. АК4137+АК4490 на новой платформе. Итоги долгого пути... Привет, датагорцы! Вы уже собрали, сожгли, повторили один-в-один за автором или даташитом...
Схема на Датагоре. Новая статья Fast Stone Image Viewer - удобная бесплатная программа для просмотра и редактирования картинок... Друзья! Сегодня хочу представить вам FastStone Image Viewer - быстрый, стабильный, дружественный к...
Схема на Датагоре. Новая статья Самоучитель по радиоэлектронике. Николаенко М. Н.... Николаенко М. Н. Самоучитель по радиоэлектронике. — М.: НТ Пресс, 2006. — 224 с: ил. Вы держите в...
Схема на Датагоре. Новая статья Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 12. PCM63, AD1862... «Эй, Макфлай! – взвизгнул он. – Никуда не уходи! Ты – следующий!» PCM63 и AD1862. Они пришли одной...
Схема на Датагоре. Новая статья CDAID v.3.20 + русский мануал... © 2008 Игорь Котов, перевод, составление, иллюстрации. Возможности программыПрограмма CDAID...
Схема на Датагоре. Новая статья Кулинария lossless форматов... С тех пор, как стало возможным представить звук в цифровом виде, появилась возможность...
Схема на Датагоре. Новая статья Почему я люблю Texas Instruments?... Я люблю Texas Instruments потому, что это мощная корпорация, крупнейший в мире производитель...
Схема на Датагоре. Новая статья Как намотать трансформатор. А.Н. Подъяпольский... Как намотать трансформатор. А.Н. Подъяпольский. Типография Госэнергоиздата. Москва, 1953г. При...
Схема на Датагоре. Новая статья Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 9. WM8805, WM8740 — приручаем «волчат»... В предыдущей статье я рассказал о работе с цифровыми ресиверами, теперь пора перейти к другому...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

<
Читатель Датагора

Kobold

<
Читатель Датагора

AlexD

<
Читатель Датагора

Kobold

<
Читатель Датагора

Kobold

<
Читатель Датагора

AlexD

<
Читатель Датагора

Kobold

<
Читатель Датагора

rodent

<
Читатель Датагора

AlexD



<
Читатель Датагора

foxit

<
Читатель Датагора

Serg_hax

<
Читатель Датагора

AlexD

<
Читатель Датагора

Dormidont

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой