Hardwarebeschreibungssprache - Hardware description language

In der Computertechnik ist eine Hardwarebeschreibungssprache ( HDL ) eine spezialisierte Computersprache, die verwendet wird, um die Struktur und das Verhalten von elektronischen Schaltungen und am häufigsten digitalen Logikschaltungen zu beschreiben .

Eine Hardwarebeschreibungssprache ermöglicht eine präzise, formale Beschreibung einer elektronischen Schaltung, die eine automatisierte Analyse und Simulation einer elektronischen Schaltung ermöglicht. Es ermöglicht auch die Synthese einer HDL - Beschreibung in eine Netzliste (eine Spezifikation der physikalischen elektronischer Komponenten und wie sie miteinander verbunden sind), die dann werden können platziert und geroutet , die zur Herstellung von Maskensatz zur Erstellung eines verwendeten integrierte Schaltung .

Eine Hardwarebeschreibungssprache sieht einer Programmiersprache wie C oder ALGOL sehr ähnlich ; es ist eine textuelle Beschreibung bestehend aus Ausdrücken, Anweisungen und Kontrollstrukturen. Ein wichtiger Unterschied zwischen den meisten Programmiersprachen und HDLs besteht darin, dass HDLs explizit den Begriff der Zeit beinhalten.

HDLs bilden einen integralen Bestandteil von Electronic Design Automation (EDA)-Systemen, insbesondere für komplexe Schaltungen, wie anwendungsspezifische integrierte Schaltungen , Mikroprozessoren und programmierbare Logikbausteine .

Motivation

Aufgrund der explodierenden Komplexität digitaler elektronischer Schaltungen seit den 1970er Jahren (siehe Mooresches Gesetz ) mussten Schaltungsdesigner digitale Logikbeschreibungen auf hohem Niveau durchführen, ohne an eine bestimmte elektronische Technologie wie ECL , TTL oder CMOS gebunden zu sein . HDLs wurden erstellt, um die Abstraktion auf Registerübertragungsebene zu implementieren , ein Modell des Datenflusses und des Timings einer Schaltung.

Es gibt zwei Hauptsprachen für die Hardwarebeschreibung: VHDL und Verilog . Es gibt verschiedene Arten von Beschreibungen: "Dataflow, Behavioral und Structural". Beispiel für den Datenfluss von VHDL:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY not1 IS
    PORT(
        a : IN  STD_LOGIC;
        b : OUT STD_LOGIC;
    );
END not1;

ARCHITECTURE behavioral OF not1 IS
BEGIN
    b <= NOT a;
END behavioral;

Struktur von HDL

HDLs sind standardmäßige textbasierte Ausdrücke der Struktur elektronischer Systeme und ihres Verhaltens im Laufe der Zeit. Wie nebenläufige Programmiersprachen enthalten HDL-Syntax und -Semantik explizite Notationen zum Ausdrücken von Parallelität . Doch im Gegensatz zu den meisten Software - Programmiersprachen , umfasst HDLs auch einen expliziten Begriff der Zeit, die ein primäres Attribut von Hardware. Sprachen, deren einziges Merkmal darin besteht, die Schaltungskonnektivität zwischen einer Hierarchie von Blöcken auszudrücken, werden richtig als Netzlistensprachen klassifiziert, die im elektrischen computergestützten Design verwendet werden . HDL kann verwendet werden, um Designs in Struktur-, Verhaltens- oder Register-Transfer-Level-Architekturen für dieselbe Schaltungsfunktionalität auszudrücken; in den letzten beiden Fällen entscheidet der Synthesizer über die Architektur und das Layout der Logikgatter.

HDLs werden verwendet, um ausführbare Spezifikationen für Hardware zu schreiben. Ein Programm, das entworfen wurde, um die zugrunde liegende Semantik der Sprachanweisungen zu implementieren und den Fortschritt der Zeit zu simulieren, bietet dem Hardware-Designer die Möglichkeit, ein Stück Hardware zu modellieren, bevor es physisch erstellt wird. Es ist diese Ausführbarkeit, die HDLs die Illusion gibt, Programmiersprachen zu sein , wenn sie genauer als Spezifikationssprachen oder Modellierungssprachen klassifiziert werden . Es gibt Simulatoren, die ereignisdiskrete (digitale) und zeitkontinuierliche (analoge) Modellierung unterstützen können, und HDLs, die für jeden bestimmt sind, sind verfügbar.

Vergleich mit Kontrollflusssprachen

Es ist sicherlich möglich, Hardware-Semantik mit traditionellen Programmiersprachen wie C++ darzustellen , die auf Kontrollfluss- Semantik im Gegensatz zum Datenfluss operieren , obwohl Programme, um als solche zu funktionieren, mit umfangreichen und unhandlichen Klassenbibliotheken erweitert werden müssen . Im Allgemeinen enthalten Softwareprogrammiersprachen jedoch keine Fähigkeit zum expliziten Ausdrücken von Zeit und können daher nicht als Hardwarebeschreibungssprachen fungieren. Vor der Einführung von System Verilog im Jahr 2002 war die C++- Integration mit einem Logiksimulator eine der wenigen Möglichkeiten, objektorientierte Programmierung bei der Hardwareverifikation einzusetzen. System Verilog ist das erste große HDL, das Objektorientierung und Garbage Collection anbietet.

Unter Verwendung der richtigen Teilmenge der Hardwarebeschreibungssprache kann ein als Synthesizer oder Logiksynthesewerkzeug bezeichnetes Programm aus den Sprachanweisungen logische Hardwareoperationen ableiten und eine äquivalente Netzliste von generischen Hardwareprimitiven erzeugen, um das spezifizierte Verhalten zu implementieren. Synthesizer ignorieren im Allgemeinen den Ausdruck von Timing-Konstrukten im Text. Digitale Logiksynthesizer verwenden beispielsweise im Allgemeinen Taktflanken als Weg, um die Schaltung zu takten , und ignorieren jegliche Zeitgebungskonstrukte. Die Fähigkeit, einen synthetisierbaren Teilsatz der Sprache zu haben, macht selbst keine Hardwarebeschreibungssprache.

Geschichte

Die ersten Hardware-Beschreibungssprachen erschienen in den späten 1960er Jahren und sahen aus wie traditionellere Sprachen. Die erste, die nachhaltig wirkte, wurde 1971 in C. Gordon Bell und Allen Newells Text Computer Structures beschrieben . Dieser Text führte das Konzept der Registerübertragungsebene ein , das zuerst in der ISP-Sprache verwendet wurde, um das Verhalten des PDP-8 der Digital Equipment Corporation (DEC) zu beschreiben .

Die Sprache wurde mit der Einführung der PDP-16 RT-Level Modules (RTMs) von DEC und einem Buch, das ihre Verwendung beschreibt, weiter verbreitet. Es folgten mindestens zwei Implementierungen der grundlegenden ISP-Sprache (ISPL und ISPS). ISPS war gut geeignet, um die Beziehungen zwischen den Inputs und den Outputs des Entwurfs zu beschreiben und wurde schnell von kommerziellen Teams des DEC sowie von einer Reihe von Forschungsteams sowohl in den USA als auch bei ihren NATO-Verbündeten übernommen.

Die RTM-Produkte kamen nie auf den Markt und DEC stellte sie Mitte der 1980er Jahre ein, als neue Techniken und insbesondere die sehr große Integration (VLSI) populärer wurden.

Eine separate Arbeit, die um 1979 an der Universität Kaiserslautern durchgeführt wurde, führte zu einer Sprache namens KARL ("KAiserslautern Register Transfer Language"), die Designkalkül-Sprachfunktionen umfasste, die VLSI-Chip-Grundrissplanung und strukturiertes Hardwaredesign unterstützten. Diese Arbeit war auch die Grundlage der interaktiven grafischen Schwestersprache ABL von KARL, deren Name eine Initiale für "A Block diagram Language" war. ABL wurde in den frühen 1980er Jahren vom Centro Studi e Laboratori Telecomunicazioni ( CSELT ) in Turin, Italien, implementiert und produzierte den grafischen VLSI-Designeditor ABLED. Mitte der 1980er Jahre wurde ein VLSI-Design-Framework um KARL und ABL von einem internationalen Konsortium implementiert, das von der Kommission der Europäischen Union finanziert wurde.

In den späten 1970er Jahren wurde Design mit programmierbaren Logikbausteinen (PLDs) populär, obwohl diese Designs hauptsächlich auf den Entwurf von endlichen Automaten beschränkt waren . Die Arbeiten bei Data General im Jahr 1980 verwendeten dieselben Geräte, um den Data General Eclipse MV/8000 zu entwickeln , und der kommerzielle Bedarf an einer Sprache, die sich gut darauf abbilden ließ, wuchs. 1983 führte Data I/O ABEL ein, um diesen Bedarf zu decken.

Im Jahr 1985 als Entwurf zu VLSI verschoben, Gateway - Design Automation eingeführt Verilog und Intermetrics veröffentlichten die ersten fertige Version der VHSIC Hardware Description Language (VHDL). VHDL wurde im Auftrag des VHSIC-Programms des US-Verteidigungsministeriums entwickelt und basierte auf der Programmiersprache Ada sowie auf den Erfahrungen aus der früheren Entwicklung von ISPS. Anfänglich wurden Verilog und VHDL verwendet, um bereits erfasste und in anderer Form (z. B. Schaltplandateien ) beschriebene Schaltungsdesigns zu dokumentieren und zu simulieren . Die HDL-Simulation ermöglichte es den Ingenieuren, auf einer höheren Abstraktionsebene zu arbeiten als die Simulation auf Schaltplanebene, und erhöhte so die Designkapazität von Hunderten von Transistoren auf Tausende. 1986 wurde VHDL mit Unterstützung des US-Verteidigungsministeriums als IEEE-Standard (IEEE Std 1076) gesponsert und die erste IEEE-standardisierte Version von VHDL, IEEE Std 1076-1987, wurde im Dezember 1987 genehmigt. Cadence Design Systems erwarb später Gateway Design Automation für die Rechte an Verilog-XL, dem HDL-Simulator, der für das nächste Jahrzehnt zum De-facto-Standard der Verilog-Simulatoren werden sollte.

Die Einführung der Logiksynthese für HDLs rückte HDLs aus dem Hintergrund in den Vordergrund des digitalen Designs. Synthesetools kompilierten HDL- Quelldateien (in einem eingeschränkten Format namens RTL geschrieben) in eine herstellbare Netzlistenbeschreibung in Bezug auf Gates und Transistoren . Das Schreiben von synthetisierbaren RTL-Dateien erforderte Übung und Disziplin seitens des Designers; Im Vergleich zu einem herkömmlichen schematischen Layout waren synthetisierte RTL-Netzlisten fast immer größer und leistungsschwächer. Ein Schaltungsdesign von einem erfahrenen Ingenieur mit arbeitsintensiver Schaltplanerfassung/Handlayout würde fast immer sein logisch synthetisiertes Äquivalent übertreffen, aber der Produktivitätsvorteil der Synthese verdrängte die digitale Schaltplanerfassung bald auf genau die Bereiche, für die es problematisch war RTL-Synthese: extrem schnelle, stromsparende oder asynchrone Schaltung.

Innerhalb weniger Jahre entwickelten sich VHDL und Verilog zu den dominierenden HDLs in der Elektronikindustrie, während ältere und weniger leistungsfähige HDLs allmählich aus dem Gebrauch verschwanden. VHDL und Verilog teilen jedoch viele der gleichen Einschränkungen, z. B. dass sie nicht für die Simulation von analogen oder gemischten Signalen geeignet sind . Spezielle HDLs (wie Confluence) wurden mit dem ausdrücklichen Ziel eingeführt, spezifische Einschränkungen von Verilog und VHDL zu beheben, obwohl keine beabsichtigt war, sie jemals zu ersetzen.

Im Laufe der Jahre wurden viele Anstrengungen unternommen, um HDLs zu verbessern. Die neueste Version von Verilog, offiziell bekannt als IEEE 1800-2005 SystemVerilog, führt viele neue Funktionen (Klassen, Zufallsvariablen und Eigenschaften/Zusicherungen) ein, um dem wachsenden Bedarf an besserer Prüfstandsrandomisierung , Designhierarchie und Wiederverwendung gerecht zu werden . Eine zukünftige Überarbeitung von VHDL ist ebenfalls in Entwicklung und wird voraussichtlich den Verbesserungen von SystemVerilog entsprechen.

Entwerfen mit HDL

Aufgrund der mit HDL realisierten Effizienzgewinne dreht sich ein Großteil des modernen digitalen Schaltungsdesigns darum. Die meisten Designs beginnen als eine Reihe von Anforderungen oder ein übergeordnetes Architekturdiagramm. Steuerungs- und Entscheidungsstrukturen werden häufig in Flussdiagrammanwendungen als Prototypen erstellt oder in einen Zustandsdiagrammeditor eingegeben . Der Prozess des Schreibens der HDL-Beschreibung hängt stark von der Art der Schaltung und der Präferenz des Designers für den Codierungsstil ab. Die HDL ist lediglich die „Erfassungssprache“, die oft mit einer übergeordneten algorithmischen Beschreibung wie einem mathematischen C++-Modell beginnt. Designer verwenden häufig Skriptsprachen wie Perl, um automatisch sich wiederholende Schaltungsstrukturen in der HDL-Sprache zu generieren. Spezielle Texteditoren bieten Funktionen für die automatische Einzüge, Syntax-abhängige Färbung und Makro -basierte Expansion des Unternehmens / Architektur / Signaldeklaration.

Der HDL-Code wird dann einem Code-Review oder Auditing unterzogen. Zur Vorbereitung der Synthese wird die HDL-Beschreibung einer Reihe von automatisierten Prüfern unterzogen. Die Checker melden Abweichungen von standardisierten Coderichtlinien, identifizieren potenziell mehrdeutige Codekonstrukte, bevor sie zu Fehlinterpretationen führen können, und prüfen auf häufige logische Codierungsfehler wie Floating- Ports oder kurzgeschlossene Ausgänge. Dieser Prozess hilft beim Auflösen von Fehlern, bevor der Code synthetisiert wird.

Im Fachjargon endet das HDL-Design im Allgemeinen in der Synthesephase. Sobald das Synthesewerkzeug die HDL-Beschreibung in eine Gate-Netzliste abgebildet hat, wird die Netzliste an die Back-End-Stufe übergeben. Abhängig von der physikalischen Technologie ( FPGA , ASIC- Gate-Array , ASIC- Standardzelle ) können HDLs eine bedeutende Rolle im Back-End-Flow spielen oder auch nicht. Im Allgemeinen wird die Designdatenbank mit fortschreitendem Designfluss zu einer physikalisch realisierbaren Form immer mehr mit technologiespezifischen Informationen beladen, die nicht in einer generischen HDL-Beschreibung gespeichert werden können. Schließlich wird eine integrierte Schaltung hergestellt oder zur Verwendung programmiert.

Simulieren und Debuggen von HDL-Code

Wesentlich für das HDL-Design ist die Möglichkeit, HDL-Programme zu simulieren. Simulation ermöglicht es einer HDL-Beschreibung eines Entwurfs (als Modell bezeichnet), die Entwurfsprüfung zu bestehen , ein wichtiger Meilenstein, der die beabsichtigte Funktion (Spezifikation) des Entwurfs gegen die Codeimplementierung in der HDL-Beschreibung validiert. Es ermöglicht auch architektonische Erkundungen. Der Ingenieur kann mit Designentscheidungen experimentieren, indem er mehrere Variationen eines Basisdesigns schreibt und dann ihr Verhalten in der Simulation vergleicht. Daher ist die Simulation für ein erfolgreiches HDL-Design entscheidend.

Um ein HDL-Modell zu simulieren, schreibt ein Ingenieur eine Top-Level-Simulationsumgebung (genannt Prüfstand ). Eine Testbench enthält mindestens eine Instanziierung des Modells (das sogenannte Device Under Test oder DUT), Pin-/Signaldeklarationen für die I/O des Modells und eine Taktwellenform. Der Testbench-Code ist ereignisgesteuert: Der Ingenieur schreibt HDL-Anweisungen, um das (Testbench-erzeugte) Reset-Signal zu implementieren, Schnittstellentransaktionen zu modellieren (z. B. ein Host-Bus-Lese-/Schreibzugriff) und die Ausgabe des DUT zu überwachen. Ein HDL-Simulator – das Programm, das die Testbench ausführt – verwaltet die Simulatoruhr, die die Hauptreferenz für alle Ereignisse in der Testbench-Simulation ist. Ereignisse treten nur zu den Zeitpunkten auf, die von der Testbench-HDL diktiert werden (z. B. ein in die Testbench codierter Reset-Toggle) oder als Reaktion (vom Modell) auf Reize und auslösende Ereignisse. Moderne HDL-Simulatoren verfügen über voll funktionsfähige grafische Benutzeroberflächen , komplett mit einer Suite von Debug-Tools. Diese ermöglichen es dem Benutzer, die Simulation jederzeit zu stoppen und neu zu starten, Simulatorhaltepunkte (unabhängig vom HDL-Code) einzufügen und jedes Element in der HDL-Modellhierarchie zu überwachen oder zu ändern. Moderne Simulatoren können die HDL-Umgebung auch über eine definierte PLI / VHPI- Schnittstelle mit benutzerkompilierten Bibliotheken verknüpfen . Die Verknüpfung ist systemabhängig ( x86 , SPARC usw. unter Windows / Linux / Solaris ), da der HDL-Simulator und die Benutzerbibliotheken außerhalb der HDL-Umgebung kompiliert und verknüpft werden.

Die Designverifizierung ist aufgrund der Diskrepanz zwischen der funktionalen Spezifikation eines Geräts , der Interpretation der Spezifikation durch den Designer und der Ungenauigkeit der HDL-Sprache oft der zeitaufwendigste Teil des Designprozesses . Der Großteil des anfänglichen Test-/Debugging-Zyklus wird in der HDL- Simulatorumgebung durchgeführt , da die frühe Phase des Designs häufigen und größeren Schaltungsänderungen unterliegt. Eine HDL-Beschreibung kann auch in Hardware prototypisiert und getestet werden – zu diesem Zweck werden oft programmierbare Logikbausteine verwendet. Hardware-Prototyping ist vergleichsweise teurer als HDL-Simulation, bietet aber eine realitätsnahe Ansicht des Designs. Prototyping ist der beste Weg, um die Schnittstelle mit anderen Hardwaregeräten und Hardwareprototypen zu überprüfen. Selbst solche, die auf langsamen FPGAs laufen, bieten viel kürzere Simulationszeiten als eine reine HDL-Simulation.

Designverifizierung mit HDLs

Historisch gesehen war die Designverifizierung eine mühsame, sich wiederholende Schleife des Schreibens und Ausführens von Simulationstestfällen für das zu testende Design. Da Chipdesigns immer größer und komplexer geworden sind, ist die Aufgabe der Designverifikation so weit gewachsen, dass sie jetzt den Zeitplan eines Designteams dominiert. Auf der Suche nach Möglichkeiten zur Verbesserung der Konstruktionsproduktivität hat die Branche der elektronischen Konstruktionsautomatisierung die Property Specification Language entwickelt .

In formaler Verifikation ist eine Eigenschaft eine Tatsachenaussage über das erwartete oder angenommene Verhalten eines anderen Objekts. Idealerweise können für eine gegebene HDL-Beschreibung eine Eigenschaft oder Eigenschaften mit formalen mathematischen Methoden als wahr oder falsch bewiesen werden. Praktisch gesehen können viele Eigenschaften nicht bewiesen werden, da sie einen unbeschränkten Lösungsraum belegen . Wenn jedoch ein Satz von Betriebsannahmen oder Beschränkungen bereitgestellt wird, kann ein Eigenschaftsprüfer bestimmte Eigenschaften durch Einengung des Lösungsraums beweisen (oder widerlegen).

Die Assertionen modellieren keine Schaltungsaktivität, sondern erfassen und dokumentieren die Absicht des Designers im HDL-Code. In einer Simulationsumgebung wertet der Simulator alle angegebenen Behauptungen aus und meldet den Ort und den Schweregrad von Verstößen. In einer Syntheseumgebung arbeitet das Synthesewerkzeug normalerweise mit der Richtlinie, die Synthese bei jeder Verletzung anzuhalten. Die Assertionsbasierte Verifikation steckt noch in den Kinderschuhen, wird aber voraussichtlich ein fester Bestandteil des HDL-Design-Toolsets werden.

HDL und Programmiersprachen

Ein HDL ist einer Software- Programmiersprache sehr ähnlich , aber es gibt große Unterschiede. Die meisten Programmiersprachen sind von Natur aus prozedural (single-threaded), mit begrenzter syntaktischer und semantischer Unterstützung, um Parallelität zu handhaben . HDLs hingegen ähneln simultanen Programmiersprachen in ihrer Fähigkeit, mehrere parallele Prozesse (wie Flip-Flops und Addierer ) zu modellieren , die automatisch unabhängig voneinander ausgeführt werden. Jede Änderung an der Eingabe des Prozesses löst automatisch eine Aktualisierung im Prozess-Stack des Simulators aus.

Sowohl Programmiersprachen als auch HDLs werden von einem Compiler (im HDL-Fall oft als Synthesizer bezeichnet) verarbeitet, jedoch mit unterschiedlichen Zielen. Bei HDLs bezieht sich "Kompilieren" auf die Logiksynthese ; der Prozess der Umwandlung des HDL-Code-Listings in eine physikalisch realisierbare Gate- Netzliste . Die Netzlistenausgabe kann eine von vielen Formen annehmen: eine "Simulations"-Netzliste mit Gate-Delay-Informationen, eine "Übergabe"-Netzliste für die Platzierung und das Routing nach der Synthese auf einem Halbleiterchip oder ein generisches Electronic Design Interchange Format (EDIF .) nach Industriestandard ) (zur nachträglichen Konvertierung in eine Datei im JEDEC- Format).

Andererseits wandelt ein Software-Compiler die Quellcode-Auflistung in einen mikroprozessorspezifischen Objektcode zur Ausführung auf dem Ziel-Mikroprozessor um. Da HDLs und Programmiersprachen Konzepte und Funktionen voneinander übernehmen, wird die Grenze zwischen ihnen immer weniger deutlich. Reine HDLs sind jedoch für die Entwicklung von Allzweck- Anwendungssoftware ungeeignet , ebenso wie Allzweck-Programmiersprachen für die Modellierung von Hardware unerwünscht sind.

Da jedoch elektronische Systeme immer komplexer werden und rekonfigurierbare Systeme immer häufiger werden, besteht in der Industrie ein wachsender Wunsch nach einer einzigen Sprache, die einige Aufgaben sowohl des Hardwaredesigns als auch der Softwareprogrammierung ausführen kann. SystemC ist ein Beispiel dafür – eingebettete Systemhardware kann als nicht-detaillierte Architekturblöcke ( Blackboxen mit modellierten Signaleingängen und Ausgangstreibern) modelliert werden. Die Zielanwendung ist in C oder C++ geschrieben und nativ für das Hostentwicklungssystem kompiliert; im Gegensatz zur Ausrichtung auf die eingebettete CPU, die eine Host-Simulation der eingebetteten CPU oder einer emulierten CPU erfordert.

Der hohe Abstraktionsgrad von SystemC-Modellen eignet sich gut für die frühe Erforschung der Architektur , da Änderungen der Architektur leicht bewertet werden können, ohne sich um Implementierungsprobleme auf Signalebene zu kümmern. Das in SystemC verwendete Threading-Modell basiert jedoch auf Shared Memory , was dazu führt, dass die Sprache parallele Ausführung oder Low-Level-Modelle nicht gut handhabt.

Synthese auf hohem Niveau

In ihrer Abstraktionsebene wurden HDLs mit Assemblersprachen verglichen . Es gibt Versuche, das Abstraktionsniveau des Hardwaredesigns zu erhöhen, um die Komplexität der Programmierung in HDLs zu reduzieren, indem ein Unterfeld namens High-Level-Synthese geschaffen wird .

Unternehmen wie Cadence , Synopsys und Agility Design Solutions bewerben SystemC als eine Möglichkeit, Hochsprachen mit Parallelitätsmodellen zu kombinieren, um schnellere Designzyklen für FPGAs zu ermöglichen, als dies mit herkömmlichen HDLs möglich ist. Ansätze auf Basis von Standard- C oder C++ (mit Bibliotheken oder anderen Erweiterungen, die eine parallele Programmierung ermöglichen) finden sich in den Catapult C- Tools von Mentor Graphics und den Impulse C- Tools von Impulse Accelerated Technologies.

Eine ähnliche Initiative von Intel ist die Verwendung von Data Parallel C++, das mit SYCL verwandt ist , als High-Level-Synthesesprache.

Die CoreFire Design Suite von Annapolis Micro Systems , Inc. und das LabVIEW FPGA von National Instruments bieten einen grafischen Datenfluss- Ansatz für den Einstieg in das High-Level-Design, und Sprachen wie SystemVerilog , SystemVHDL und Handel-C verfolgen das gleiche Ziel, zielen jedoch auf Verbesserung der Produktivität bestehender Hardware-Ingenieure, anstatt FPGAs für bestehende Software-Ingenieure zugänglicher zu machen .

Es ist auch möglich, Hardwaremodule mit MATLAB und Simulink mit dem MathWorks HDL Coder Tool oder DSP Builder für Intel FPGAs oder Xilinx System Generator (XSG) von Xilinx zu entwerfen .

Beispiele für HDLs

HDLs für analoges Schaltungsdesign

Name Beschreibung
HDL-A Ein proprietäres analoges HDL
SpectreHDL Ein proprietäres analoges HDL von Cadence Design Systems für seinen Spectre-Schaltungssimulator
Verilog-AMS (Verilog für Analog und Mixed-Signal) Eine Accellera- Standarderweiterung von IEEE Std 1364 Verilog für Analog- und Mixed-Signal-Simulation
VHDL-AMS (VHDL mit Analog-/Mixed-Signal-Erweiterung) Eine IEEE-Standarderweiterung (IEEE Std 1076.1) von VHDL für Analog- und Mixed-Signal-Simulation

HDLs für den digitalen Schaltungsentwurf

Die beiden in der Industrie am weitesten verbreiteten und am besten unterstützten HDL-Varianten sind Verilog und VHDL .

Name Beschreibung
Erweiterte Sprache für boolesche Ausdrücke (ABEL)
Altera Hardwarebeschreibungssprache (AHDL) eine proprietäre Sprache von Altera
AHPL Eine Hardware-Programmiersprache
Bluespec High-Level HDL basierend auf Haskell (kein embedded DSL )
Bluespec SystemVerilog (BSV) basierend auf Bluespec, mit Verilog HDL-ähnlicher Syntax, von Bluespec, Inc.
C-zu-Verilog Konverter von C zu Verilog
Meißel (Bauen von Hardware in einer Scala Embedded Language) basierend auf Scala (embedded DSL )
Clash Clash Eine moderne, funktionale Hardwarebeschreibungssprache Clash ist eine funktionale Hardwarebeschreibungssprache, die sowohl ihre Syntax als auch ihre Semantik der funktionalen Programmiersprache Haskell . entlehnt
COLAMO (Common Oriented Language for Architecture of Multi Objects) eine proprietäre Sprache des „Supercomputers and Neurocomputers Research Center“ Co Ltd.
Zusammenfluss ein funktionelles HDL; wurde eingestellt
CoWareC ein C-basiertes HDL von CoWare . Jetzt eingestellt zugunsten von SystemC
CUPL (Compiler für universelle programmierbare Logik) eine proprietäre Sprache von Logical Devices, Inc.
ELLA nicht mehr gebräuchlich
ESys.net .NET-Framework in C# geschrieben
Händel-C eine C-ähnliche Designsprache
Hardcaml basierend auf OCaml (embedded DSL). Probieren Sie es online aus .
HHDL basierend auf Haskell (embedded DSL).
Hardwarebeitritt Java (HJJ) basierend auf Join Java
HML (Hardware-ML) basierend auf Standard ML
Hydra basierend auf Haskell
Impuls C ein weiteres C-ähnliches HDL
ISPS Original HDL von CMU, nicht mehr gebräuchlich
ParC (Parallel-C++) kusu erweitert um Threading und Kommunikation im HDL-Stil für aufgabenparallele Programmierung
JHDL basierend auf Java
KARL KAiserslautern Register Language (Kapitel in), eine Pascalish-Hardware-Beschreibungssprache, die nicht mehr gebräuchlich ist.
Lava basierend auf Haskell (embedded DSL).
Lola eine einfache Unterrichtssprache
m Ein HDL von Mentor Graphics
MeinHDL basierend auf Python (embedded DSL )
nMigen basierend auf Python
PALASM für PAL-Geräte ( Programmable Array Logic )
PipelineC Eine C-ähnliche Hardware-Beschreibungssprache, die High-Level-Synthese- ähnliches automatisches Pipelining als Sprachkonstrukt/Compiler-Feature hinzufügt .
PyMTL basierend auf Python, von der Cornell University
PyRTL basierend auf Python, von der University of California, Santa Barbara
ROCCC (Riverside Optimizing Compiler for Configurable Computing) Kostenloses und Open-Source-Tool von C zu HDL
RHDL basierend auf der Programmiersprache Ruby
ROHD (Rapid Open Hardware Development Framework) ein Framework für Hardware-Design und -Verifizierung, geschrieben in Dart
Ruby (Hardwarebeschreibungssprache)
SystemC eine standardisierte Klasse von C++-Bibliotheken für die High-Level-Verhaltens- und Transaktionsmodellierung digitaler Hardware auf einer hohen Abstraktionsebene, dh auf Systemebene
SystemVerilog eine Obermenge von Verilog mit Verbesserungen für Design und Verifikation auf Systemebene
WirbelsäuleHDL Basierend auf Scala (embedded DSL)
SystemTCL SDL basierend auf Tcl.
THDL++ (Vorlagen-HDL, inspiriert von C++) Eine Erweiterung von VHDL mit Vererbung, erweiterten Vorlagen und Richtlinienklassen
TL-Verilog ( Verilog auf Transaktionsebene) Eine Erweiterung von Verilog/SystemVerilog mit Konstrukten für Pipelines und Transaktionen .
Verilog Eines der am weitesten verbreiteten und am besten unterstützten HDLs
VHDL ( VHSIC- HDL) Eines der am weitesten verbreiteten und am besten unterstützten HDLs

HDLs für das Leiterplattendesign

Es gibt mehrere Projekte zum Definieren der Konnektivität von Leiterplatten unter Verwendung von sprachbasierten Texteingabemethoden.

Name Beschreibung
PHDL (PCB-HDL) Ein kostenloses Open-Source-HDL zum Definieren der Konnektivität von Leiterplatten
EDAsolver Ein HDL zum Lösen von Schaltplänen basierend auf Randbedingungen
SKiDL Open-Source-Python-Modul zum Entwerfen elektronischer Schaltungen

Siehe auch

Verweise

Externe Links