FPGA chips

Изучаем САПР Altera Quartus II / Intel Quartus Prime, язык описания аппаратуры Verilog HDL и кое-что про VHDL. Программируем FPGA Altera / Intel Cyclone III, Cyclone IV, MAX II, MAX10. Экспериментируем с платами разработчика  FPGA серии Марсоход, Марсоход2, Марсоход3. А еще разбираемся с FPGA Gowin.


исследование колебательного контура
Вот такая задача – изучение колебательного контура, построенного из конденсатора и катушки. Я подумал, что раз у нас на плате Марсоход2 стоит аналогово-цифровой преобразователь (АЦП), то измеряя с его помощью напряжение на конденсаторе контура можно увидеть собственно колебания.

В этом проекте плата Марсоход2 используется просто как инструмент, как «цифровой осцилограф».

Кажется, что задача на самом деле простая.
Первоначальный план был простой, вот такой, как на этом рисунке «Вариант 1».

В цепи колебательного контура установим кнопочку. В начале она разомкнута и через резисторы делителя конденсатор заряжается до напряжения питания. Потом нажимаю кнопочку, цепь контура замыкается и конденсатор начинает разряжаться через катушку.
Ток через катушку в начальный момент времени, когда кнопочка замыкает цепь, равен нулю, но потом растет и становится максимальным, когда конденсатор уже разряжен до нуля. Несмотря на то, что конденсатор разрядился, ток продолжает течь через катушку из-за явления самоиндукции. При этом конденсатор перезаряжается до отрицательного напряжения –VCC. Потом ток через катушку останавлявается и начинает течь в обратном направлении. Из-за потерь энергии в контуре колебания постепенно будут затухать.

Сопротивление резисторов делителя выбраны довольно большими – 15кОм, так чтобы потери в них были минимальными. Для чего вообще нужен делитель? Напряжение на конденсаторе меняется от +VCC до –VCC. Делитель «преобразует» этот диапазон, на АЦП уже поступает от +VCC до нуля. АЦП (это микросхема ADC1175) выдает 8-ми разрядный двоичный код с частотой ADC_CLK – этот сигнал мы будем генерировать в ПЛИС. Сами выборки с АЦП собираем в буффер SignalTap – инструмент для изучения сигналов внутри ПЛИС.

Несмотря на такой прекрасный план, он не работает.. Причина в том, что нам не удалось найти кнопочку, которая мгновенно и надежно замыкает контакты контура. Это явление называется «дребезг контактов».

Пришлось изменять схему эксперимента..

Программатор MBFTDI в среде Altera Quartus II

Выпустили новую версию драйвера программатора MBFTDI к среде Altera Quartus II.
Номер версии 1.4b.

Скачать можно здесь

Если у Вас программатор и так работает, обновлять особенно нет необходимости. Тем не менее:

1) Исправлены баги работы программатора с Quartus II v12.1 в 64-х битной WIndows 7.

2) Изменено название драйвера (чтобы облегчить определение его типа). Теперь название DLL включает в себя собственно тип используемой платформы. В архиве есть два файла jtag_hw_mbftdi_blaster32.dll и jtag_hw_mbftdi_blaster64.dll - сразу понятно какая DLL для какой OS, 32-х или 64-х разрядной. Просто скопируйте jtag_hw_mbftdi_blaster32.dll в папку c:\altera\12.1\quartus\bin, а файл jtag_hw_mbftdi_blaster64.dll в папку c:\altera\12.1\quartus\bin64. Если ранее в этих папках уже был помещен jtag_hw_mbftdi_blaster.dll - удалите его. У меня квартус установлен в c:\altera\12.1\, но у вас может быть другая папка. Тип используемой DLL теперь виден в имени программатора в среде Altera Quartus II.

 

linux pinguin
Итак, Линукс на плате Марсоход2 успешно стартует и монтирует RAM Disk и запускает пользовательскую программу sbin/init с RAM диска.

Честно говоря не думал, что это будет так трудно. Потратил все новогодние праздники. Самое главное не очень понятно почему это так происходит. Оригинальные инструкции проекта Amber с сайта OpenCores то ли не совсем корректные, то ли каким-то образом устарели. Если следовать им, то не получается откомпилировать ядро, возникает масса проблем при компиляции и конфигурировании ядра. Проходилось много дебажить. Последняя проблема, которую я встретил – неправильно выполнялся mmap исполняемого пользовательского файла. В конце концов похоже все работает.

Теперь все позади.
Я слелал коммиты на нашей странице GitHub посвященной Amber и линуксу на плате Марсоход2. Теперь, я надеюсь, Вы сможете без проблем сами откомпилировать ядро и запустить его.

Я уже не раз замечал, что к концу года что-то странное происходит со временем. Оно ускоряется так, что в последние дни перед Новым Годом уже плохо представляешь себе, успеешь ли закончить все начатые или запланированные дела. Мне почему-то всегда кажется, что чего-то не успел, что-то не сделал, не завершил.

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

Особая часть подготовки к празднику – новогодние костюмы. Конечно, нужен костюм Деда Мороза. А еще Деду Морозу нужен волшебный посох. Желательно иметь очень волшебный посох – такой, чтобы удивить детей. Вот его изготовлением и займемся. 

Нам понадобятся:

Что нужно для изготовления волшебного посоха Деда Мороза

1) плата Марсоход
2) синие светодиоды
3) кусок пластиковой водопроводной трубы
4) пластиковый шар от новогодней игрушки

Linux debug

В предыдущей статье я писал, что смог откомпилировать ядро линукс, но при запуске в плате Марсоход2 он как-то странно виснет.

Пришло время разобраться с этим. Проблема похоже серьезная. Даже не понятно с какой стороны подступиться. Ведь причина подвисания может быть где угодно:

  1. Может быть аппаратная проблема? Работает ли процессор или в некоторых случаях сбоит? Работает ли правильно контроллер памяти SDRAM?
  2. Может быть проблема в компиляторе? Ведь похоже, что я использую одну из последних версий компилятора, не такую, какая была в оригинале у автора проекта Amber.
  3. Может я все же не правильно сконфигурировал ядро? Или есть ошибки в каких-то драйверах?

Какие вообще есть способы разбираться со всем этим?