Чи існують бібліотеки з відкритим кодом для VHDL так, як вони роблять для C ++ або python?


11

Коли я наближаюся до проблеми в C ++ або python, існує багато бібліотек, які роблять важкий підйом мого коду. Я думаю про GNU GSL , BOOST або FFTW для C ++ та NumPy або SciPy для python. Багато в чому факт того, що ці ресурси існують, робить кодування на цих відповідних мовах доцільним, оскільки бібліотеки заважають вам переписувати всі речі низького рівня з нуля.

Стандартні бібліотеки IEEE, схоже, охоплюють лише самі основи, наприклад типи даних (подібні до стандартних ліфтів C).

Схоже, що в VHDL ви можете придбати / знайти кілька "IP-ядер", які вирішать проблему, а не використовувати бібліотеку з відкритим кодом. У python, якщо я хочу поговорити з серійним пристроєм, я просто import serialі в основному закінчую. У VHDL я або застряг би писати послідовний протокол з нуля, або мені доведеться гуляти по різних сховищах, поки я не знайду когось, хто створив щось подібне. Тоді я б виправляв біти коду у свій проект, а не просто щось включав і викликав це. Аналогічним чином, якщо я хочу виконати FFT, я можу знайти приклади FFT у VHDL через google, але я не можу знайти щось таке просте, як FFTW.

Чи є доступні всебічні бібліотеки з відкритим кодом, які я можу імпортувати у свої проекти? Чому, здається, кожен подає свій власний код для стільки одних і тих же речей?


2
Ви шукали opencores.org?
MarkU

3
Бібліотеки підтвердження VHDL див. На osvvm.org
Джим Льюїс

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

Відповіді:


14

Я розробник та обслуговуючий персонал у « Бібліотеці PoC ». Ми намагаємось надати таку бібліотеку, що складається з пакетів (колекція нових типів та функцій) та модулів. Він постачається із загальними фіфосами, арифметикою, компонентами крос-годинника, компонентами низькошвидкісного вводу / виводу та стеком Ethernet / IP / UDP (наступний випуск).

Як описано @crgrace, проектувати модулі досить складно:

  • робота на багатьох платформах
  • підтримка більшості ланцюжків інструментів постачальників
  • додати не менше / накладні витрати

У нашій бібліотеці є внутрішній механізм конфігурації (PoC.config) для розрізнення постачальників, пристроїв і навіть підродин пристроїв, щоб вибрати правильний код або оптимізовану реалізацію. Він також розрізняє синтез та імітаційний код в деяких точках.

Наприклад PoC.fifo_cc_got, FIFO з інтерфейсом 'загальний годинник' (cc) та сигналами для керування фіфом. Файл можна налаштувати за шириною, глибиною, бітами заповнення та типом реалізації. Можливий вибір оперативної пам’яті на основі LUT або типу впровадження On-Chip-RAM (ocram). Якщо ця фіфосинтезована опція ocram для Altera, вона використовує альцинкрам; якщо обрано Xilinx, він використовує загальний опис BlockRAM та реалізує арифметику покажчика за допомогою явного інстанціювання ланцюга (Xilinx XST не знаходить оптимального рішення, тому це робиться вручну).

Є ще 2 типи фіфо з "залежним годинником" (dc) і незалежним тактовим (ic) інтерфейсом. Тож якщо потрібно перейти з звичайної фіфо на перехресну тактову частоту (PoC.fifo_ic_got), змінити ім’я сутності та додати годинник та скинути для другого доменного годинника, це все.

Я думаю, що це доводить, можна писати загальні модулі, які працюють на декількох платформах і збираються в різних інструментах (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).

Крім PoC, є й інші бібліотеки з відкритим кодом:


Проекти "Відкрийте вільний та відкритий джерело кремнію" ( FOSSi ) на GitHub пропонує базу даних про всі проекти GitHub, які в основному використовують , , або будь-яку іншу важливу мову опису апаратних засобів ( ).

Дивись також:


+1 - показ того, що ви зробили, а також того, що зробили інші. Хороший довгий список.
Містер Містер

3

Бібліотеки з відкритим кодом, як ви описуєте, не будуть настільки ж корисними для VHDL або Verilog, як вони для мови програмування загального призначення. Це тому, що ЯК реалізувати задану функцію може дуже багато залежно від того, що ви намагаєтеся зробити. Код, який корисний для FPGA і, ймовірно, не настільки хороший для ASIC і навпаки.

Крім того, оскільки ми описуємо апаратне забезпечення, функція, яка виконує FFT, вимагає такої специфіки, як ширина слова та стратегія скидання та перезавантаження, щоб вона зв’язала ваші руки і обмежила весь ваш дизайн. Якби ви зробили цю функцію дуже гнучкою, вона мала б величезні накладні витрати.

Нарешті, подивіться, наприклад, розмір виконуваного файлу, коли ви включаєте багато бібліотек на C, наприклад. Там є тонна здуття. Це не має значення для розробки програмного забезпечення (більшість часу), але має велике значення для FPGA і особливо для розробки ASIC. Немає сенсу синтезувати купу накладних витрат, які вам не потрібні.

Отже, суть полягає в тому, що таких бібліотек немає, і ваш поточний підхід є здоровим.


Альтернативні (IP) основні генератори також створюють ризики Сцилли та Чабідріса від замикання постачальника та виникнення потоку. Потужність FPGA та ASIC виросла досить велика, щоб підтримати набряк, а потім випуск та вартість і тестування, що сприяло стандартизації руху (наприклад, AMBA AXI4). Знищення часу на ринок проти "накладних витрат вам не потрібно" вже зроблено цілими галузями. Проектування системи з використанням будівельних блоків замість апаратного проектування, останнє - судовий пристрій VHDL.
user8352

Третій абзац досить незнає, як працюють компілятори та інструменти синтезу - інструменти повинні відкидати непотрібні речі та не використовувати результати, швидше за все, навіть у цифровій логічній установці, ніж у мовній бібліотеці високого рівня, де можуть бути місцеві змінні та розподіли пам’яті, які є над головою абстракції бібліотеки, особливо якщо вона динамічно пов'язана.
Кріс Страттон

2

VHDL та Verilog - це описові мови та описують апаратні блоки. Послідовний драйвер на C ++ може перетворитись на послідовний IP в VHDL / Verilog.

opencores.org - найбільша база даних з відкритим кодом на сьогоднішній день.

Щоб полегшити процес пошуку, завантаження та перегляду коду (через Github), ви можете використовувати цей сучасний інтерфейс:

http://freerangefactory.org/cores.html

Наприклад, якщо ви шукаєте серійний файл, ви можете опинитися тут:

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

і безпосередньо перейти до коду в GitHub. Там ви побачите, що ви можете досить легко інстанціювати послідовний модуль і підключити до нього власну схему і почати надсилати та приймати дані. Це так само просто, як і серійні лібси в C ++.

Я сподіваюся, що це допомагає.


0

Перший сайт, на якому я заходжу, для подібних речей (як згадував @MarkU) - opencores.org.

Наприклад, є параметризований двигун FFT , записаний у VHDL, випущений за ліцензією BSD. Статус "бета".


це не те, що просять ОП. Він чи вона знає про перегляд opencores.org Параметризований двигун FFT - це далеко не імпорт стандартної математичної бібліотеки в Python та її використання. Через апаратні витрати не існує такого поняття, як "проміжне програмне забезпечення".
crgrace

0

Для перевірки існує методологія перевірки VHDL з відкритим кодом (OSVVM).
OSVVM - це всеосяжна, вдосконалена методологія перевірки VHDL, яка спрощує реалізацію функціонального покриття, обмеженого випадкового використання та інтелектуальної рандомізації покриття (інтелектуальна методологія тестового контролю). Він також полегшує реалізацію спільних файлів стенограми, повідомлення про помилки, журнали (умовна друк) та моделювання пам'яті.

Веб-сайт та блог OSVVM розміщено на веб-сайті http://osvvm.org . Пакети також доступні на github за адресою: https://github.com/JimLewis/OSVVM

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.