Схема > плата > ПЛІС

На Хабре є статті для початківців ПЛИСоводов, є статті з оглядами коштів трасування друкованих плат. На деякі з них я вже посилався у своїй першій статті про створення друкованих плат. У другій статті про SimBank в коментарях у мене відбувся діалог про складність розробки ПЛІС та підтримки проектів з нею. Було висловлено думку, що легше зібрати кілька простих пристроїв замість одного складного. Іноді так дійсно простіше. Коли мова йде про двох, чотирьох, восьми пристроях. Ряд можна продовжувати з звичної вам кратністю. До подолання порогу комфорту. Два — це купа? А що робити, якщо є бажаючі на 100 або 200 однотипних пристроїв?
Використовувати або не використовувати ПЛІС в тій чи іншій задачі кожен вирішує сам (або з колегами).
Сьогодні хочу запропонувати вашій увазі статтю про особливості створення друкованої плати з ПЛІС. За основу візьмемо інструмент «IO Designer» від компанії Mentor Graphics. Комусь матеріал може виявитися корисним, комусь просто цікавим, а хтось може і не погодитися зі мною.

Для деяких САПР, наприклад Altium Designer, періодично виходять оновлення з базами нових мікросхем. (Якщо ви є передплатником на оновлення). Для Cadence і OrCAD часто виробники компонентів викладають бібліотечні елементи схемних символів і комірок для друкованих плат. Для ExpeditionPCB від Mentor Graphics така розкіш швидше виняток, ніж правило. Про PADS (ще один продукт для наскрізного проектування друкованих плат від Mentor Graphics) не скажу, мені не доводилося з ним працювати. У самій системі проектування дуже зручний менеджер бібліотечних компонентів. Для побудови посадочних місць компонентів для друкованих плат у відповідності з вимогами стандарту IPC-7351 є дуже вдала програма «LP Wizzard». (Land pattern wizzard). Для створення графічних схемних символів простих і не дуже компонентів є можливість імпортувати з файлу. А для ПЛІС існує «IO Designer», який об'єднує в собі символічне, схемну, платну (друкованої плати) і Verilog(VHDL) частини проекту.
IO Designer містить базу знань про більшості FPGA і CPLD таких виробників ПЛІС як Xilinx, Altera, Lattice і Acctel. Разом з виходом нових сімейств у виробників ПЛІС MG випускає оновлення до баз ПЛІС. Але нову документацію на мікросхем сімейства все одно доведеться вивчати.
Припустимо ми вибрали ПЛІС, вивчили (ознайомилися) її особливості і готові творити.
При створенні проекту ми можемо обрати виробника ПЛІС, сімейство ПЛІС, тип корпусу, і кількість елементів. А так само вказати швидкість компонентів (для точного Part Number).

У ПЛІС більшість контактів можуть конфігуруватися, як на вихід, так і на вхід. На перший погляд подсоединяй — не хочу. Сюди ми виведемо контролер SD карт, сюди RGMII для Ethernet PHY і т. д. Не тут-то було. При такому сміливому обході контактів по зручності ми можемо наткнуться на масу підводних каменів. Читання документації дозволить більшість з них уникнути, але легше призначати контакти від цього не стане. І проект плати може перетвориться на суцільну кашу.

На даному зображенні все не так вже й погано, тому що воно створене «штучно» на основі опрацьованого проекту. Звичайно з першого разу все не так гладко. І на етапі додавання ПЛІС ще не всі елементи розставлені на платі. Але спеціально зазначено, що сигнали з лівого нижнього роз'єму приходять не на самий нижній кут ПЛІС. В результаті вони перетинаються з іншими сигналами і при трасуванні можуть вимагати як додаткових перехідних отворів, так і додаткових шарів плати. Що в результаті збільшить вартість виробництва.

Можливості налаштування контактів також бувають дуже обмежені. Добре якщо у нас плата створюється під один конкретний виріб. Є висновки суміжних елементів, створюємо для них відповідні шини/сигнали в ПЛІС. Запустили пробний проект в САПР для ПЛІС. Якщо все вдалося, то можна віддавати на трасування.

В якості відступу: ЕМНІП на Xilinx Spartan-6 були спеціально призначені висновки пам'ять DDR які потім зручно трассировались при правильному взаємне розміщення мікросхем на платі. І не було необхідності їх потім переміщати, міняти місцями.

Часто за ТЗ необхідно завести якусь універсальність і наша плата в подальшому буде використовуватися для декількох проектів. У нас так проектується центральна плата з процесором для роботи з багатьма іншими пристроями, своєрідна налагоджувальна плата з ПЛІС, процесором і ОС «для своїх». І тут потрібно багато чого передбачити.Залишити, якщо потрібен на роз'ємі один контакт для подачі синхронізації, або для виведення сигналу з PLL. Визначитися з напрямками сигналів на шині: вхід, вихід, двонаправлені. Якщо у нас центральна плата завжди майстер, то такі сигнали на шині адреси або керуючі можна зробити тільки на вихід.
Якщо у нас на шині є відповідь від веденої плати типу WAIT або BUSY, то на майстер платі можна їх можна призначити на висновки здатні бути тільки входами. Також можна поступити з висновками визначальними присутність плати.
Таке призначення, на перший погляд, обмежує можливості для подальшого трасування і перетасовки сигналів. Але як показує практика, краще такі обмеження знати заздалегідь. А не просто призначати всім сигналами «Inout».

Ми можемо вибрати файл звідки черпати список сигналів. Це може бути пробний проект, файл на Verilog або VHDL.

Якщо пробний проект ще не робився, то ми можемо не ставити такий файл. А потім просто створити сигнали у вікні програми. Типи сигналів за замовчуванням. Для одиночних сигналів і для диференціальних.
Далі ми можемо призначити місце куди ми потім будемо викладати файл з нашим розміщенням контактів.
Потім потрібно визначитися, як ми хочемо працювати зі схемою, чи нам потрібні повноцінні символи чи достатньо лише створення ланцюгів в схемному проекті, а описи всіх контактів у нас будуть передаватися тільки у вигляді обмінного фала з САПР ПЛІС.
Мені завжди подобався варіант коли не потрібно створювати схемних елементів, а всі обміни йдуть через внутрішні невідомі шляхи. Але, працюючи в колективі, доводиться приймати більш приземлені правила гри. Так, відповідно до корпоративного стандарту оформлення схем мені завжди потрібно було ділити символ по банкам, виносити окремо ланцюга конфігурації, землі, харчування та інші. Є в такому поділі плюси, але є і мінуси. Схемний символ доводилося робити мені. Для ПЛІС з 484 контактами не так складно правильно зробити схемний символ, як може комусь здатися. А ось для мікросхеми з 1172 контактами це заняття досить утомливо. Більшість назв контактів має довгі і схожі імена і в них легко заплутатися. Можна генерувати всі символи автоматом. Але тоді вони не збігаються з «корпоративними» уподобаннями. У IOD легко можна створити символ по базі даних елементів просто перетягуючи мишкою з вікна списку контактів у вікно символу. Не скажу, що це також просто як грати в «Веселу ферму», але на цьому етапі ми просто можемо мишкою призначати сигнали контактів мікросхеми. При цьому, можна вказати як позначати за назвою, функціональним призначенням, за номером контакту або по-своєму. Я зазвичай вибираю відображення за функціональним призначенням. Так як на мій погляд така назва більш інформативно і тоді на схемі видно, що за сигнал сюди можна завести.

Із спостережень можу відзначити, що останні назви у Xilinx (для сімейств 6 і 7 серії) виходять досить лагідними та інформативними.
IO_L6N_T0_VREF_13
IO — контакт вводу-виводу
L6N — позначення диференціальної пари
T0 — позначення байта всередині якого можна виробляти свапо сигналів даних для пам'яті (цей момент потрібно уточнити!)
VREF — сюди можна подавати зовнішнє опорне напруга, якщо цього вимагає стандарт обраного сигналу для банку і немає можливості підключити його всередині ПЛІС.
13 — номер банку.

У Altera теж іноді трапляються нормальні функціональні позначення, але частіше (моя суб'єктивна думка) трудновоспроизводимые назви контактів, які потім не поміщаються на лист зі схемою. Можливо, якби я робив схеми з великими обсягами пам'яті, множниками або які-небудь колайдери, то мені б знадобилося таку назву.
IO_DIFFIO_T18p__DATA15_DQ3T0_X9__dq3t9_x18_dq5t27_x36
У цьому випадку виручає можливість вказати Custom Label для імені контакту. І вписати руками потрібну назву. Зазвичай я копіюю функціональне призначення і скорочую його до виду
IO_T18p_DATA15_DQ
В даному випадку
IO — може використовуватися для сигналів вводу-виводу
T18p — це номер диференціальної пари у верхньому сегменті
DATA15 — цей контакт може бути використаний для паралельної завантаження конфігурації
DQ — мені говорить, що це скорочення від функціонального призначення контакту (ще можуть бути DM та DQS)
Це один із прикладів, як можна назвати контакт на основі його функціональності і для якого-небудь конкретного проекту, на перше місце буде виведений якийсь інший ознака.
Так, наприклад, у Altera при використанні LVDS сигналів потрібно використовувати зовнішню навантаження. Для одних банків це навантажувальний резистор тільки на приймальній стороні, а для інших — необхідний ще й на виході. Це можна зазначити на схемному символі властивості Custom Label. Теж стосується сигналів PCI типу. Не для всіх банків можна призначити стандарт шини 3.3 V-PCI. І це теж можна зазначити на символі. Незважаючи на все більшу витіснення його стандартом PCIe в десктопних системах, в індустріальному виконання він все ще популярний. І деякі замовники шукають пристрою саме в такому виконанні.
Можна в символі додати напис, для всіх контактів відразу. Це зменшить кількість тексту всередині символу. Так як будь-яка додаткова інформація буде перевантажувати символ і схему, тут потрібен компроміс. Я таке робив для мікросхем Xilinx, у яких є мікросхеми сумісні з контактів всередині одного корпусу з різною кількістю логічних елементів, але в «дрібних» мікросхемах частина контактів не задіяна. Тоді в проекті частина схеми не запаивалась і можна було ставити більш «легку» мікросхему. Враховуючи це при роздачі контактів, потім можна заощадити і на відсутніх компонентах і на ціні ПЛІС.
Для зручності я роблю символи з поділом на банки. Виняток можна зробити для контактів конфігурації. Якщо проект має складну структуру синхронізації, то в окремий символ можна зібрати входи CLK — локальні, глобальні та інші. Контакти харчування VCCO банків поміщаються на символі разом з банком або на окремому — за бажанням ГОЛОВНОГО розробника.
Контакти живлення ядра, VCCAUX, землі і іншого, частіше усього, виношу на окремі символи.
Нібито зараз можна для всіх контактів живлення створити тільки ланцюг на схемі і не захаращувати великою кількістю однотипних контактів схему. У нас так робити не прийнято, тому я з такими опціями близько не знайомий. Про це можна ознайомитися в довідковій документації або вебінарів та навчальних матеріалів в мережі на сайті Mentor Graphics і його представників.

Створені символи передаю прямо в проект схеми, вказую тип корпусу, виробляю анотацію в плату і мікросхема прив'язана до плати, схеми і IODesigner'у.

Створення і привласнення сигналів
Як було описано вище, ми можемо сигнали експортувати з файлу або створити самі.

Присвоювати сигнали можна як мишкою, так і через імпорт/експорт. Затискаючи клавіші SHIFT, CTRL або ALT можна пере-присвоїти сигнали на вже призначені контакти. Або призначити всі вибрані сигнали в один банк. Візуально банки відображаються різними кольорами. Контакти різного типу відображаються різними значками. Можна включити відображення диференціальних пар. З часом зайняті сигнали будуть зафарбовані.

Оновлюємо схему і бачимо на схемі символи вже з сигналами.

Дивимося як вони приєдналися на платі. Зазвичай це вже показана вище «каша».
Іноді я відразу роблю просто список сигналів, щоб вони автоматом створилися в системі, потім їх в схемному редакторі перетягую інших елементів.
Є варіант імпорту списку сигналів схеми.
Синхронізувавши проект схеми, плати і IO Designer ми можемо викликати відображення сигналів у вікні IO Designer. З йдуть ланцюгами від ПЛІС до приєднаним до неї компонентів.
Тепер ми можемо розчесати наші сигнали. Причому все це буде зроблено автоматично у відповідності з введеними нами правилами. Конфігураційні сигнали нікуди не подінуться. Також ми можемо попередньо зафіксувати сигнали для запобігання зміни їх розташування.

Зверніть увагу, що сигнал DRAM3_RESET_B, яким повинен бути присвоєно стандарт введення/виводу LVCMOS_1.35V і він не може знаходиться в одному банку з сигналами SSTL стандарту, призначений в банк 17, а всі інші сигнали DRAM3* в банк 12. Так як в системі всього чотири сигналу з LVCMOS_1.35V, то їм призначено стандарт LVCMOS1.8V і поставлений перетворювач рівня.

Незважаючи на гадану заплутаність сигналів, вони зараз розправлені у відповідності з правилами. Для зручності роботи з проектом Quartus.
На зображенні видно розставлені компоненти, і тягнуться до них лінії від ПЛІС. Іноді якщо не всі компоненти розставлені не виходить з першого разу розкласти всі контакти для безпроблемної трасування. Хоча все залежить від завдання.
Після такого розподілу контактів вже можна віддавати схему на остаточну трасування або трасувати самому.
Також можна зробити експорт в Verilog / VHDL файл. Можемо зробити експорт *.ucf, *.pin або інший файл. Віддати його проектувальнику ПЛІС для проведення пробного проекту, раптом чогось не врахували. Але в маленькому колективі не завжди виходить відразу таке провести через велику завантаженість іншими проектами. (Старі доопрацювання, нові побажання замовників або паралельні проекти).
Обмеження.
Є у даного методу обмеження, які я не завжди знаю як обійти. Але в основному вони пов'язані з необхідністю робити багато чого для універсальності і про запас. Доводиться винаходити милиці та інше. Так у Altera за замовчуванням не можна розташовувати диференціальний сигнал поруч з диференціальним. Компілятор видасть попередження. Ми можемо його обійти встановивши у Pin Planner Quartus параметр SLEW_RATE = 0 MHz. Після чого компіляція успішно завершиться. Навіть якщо насправді у нас сигнал буде бовтатися з частотою 20 МГц. У IODesigner такого параметра немає. У підсумку на схемі ці контакти задію останніми або встановлюю їм такий тип сигналу, щоб це не викликало конфлікту, наприклад PCB сигнал або конфігураційний.
Є й інші обмеження, які зазвичай обходяться. Але в цілому, я до них ставлюся позитивно, так як вони змушують ще раз заглянути в документації на мікросхему набагато раніше ніж, приїде готова плата.
Для тих, хто працює в інших системах проектування деякі речі можуть здатися очевидними і можливо не потрібними. Так, наскільки я знаю (чув), Altium дозволяє налаштовувати компіляцію проекту для ПЛІС прямо в проекті зі схемою і платою. Я не в курсі всіх його можливостей. І для людей, які проектують у ньому не потрібен імпорт в Quartus або ISE. Але у нас проект друкованої плати робить одна людина, проекти для ПЛІС інші люди. Я віддаючи схему на трасування намагаюся якомога правильніше описати сигнали, при цьому надаю проектувальнику друкованої плати, певну свободу дій на зміну контактів. Будь-які попередження, які виникають ми погоджуємо по мірі їх накопичення.
Наостанок хотілося б сказати, що «IO Designer» не панацея. Він не перетворює проектування схеми, плати проекту на ПЛІС в інтерактивну гру і не звільняє від вивчення документації на мікросхеми. Але працювати з таким інструментом набагато приємніше. У статті описані не всі його переваги. Також не можу судити про повноту бібліотек для всіх мікросхем, так як мені доводилося працювати лише з деякими з сімейств Altera і Хilinx. C Lattice мені якось вдалося трохи попрацювати на налагоджувальному комплекті, але до схеми, а тим більше до плати справа не дійшла. З Actel я не працював взагалі. З зауважень по Xilinx можу зазначити, що в моїй версії немає прямої передачі файлу обмежень в/з Vivado. Може з оновленнями вийде. Але так як проект ПЛІС Xilinx веду не я, то точно проблема — не розбирався. Ми обійшлися експортом через *.csv файл.
Дана публікація не претендує на звання підручника з «IODesigner», для цього є чимало уроків від Mentor Graphics. Знаю, що російською мовою навчання веде компанія Мегратек. www.megratec.uk.
Також, наскільки мені відомо, Mentor Graphics готує до висновку на ринок xPedition — нову версію системи проектування. Що там додадуть конкретно по IODesigner'у покаже час. З тих презентацій які я бачив на мене справили враження оновлення 3D відображення в платах і проектування пристроїв з декількома платами в одному проекті.
Також, крім названих мною САПР, для друкованих плат існують і інші. У кожної знайдеться список переваг і список «чого Y не вистачає як у Х». І якщо я не назвав їх переваги порівняно з варіантом роботи через IOD — не ображайтеся. Можете написати про це в коментарях. Або статтю про те як ви проектуєте ПЛІС у вашому САПР.

Джерело: Хабрахабр

0 коментарів

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