Das RTL-Design (Register-Transfer-Level) ist ein wesentlicher Schritt im Designprozess digitaler Schaltungen. Es definiert und optimiert die logische Funktion eines digitalen Designs auf abstrakter Ebene, bevor das physische Layout der Schaltung angegeben wird. Ingenieur*innen konvertieren das gewünschte Verhalten ihres Designs in Software-Code mit einer Hardwarebeschreibungssprache (HDL) wie VHDL oder Verilog.
Die ersten HDLs, die auf RTL-Ebene modellieren können, wurden in den 1980er Jahren entwickelt und entwickelten sich zu Full-Design-Systemen, die es Ingenieur*innen ermöglichen, den Datenfluss in elektronischen Schaltungen zu modellieren.
Als die Designs größer und komplexer wurden und die Fertigungstechnologie neue Wege zur Durchführung logischer und mathematischer Operationen ermöglichte, hielten die RTL-Designmethoden Schritt. Im Laufe der Zeit wurde das RTL-Design zu einem erforderlichen Schritt im digitalen Designprozess, der die Systemspezifikation und die Schaltungsentwurfsschritte überbrückt.
Der abstrakte Charakter der RTL-Beschreibung ermöglicht schnelle Studien und schnelle Designiterationen, um ein akzeptables und optimiertes Design zu erhalten, bevor man sich in die komplexeren und zeitaufwändigeren Phasen des Designprozesses eingehend einlässt.
Die RTL-Konstruktion ist ein wichtiger Bestandteil des Entwicklungszyklus für integrierte Schaltungen, der es Ingenieuren ermöglicht, ihre Konstruktionen in den Phasen Register, Operator und Datenfluss zu optimieren, bevor sie sich Gedanken über die physischen Komponenten und ihre Verbindung machen müssen. In diesem Artikel behandeln wir einige Grundlagen, beschreiben, wo RTL-Design in das Design digitaler Schaltungen passt, und erläutern den RTL-Designablauf. Anschließend zeigen wir, wie das RTL-Design in Field Programmable Gate Array (FPGA) und anwendungsspezifische integrierte Schaltungen (ASIC) Chip-Design passt und wie die Zukunft des RTL-Designs aussieht.
Der Begriff „Registerübertragung“ bezieht sich darauf, wie die Sprache den Datenfluss zwischen Registern beschreibt und wie logische Operationen und mathematische Operationen auf die Daten angewendet werden. Ingenieur*innen verwenden RTL-Design, um Funktionsblöcke zu beschreiben, um das Verhalten einer diskreten Komponente zu definieren, die zur Ausführung einer bestimmten Funktion verwendet wird. Jeder Funktionsblock hat eine Beschreibung der Register im Block, die als sequentielle Schaltung bezeichnet werden, und eine Kombinationsschaltung, die die logische Operation für den Funktionsblock enthält. Sie verwenden auch die HDL, um zu beschreiben, wie Funktionsblöcke verbunden sind, um den Datenfluss durch die Schaltung zu definieren.
Die Leistungsfähigkeit des RTL-Designs besteht darin, dass ein komplexes System in relativ einfache Blöcke aufgespalten wird, die durch HDL-Code dargestellt werden. Hier sind einige Grundlagen, die wichtig sind, um zu verstehen, wie RTL-Design verwendet wird.
Register
Im RTL-Design wird ein Hardwareelement, das eine festgelegte Datenmenge speichern kann, als Register bezeichnet. Sie werden in der Regel als D-Flip-Flops implementiert. Der Wert eines Registers kann als Eingabe für eine logische Operation gelesen oder als Ausgabe einer Operation festgelegt werden. Der grundlegende Zweck des RTL-Designs ist die Charakterisierung des Datenflusses zwischen Registern und der Änderung der Daten durch eine Operation.
Hardware Design Language (HDL)
Der wichtigste Teil des RTL-Designs ist der Code, der das Verhalten der Schaltung beschreibt. Eine HDL ist eine Spezifikationssprache, die einer Programmiersprache sehr ähnlich sieht, mit Variablen, Funktionsaufrufen, logischen Anweisungen wie „if-then-else“ und CASE, booleschen Ausdrücken und Mathematik. HDLs sind jedoch speziell für die Beschreibung des Verhaltens und der Struktur elektronischer Schaltungen, meist integrierter Schaltungen, konzipiert. Eine Sache, die HDL von den Programmiersprachen unterscheidet, ist, dass das Konzept der Zeit in der Sprache enthalten ist, so dass Operationen durch Uhren in der Schaltung ausgelöst werden können.
Dies wird durch die Verwendung einer Variablen erreicht, die den Wert der digitalen Uhr in der Schaltung definiert, wie in diesem einfachen VHDL-Beispiel eines Wechselrichters, bei dem der Ausgang (Q) auf den Eingangswert (D) gesetzt wird, wenn der Taktwert clk von einem niedrigen in einen hohen Zustand (steigende Flanke) wechselt:
D <= not Q;
process(clk)
begin
if rising_edge(clk) then
Q <= D;
end if;
end process;
Die am häufigsten verwendete HDL, Very High-Speed Integrated Circuit Hardware Description Language (VHDL), ist eine ausführliche, stark typisierte Sprache mit einer Syntax, die nicht wie die C-Sprache aussieht. Sie ist die bevorzugte HDL zur Beschreibung komplexerer Systemdesigns.
Eine weitere gängige HDL ist Verilog oder SystemVerilog. Sie ist prägnanter, schwach typisiert und flexibler, und ihre Syntax sieht wie C-Code aus. Da sie einfach ist, Beschreibungen zu erlernen und zu erstellen, bevorzugen Ingenieur*innen dies beim Anfahren oder wenn ihre Schaltkreise nicht so kompliziert sind. IEEE definiert sowohl Verilog als auch VHDL als Branchenstandards.
Hier ist ein einfaches Beispiel für ein AND-Gate in beiden Sprachen. Ein AND-Gate hat zwei Eingänge und einen Ausgang. Wenn beide Eingänge gleich 1 sind, ist der Ausgang 1. Wenn sie ungleich sind oder beide auf 0 gesetzt sind, ist die Ausgabe 0.
VHDL beschreibt AND-Gate als:
entity my_and is -- First, you define the entity
port (
inp1: in std_logic; -- The first port
inp2: in std_logic; -- The second port
rst: out std_logic -- The output port
);
end my_and;
architecture blk of my_and is -- Next, define the architecture
begin
process(inp1, inp2) -- With the inputs, do the following
Begin
-- Use a simple if-then-else statement
if((inp1=’1’) and inp1=’1’))then
rst <= ’1’;
else
rst <= ’0’;
End if;
end process
end blk;
Das Verilog für AND-Gate sieht folgendermaßen aus:
module my_and(inp1,inp2,rst); // define the module call
input inp1, inp2; // define inputs and output
output rst;
assign rst = inp1 & inp2; // use the & (and) operator
endmodule
Die Logik nimmt den Wert an den beiden Eingangsanschlüssen und setzt den Ausgang auf 1, wenn beide Anschlüsse 1 sind. Dies ist ein einfaches Beispiel, aber dieser Code kann jede Entität im System repräsentieren und dann kombiniert werden, um eine gesamte digitale Schaltung zu definieren. Typische grundlegende Bausteine sind Adder, Multiplikatoren, Zähler, Speicher und Statusmaschinen. Sobald die Designer*innen das System definiert haben, wird der Code an einen Compiler gesendet. Wenn er fehlerfrei kompiliert wird, können die Ingenieur*innen das Ergebnis verwenden, um ihr System zu testen.
Logische Operationen
Es gibt zwei Arten von Operationen im RTL-Design. Die ersten logischen Vorgänge führen eine bitweise Auswertung und Änderung der in Registern gespeicherten Daten durch. Logische Operationen wie AND, OR, NOT, XOR und SHIFT werden durch Definieren des logischen Verhaltens in der HDL erstellt. Das obige Beispiel zeigt, wie AND in VHDL und Verilog dargestellt werden kann. Logische Operationen stellen logische Gates in der Hardware dar.
Arithmetische Operationen
Die zweite Art von Operationen im RTL-Design sind arithmetische Operationen. Sie nehmen die Daten in Registern und addieren, subtrahieren, multiplizieren und dividieren. Sie werden im HDL mit standardmäßigen mathematischen Operatoren dargestellt. Beispiel: Wenn Sie zwei Zahlen in VHDL hinzufügen, wird die Zeile verwendet:
rst <= inp1 + inp2;
— Wobei inp1 und inp2 zwei Eingangsregister sind und dem Ausgangsregister rst zugeordnet ist. Arithmetische Operationen in RTL stellen dedizierte physikalische Elemente wie Addierer, Subtraktoren, Multiplikatoren und Divider dar.
Synchrone und asynchrone Aktionen
Das RTL-Design kann den Datenfluss synchron oder asynchron darstellen. Bei synchron wird eine Routine vom Systemtakteingang an die Funktion ausgeführt oder ausgelöst. Bei asynchron wird die Routine ausgeführt, wenn sich ein Wert von einem oder mehreren Eingangsanschlüssen auf eine bestimmte Weise ändert. Dies wird durch Prüfen der Eingangswerte des Takteingangs oder der nicht-Takteingänge implementiert, um festzustellen, ob sie sich mit einer IF-Anweisung geändert haben.
Der moderne Designablauf integrierter Schaltungen umfasst die Erstellung der Spezifikation für die Aufgaben des Geräts und die Umwandlung in einen verpackten Halbleiterchip. Die Abstraktionsebene, die RTL-Konstruktion bietet, ermöglicht es Ingenieuren, sich auf die übergeordneten Funktionen des Systems zu konzentrieren, ohne die Einzelheiten der physischen Implementierung des Designs berücksichtigen zu müssen.
Der erste Schritt in einem IC-Designablauf besteht darin, die Systemspezifikationen und das Architekturdesign zu definieren. Diese Informationen werden in HDL-Code konvertiert. Ingenieur*innen verwenden diesen Code dann, um das funktionale und logische Design zu definieren. Sobald dies abgeschlossen ist, wird das Design in eine Netzliste umgewandelt, die dann zur Erstellung des Schaltungsdesigns verwendet wird, gefolgt vom restlichen Designprozess.
Die abstrakte Darstellung mit RTL-Design erfolgt so früh wie möglich im Designprozess – bevor Zeit und Geld für das physische Design, die Überprüfung des physischen Designs oder die tatsächliche Fertigung der Hardware aufgewendet werden. Die Integration des RTL-Designs in den Prozess erfordert eine gute Integration zwischen der Systemspezifikation zu Beginn und starken Tools, die Register, Vorgänge und Datenfluss in einen tatsächlichen Stromkreis umwandeln, wenn das RTL-Design durchgeführt wird.
Das Ziel des RTL-Designablaufs ist die Definition und Optimierung der Funktion einer integrierten Schaltung, in der Regel eines FPGA- oder ASIC-Geräts. Designer*innen verwenden den RTL-Designablauf, um zunächst die Logik und den Fluss des Geräts zu definieren, um das System zu testen und zu optimieren, und konvertieren dann die RTL-Definition in eine Netzliste. Die folgenden fünf Schritte definieren die typische RTL-Designmethode.
1. High-Level-Synthese
Die erste Aufgabe im Ablauf besteht darin, die Spezifikationen für das Gerät mit möglichst wenigen Änderungen in HDL-Code umzuwandeln. In den meisten Fällen stellen Ingenieur*innen das gewünschte Verhalten des Geräts in einer Standardprogrammiersprache wie C oder C++ dar. Ein Softwaretool zerlegt dann die Algorithmen im Softwaremodell in die gewählte Spezifikationssprache. Dieser Schritt kann bei einfacheren Designs übersprungen werden, aber bei komplexeren Designs kann er erhebliche Anstrengungen einsparen.
2. RTL-Codierung
Ingenieur*innen erstellen oder verfeinern dann den Code. Designer*innen befassen sich mit den Details bestimmter Register, den erforderlichen Vorgängen und dem Datenfluss. Ein wichtiger Teil dieses Schritts ist die Verwendung von Modulen zur Beschreibung allgemeiner Vorgänge und bestimmter Systemkomponenten. Sobald ein Modul erstellt wurde, kann es gegebenenfalls wiederverwendet werden, was die Komplexität des Gesamtdesigns erheblich vereinfacht.
3. Optimierung von Leistung, Stromverbrauch und Fläche
Sobald die Codierung abgeschlossen ist, beginnt der Optimierungsprozess. Ziel dieses Schritts ist es, die Leistung zu verbessern, den Stromverbrauch zu minimieren und die physische Größe des Designs zu reduzieren.
Timing- und Logiksimulation
Simulationstools werden verwendet, um Zeitanalysen durchzuführen und Registerwerte im gesamten System zu verfolgen. Das Design wird auf der Registerübertragungsebene überprüft, um sicherzustellen, dass es keine Timing-Probleme im gesamten Stromkreis gibt und dass die Vorgänge die erwarteten Ergebnisse liefern. Hier arbeitet das Designteam daran, Probleme, einschließlich Stromstörungen, im System so früh wie möglich im Designprozess zu beheben.
Stromabschätzung
Jedes Gerät im System verbraucht eine gewisse Menge an Strom. Designer*innen müssen wissen, wie viel Strom verbraucht wird, und ihre Designs wiederholen, um die Stromverteilung zu verstehen und den Stromverbrauch zu minimieren. Ansys PowerArtist™ Software wird von vielen führenden Halbleiterentwicklungsunternehmen zur Analyse, Profilerstellung und Reduzierung des Stromverbrauchs auf der Ebene der Registerübertragung verwendet. Mit ihr können Designteams in kürzester Zeit den Stromverbrauch analysieren, stromineffizienten RTL-Code identifizieren und jeden verschwendeten Toggle im Design kennzeichnen.
Minimierung der Fläche
Jede Komponente in einer integrierten Schaltung nimmt physischen Platz ein, ebenso wie die Leiterbahnen zwischen diesen Komponenten. Obwohl der RTL-Designprozess nicht die physische Größe von Komponenten betrachtet, erfasst er die Anzahl der Komponenten und die Komplexität der Verbindungen zwischen ihnen.
4. Verifizierung
Sobald das Design optimiert wurde, muss es überprüft werden, um sicherzustellen, dass alle Spezifikationen erfüllt werden. Sie ist ein wichtiger Teil des Designprozesses, und alle Designanforderungen müssen überprüft werden, bevor das Design weiterentwickelt werden kann. Dies erfolgt entweder mit RTL-Simulation oder formaler Verifizierung.
RTL-Simulation: Verschiedene Softwaretools werden verwendet, um das Design dynamisch zu überprüfen. Eingangsvektoren werden angewendet, und die resultierenden Ausgangsvektoren werden mit den erwarteten Ergebnissen verglichen. Die Ein- und Ausgänge werden in der Regel als Kurven dargestellt, sodass die Designer*innen das Verhalten des Systems visuell überprüfen kann.
Formale Verifizierung: Dies ist ein statischer Verifizierungsprozess, bei dem mithilfe von Automatisierung eine Reihe von Verhaltenserwartungen in mathematische Algorithmen umgewandelt werden, die den gesamten Betriebsraum des Systems untersuchen. Die Ergebnisse werden dann mathematisch ausgewertet, um die Richtigkeit zu überprüfen.
5. RTL-Synthese
Sobald das Design des Systems vollständig überprüft wurde, wird die RTL-Synthese verwendet, um die HDL-Codedarstellung des RTL-Designs in eine Netzliste auf Gate-Ebene umzuwandeln. Dies ist das Frontend für Tools, die den resultierenden Schaltplan in ein physisches Layout in einem EDA-Tool (Electronic Design Automation) umwandeln. Unternehmen wie Synopsys haben eine Vielzahl von Synthesetools in EDA-Plattformen integriert.
Integrierte Schaltungen können in zwei Klassen unterteilt werden. Anwendungsspezifische integrierte Schaltungen (ASICs) sind speziell für bestimmte Anwendungen oder Aufgaben konzipiert. Nach der Erstellung kann die Logik im Chip nicht mehr geändert werden. Beispiele für ASIC-Chips sind Speichermodule, digitale Sprachrekorder, optimierte Signalprozessoren, Mikroprozessoren, Zentraleinheiten (CPUs) oder sogar so komplexe Systeme wie E/A, CPU, Speicher und mehr.
Field-Programmable Gate Array (FPGA)-Chips sind Halbleiterchips, die nach ihrer Herstellung neu programmiert werden können. Anstatt die Logik in die Geometrie des Chips einzubauen, verfügen FPGAs über Arrays logischer Blöcke, die durch ein Verbindungsgitter verbunden sind, das ebenfalls programmiert werden kann.
Das RTL-Design spielt im ersten Teil beider Designabläufe dieselbe Rolle. Sobald die RTL-Synthese abgeschlossen ist, müssen Ingenieur*innen für den ASIC-Designablauf die physischen Schaltkreise planen, was als Floorplanning bezeichnet wird. In einem FPGA-Design wird der RTL-Code direkt in eine Netzliste konvertiert, die weiß, welche logischen Blöcke verfügbar sind, und diese Blöcke im Schritt „Place-and-Route“ konfiguriert.
Die Verwendung von Hardwarebeschreibungssprachen zur Darstellung des gewünschten Verhaltens digitaler Systeme begann in den 1970er und 1980er Jahren. Sie fand großen Anklang, da Very Large-Scale Integration (VLSI) an Popularität gewann und hat mit den weiteren Entwicklungen im IC-Design Schritt gehalten. Da die Funktionsgröße in integrierten Schaltungen immer kleiner wird, die Taktfrequenz immer größer wird und mehr Funktionen in einem Chip verpackt sind, stehen Designer*innen vor immer größeren Herausforderungen.
Die Komplexität des Designs hat sich nicht verlangsamt, und RTL-Tools werden diesen Herausforderungen immer besser gerecht. Die Unternehmen, die die Tools entwickeln, mit denen Designer*innen die nächste Generation integrierter Schaltungen definieren, konzentrieren sich auf einige Schlüsselbereiche, um die Benutzerfreundlichkeit, Leistungsfähigkeit und Funktionalität des RTL-Designablaufs zu verbessern. Einige Schwerpunkte sind:
Das Energiemanagement ist nach wie vor eine der größten Herausforderungen im gesamten Designprozess integrierter Schaltungen, und die RTL-Optimierung ist nach wie vor der optimale Ort, um die Spannungsabfälle zu verstehen und zu verwalten, die Strom in einem System verbrauchen. Verbesserungen an Tools wie PowerArtist Software, die mehr Optionen, mehr Transparenz und mehr Geschwindigkeit bieten, helfen Teams, diese Herausforderung zu meistern.
Mit zunehmender Anzahl der verfügbaren Tools für Design, Simulation, Verifizierung und Genehmigung werden auch die Fähigkeiten der vorhandenen Tools zunehmen. Unternehmen, die diese Tools bereitstellen, und Branchenorganisationen wie IEEE müssen Schritt halten, indem sie Standards aktualisieren und verbessern und Tools bereitstellen, die den Fluss zwischen Anwendungen so nahtlos wie möglich gestalten.
Viele Tools, die beim Design integrierter Schaltungen verwendet werden, haben Formen des maschinellen Lernens (ML) und Expertensysteme verwendet, um Prozessschritte zu beschleunigen, insbesondere beim Layout der physischen Schaltungen. Dies wird nur mit verbesserten ML-Algorithmen und dem Einsatz von Tools der generativen künstlichen Intelligenz (KI) fortgesetzt, um die wahrscheinlichsten nächsten Schritte oder Lösungen für Probleme vorzuschlagen.
Anbieter im RTL-Bereich arbeiten hart daran, die Fähigkeit der Ingenieur*innen zu verbessern, ihre High-Level-Systemspezifikationen schneller in High-Level-Hardwaresprachen zu konvertieren, und zwar mit Designs, die näher an der optimalen Konfiguration liegen.
Es gibt Raum für signifikante Produktivitäts- und Optimierungsgewinne, wenn die Gates in einer RTL-Beschreibung im RTL-Syntheseschritt in tatsächliche Transistoren umgewandelt werden. Wenn die physikalische Geometrie in das Design eindringt, besteht die Möglichkeit, fundierte Entscheidungen zu treffen, die die nachgelagerten Prozesse bei der Auslegung des Schaltkreises vereinfachen.