Налагоджувальна плата ПЛІС — Франкенштейн. Годинник. Altera EPM7064 VS Lattice LC4064v

Продовження передноворічної серії пригод маленької ПЛІС Altera EPM7064 на налагоджувальної платі — Франкенштейн. попередній серії...
Настала пора порівняти дві ПЛІС з однієї вагової категорії: Altera EPM7064, Lattice LC4064v. Хоча, один у них — тільки вага — це 64 макроячейки. В іншому, судячи з параметрами, у цих ПЛІС зовсім різні призначення. ПЛІС від Altera, судячи з документації 2005 року, є просто не молодий, від цього і володіє низьким кількістю осередків. Так само, володіє популярним по тим часам напругою живлення 5 вольт. Максимальна робоча частота не перевищує 200 МГц. У той же час Lattice може працювати до частот 400 МГц, але при цьому, живиться від напруги — 3.3 вольта. Так, це не так зручно, як 5 вольт, якщо ми хочемо взаємодіяти зі старими схемами (проте, заявлена толерантність до 5В). В документації на Lattice цієї серії зазначено 2014 рік, тому я припускаю, що це сучасні високошвидкісні ПЛІС, але малого обсягу, і судячи з "SuperFAST CPLD" в описі, позиціонуються вони трохи інакше.

Як нам їх порівняти? Спробуємо вирішити на них одну і ту ж задачу. Годинник на Lattice LC4064v ми вже спробували зробити і у нас вийшло. Тепер спробуємо зробити годинник на Altera EPM7064 — на нашому Франкенштейна.

Індикатор
Плата у нас вже готова, тому нам потрібно додати до неї індикатор. Природно, динамічний. Для чистоти експерименту, звичайно, потрібно було б застосувати той же самий індикатор, що і на Lattice (або ідентичний). Але такого ж у мене немає, а знімати деталі з робочих пристроїв, я вважаю поганою звичкою. Тому я взяв інший, підходить для виготовлення годин індикатор, який мені недавно подарували.
Виглядає він зовсім, як цей, однак має іншу терморегулятори.
image
Знайти її мені не вдалося. Описувати її не бачу сенсу, оскільки таких екранів багато і вони можуть бути різними. За допомогою тестера можна легко встановити призначення висновків. А з допомогою макетної плати і своєї улюбленої технології монтажу накруткою, я впорядкував послідовність виводів індикатора (1-2-3-4, A-B-C-D-E-F-G).
В годинах на Lattice я використовував транзистори, для розвантаження ліній, які обирають групи. Тут же я вирішив нічого цього не робити, а підключити світлодіоди безпосередньо до висновків ПЛІС, навіть не використовуючи токоограничивающих резисторів (взагалі так робити не правильно). Логіка приблизно, як на цьому малюнку:

У підсумку, тестова конфігурація відобразила цифри 1-2-3-4. Світлодіоди досить яскраві. ПЛІС майже не гріється. Сподіваюся, Френкі доживе до світлих днів і не вийде з ладу від такого навантаження. А щоб знизити цю ймовірність, зменшимо період, протягом якого індикатори будуть включені, тим самим, знизивши і яскравість індикатора.
У цілому, код увесь той же самий, крім логіки виведення на екран.
головний модуль
module epm7064_clock(clk, dig_sel, segs, btn_HH, btn_MM, btn_SS, btn_SAFE, led_second_tick);
...
output wire [3:0] dig_sel; // вибір номера цифри
output wire [6:0] segs; // номери сегментів
...
//номери цифр чергуються, для цього візьмемо кілька біт лічильника-дільника тактової частоти
//конкретні номери біт вибираються з розрахунку отриманої частоти
//молодші біти рівні нулю я вибрав для того, щоб світлодіоди працювали тільки 1/4 часу.
//цифри вибираються по черзі 0001 -> 0010 -> 0100 -> 1000 
wire [3:0] top_bits = clk_div[6:3]; //
wire [4:0] t_dig_sel = (top_bits == 4'b0000 && h_show &&(!SAFE_MODE)) ? 4'b0001 :
(top_bits == 4'b0100 &&(!SAFE_MODE)) ? 4'b0010 :
(top_bits == 4'b1000 &&(!SAFE_MODE)) ? 4'b0100 :
(top_bits == 4'b1100 &&(!SAFE_MODE)) ? 4'b1000 : 4'b0000;

//значення семисегментних індикаторів відповідного розряду
//вибираються в залежності від номера цифри, яка зараз виводиться
...
bcd2seg0_2 sseg_1( .sin(x), .sout(s_m1));
bcd2seg0_9 sseg_2( .sin(h), .sout(s_m2));
bcd2seg0_5 sseg_3( .sin(mm), .sout(s_m3));
bcd2seg0_9 sseg_4( .sin(m), .sout(s_m4));

wire [6:0] t_segs = (top_bits == 4'b0000) ? ~s_m1 :
(top_bits == 4'b0100) ? ~s_m2 :
(top_bits == 4'b1000) ? ~s_m3 :
(top_bits == 4'b1100) ? ~s_m4 : 7'b0000000;
...
//інший код не відрізняється


Проект https://github.com/UA3MQJ/epm7064_clock
Важливе зауваження: для складання проекту під EPM7064 потрібна більш стара версія Quartus, в якому ще збереглася підтримка цих мікросхем. Я використовував Quartus II v 9.0.

Тактовий генератор
В годинах на Lattice я намагався запустити генератор на логічних елементах самої ПЛІС. В цей раз я теж спробував запустити генератор, тільки вже на Altera. В мережі є згадки про те, що генератори успішно запускалися на max і навіть на cyclone. Але мені запустити генератор на 32768 так і не вдалося. Може це кварц невдалий попався, або я його в процесі експериментів попсував, або параметри не ті. Пробував як схему з одним інвертором, так і з двома. Інвертори брав як буфером, так і без. Загалом, цілий вихідний був витрачений даремно, запустити генератор не вдалося.
Взагалі вважається, що такі генератори — це погана ідея. Готові генератори стабільніше, розробка швидше. З іншого боку, ті, хто зумів все правильно розрахувати і стабільно запустити генератор на ПЛІС, користуються таким рішенням.
А поки, я не зміг запустити генератор, я почекаю, може це зуміє зробити мій товариш. А я поки замовлю 32.768 KHz OSC Active Crystal Oscillator.

Схема з [1] чомусь теж не запрацювала. Вірніше, генерація там була, але амплітуда була мала, і стабільності форми сигналу було недостатньо, щоб з нею зміг синхронізуватися мій осцилограф. Можливо, все-таки, проблема з конкретним кварцом.

Для перевірки, можна використовувати генератор годин на Lattice, що ми і зробимо

Висновки
Всередині ПЛІС від Altera ми реалізували ту ж саму логіку, за винятком виведення на світлодіодний екран (т. к. він іншого типу). Цікаво зауважити, що витрачені ресурси ПЛІС Altera склали 61 клітинку, в той час, як у Lattice було витрачено 59. Я думаю, що причина саме в різних екранах. У Lattice для управління екраном використовується 16 ліній, а для екрану на Altera потрібно 11 ліній. Можливо, на меншу кількість ліній вийшло складніше дешифрувати. Так що можна вважати, що синтезатори і апаратні можливості у них рівні. Вихідний струм Altera трохи вище, і інший тип екрана, тому вдалося обійтися без додаткових транзисторів, і світлодіодний індикатор підключився і заробив взагалі на пряму.
Струм споживання Altera EPM7064 склав в середньому 100 мА 66 мА safe_mode (без урахування струму генератора 32768 Гц), в той час, як Lattice споживає 125 мА при 3.3 вольтах. Споживання приблизно одного порядку. В цілому, живлення від 5 вольт більш зручне. Однак у цьому проекті це тільки питання стабілізатора напруги, т. к. взаємодії з іншими мікросхемами п'яти-вольтової логіки немає. Тому і переваги перед 3.3 харчуванням теж немає.
Генератор на 32768 зібрати не вдалося ні на Lattice ні на Altera. Переконаний, що генератор можна спорудити, в даному проекті такий апаратний хак був би вельми ефектний, але не вийшло.
І ми не будемо затримуватися, тому що хочемо побачити Френкі в інших проектах!
Список використаних джерел
  1. СЕМИСЕГМЕНТНИЙ ІНДИКАТОР. ОРГАНІЗАЦІЯ ДИНАМІЧНОЇ ІНДИКАЦІЇ
  2. Калейдоскоп схем кварцових НЧ генераторів
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.