Gibt es Open Source-Bibliotheken für VHDL wie für C ++ oder Python?


10

Wenn ich mich einem Problem in C ++ oder Python nähere, gibt es viele Bibliotheken, die das schwere Heben meines Codes bewirken. Ich denke an GNU GSL , BOOST oder FFTW für C ++ und NumPy oder SciPy für Python. In vielerlei Hinsicht lohnt sich die Codierung in diesen jeweiligen Sprachen aufgrund der Tatsache, dass diese Ressourcen vorhanden sind, da die Bibliotheken verhindern, dass Sie alle Dinge auf niedriger Ebene von Grund auf neu schreiben müssen.

Die IEEE-Standardbibliotheken scheinen nur die Grundlagen abzudecken, wie z. B. Datentypen (ähnlich den C-Standardbibliotheken).

In VHDL können Sie anscheinend einige "IP-Cores" kaufen / finden, die ein Problem lösen, anstatt eine Open-Source-Bibliothek zu verwenden. Wenn ich in Python mit einem seriellen Gerät sprechen möchte, import serialbin ich einfach fertig. In VHDL würde ich entweder nicht in der Lage sein, ein serielles Protokoll von Grund auf neu zu schreiben, oder ich müsste in den verschiedenen Repositorys herum googeln, bis ich jemanden gefunden habe, der etwas produziert hat, das so funktioniert. Ich würde dann Code-Teile in mein Projekt patchen, anstatt nur etwas einzuschließen und das aufzurufen. In ähnlicher Weise kann ich, wenn ich eine FFT durchführen möchte, Beispiele für FFTs in VHDL über Google finden, aber es gibt nichts Einfaches wie FFTW, das ich finden kann.

Gibt es umfassende Open Source-Bibliotheken, die ich in meine Projekte importieren kann? Warum scheint jeder seinen eigenen Code für so viele der gleichen Dinge zu rollen?


2
Haben Sie opencores.org durchsucht?
MarkU

3
Für VHDL-Verifizierungsbibliotheken siehe osvvm.org
Jim Lewis

Opencores können Sie auch Bibliotheken aus verschiedenen Quellen kaufen. Sie werden einige Zeit mit den meisten Kernen von OpenCores verbringen, da die meisten nicht gut dokumentiert sind.
Spannungsspitze

Antworten:


14

Ich bin Entwickler und Betreuer bei ' The PoC Library '. Wir versuchen, eine solche Bibliothek bereitzustellen, die aus Paketen (Sammlung neuer Typen und Funktionen) und Modulen besteht. Es enthält gängige Fifos, Arithmetik, Cross-Clock-Komponenten, Low-Speed-I / O-Komponenten und einen Ethernet / IP / UDP-Stack (nächste Version).

Wie @crgrace beschrieben hat, ist es ziemlich kompliziert, Module zu entwerfen, die:

  • Arbeit auf vielen Plattformen
  • unterstützen die meisten Toolketten von Anbietern
  • Fügen Sie keinen / weniger Overhead hinzu

Unsere Bibliothek verfügt über einen internen Konfigurationsmechanismus (PoC.config) zur Unterscheidung von Anbietern, Geräten und sogar Geräteunterfamilien, um den richtigen Code oder eine optimierte Implementierung auszuwählen. An einigen Stellen wird auch zwischen Synthese- und Simulationscode unterschieden.

Zum Beispiel PoC.fifo_cc_gotist ein FIFO mit einer "Common Clock" (cc) -Schnittstelle und Put / Got-Signalen zur Steuerung des Fifo. Das Fifo ist in Breiten, Tiefen, Füllzustandsbits und Implementierungstyp konfigurierbar. Es ist möglich, einen LUT-basierten RAM- oder On-Chip-RAM-Implementierungstyp (Ocram) auszuwählen. Wenn dieses Fifo mit der Option ocram für Altera synthetisiert wird, wird Altsyncram verwendet. Wenn Xilinx ausgewählt ist, verwendet es eine generische BlockRAM-Beschreibung und implementiert die Zeigerarithmetik durch explizite Carrychain-Instanziierung (Xilinx XST findet nicht die optimale Lösung, daher erfolgt dies manuell).

Es gibt zwei weitere Fifo-Typen mit 'abhängiger Uhr' (DC) und unabhängiger Uhr (IC) -Schnittstelle. Wenn Sie also von einem normalen Fifo zu einem Cross-Clock-Fifo (PoC.fifo_ic_got) wechseln müssen, ändern Sie den Entitätsnamen, fügen Sie eine Uhr hinzu und setzen Sie sie für die zweite Uhrdomäne zurück.

Ich denke, dies beweist, dass es möglich ist, gemeinsame Module zu schreiben, die auf mehreren Plattformen arbeiten und in verschiedenen Tools kompiliert werden (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).

Neben PoC gibt es noch andere Open Source-Bibliotheken:


Die "Discover Free and Open Source Silicon" -Projekte ( FOSSi ) auf GitHub bieten eine durchsuchbare Datenbank aller GitHub-Projekte, die hauptsächlich , , oder eine andere wichtige Hardwarebeschreibungssprache ( ) verwenden.

Siehe auch:


+1 für das Zeigen, was Sie getan haben und was andere getan haben. Gute lange Liste.
Herr Mystère

3

Open-Source-Bibliotheken, wie Sie sie beschreiben, wären für VHDL oder Verilog nicht annähernd so nützlich wie für eine allgemeine Programmiersprache. Dies liegt daran, dass die Art und Weise, wie Sie eine bestimmte Funktion implementieren, sehr viel davon abhängen kann, was Sie tun möchten. Code, der gut für und FPGA ist, ist wahrscheinlich nicht so gut für einen ASIC und umgekehrt.

Da wir Hardware beschreiben, würde eine Funktion, die eine FFT ausführt, Details wie Wortbreite und Takt- und Rücksetzstrategie erfordern, die Ihre Hände binden und Ihr gesamtes Design einschränken würden. Wenn Sie die Funktion sehr flexibel gestalten würden, hätte dies einen enormen Overhead.

Schauen Sie sich zum Schluss die Größe Ihrer ausführbaren Datei an, wenn Sie beispielsweise viele Bibliotheken in C aufnehmen. Da ist eine Menge Blähungen. Das ist für die Softwareentwicklung (meistens) nicht wichtig, aber für die FPGA- und insbesondere die ASIC-Entwicklung von großer Bedeutung. Es macht keinen Sinn, eine Menge Overhead zu synthetisieren, die Sie nicht benötigen.

Unter dem Strich gibt es also keine solchen Bibliotheken, und Ihr aktueller Ansatz ist solide.


Die alternativen (IP) Kerngeneratoren bergen auch das Risiko von Scylla und Chabydris, dass sich der Anbieter einschließt und sich dadurch aufbläht. Die FPGA- und ASIC-Kapazitäten sind groß genug geworden, um das Aufblähen zu unterstützen. Das Problem ist dann Kosten und Test, unterstützt durch die Aufblähungsstandardisierung (z. B. AMBA AXI4). Der Kompromiss zwischen Time-to-Market und "Overhead, den Sie nicht benötigen" wurde bereits von ganzen Branchen gemacht. Systemdesign unter Verwendung von Bausteinen anstelle von Hardware-Design, letzteres die Vogtei von VHDL.
user8352

Ihr dritter Absatz kennt die Funktionsweise von Compilern und Synthesewerkzeugen nicht - Werkzeuge sollten die nicht benötigten und nicht verwendeten Ergebnisse verwerfen, wahrscheinlich sogar mehr in einer digitalen Logikeinstellung als in einer Hochsprachenbibliothek, in der möglicherweise lokale Sprachen vorhanden sind Variablen und Speicherzuordnungen, die über der Bibliotheksabstraktion liegen, insbesondere wenn sie dynamisch verknüpft sind.
Chris Stratton

2

VHDL und Verilog sind beschreibende Sprachen und beschreiben Hardwareblöcke. Ein serieller Treiber in C ++ wird möglicherweise in eine serielle IP in VHDL / Verilog übersetzt.

opencores.org ist die bislang größte Open-Source-Datenbank.

Um das Suchen, Herunterladen und Durchsuchen von Code (über Github) zu vereinfachen, können Sie diese moderne Oberfläche verwenden:

http://freerangefactory.org/cores.html

Wenn Sie zum Beispiel nach Serien suchen, können Sie hier landen:

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

und direkt zum Code in GitHub springen. Dort werden Sie sehen, dass Sie das serielle Modul ganz einfach instanziieren und Ihre eigene Schaltung daran anschließen und mit dem Senden und Empfangen von Daten beginnen können. Dies ist so einfach wie serielle Bibliotheken in C ++.

Ich hoffe das hilft.


0

Die erste Seite, auf die ich für solche Dinge gehe (wie @MarkU erwähnte), ist opencores.org.

Zum Beispiel gibt es eine in VHDL geschriebene parametrisierte FFT-Engine , die unter der BSD-Lizenz veröffentlicht wurde. Der Status ist "Beta".


Das fragt das OP nicht. Er oder sie weiß, wie man sich opencores.org ansieht Eine parametrisierte FFT-Engine ist weit davon entfernt, eine Standard-Mathematikbibliothek in Python zu importieren und zu verwenden. Aufgrund des Overheads gibt es in der Hardware keine "Middleware".
Crgrace

0

Für die Überprüfung gibt es die Open Source VHDL-Überprüfungsmethode (OSVVM).
OSVVM ist eine umfassende, fortschrittliche VHDL-Überprüfungsmethode, die die Implementierung der funktionalen Abdeckung, der eingeschränkten Zufallsgenerierung und der intelligenten Abdeckungs-Randomisierung (eine intelligente Testbench-Methode) vereinfacht. Es erleichtert auch die Implementierung gemeinsam genutzter Transkriptdateien, Fehlerberichte, Protokolle (bedingtes Drucken) und Speichermodellierung.

Die Website und der Blog von OSVVM befinden sich unter http://osvvm.org . Die Pakete sind auch auf github verfügbar unter: https://github.com/JimLewis/OSVVM

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.