RTL gegen HDL? Was ist der Unterschied

24

Was ist der Hauptunterschied zwischen RTL und HDL? Um ehrlich zu sein habe ich gesucht / gegoogelt, aber die Leute sind in ihren Meinungen gespalten. Ich erinnere mich an einen Spruch, der besagt, dass HDL die Computersprache ist, mit der eine digitale Schaltung beschrieben wird, und wenn sie synthetisierbar ist, wird sie als RTL betrachtet.

Will es
quelle

Antworten:

18

HDL ist der Sammelbegriff für alle Hardwaredefinitionssprachen (Verilog, VHDL usw.) auf die gleiche Weise, wie Object Oriented auf C ++, Java usw. verweisen kann.

RTL hingegen beschreibt eine Schaltung.

Sie schreiben Ihren RTL-Level-Code in einer HDL-Sprache, die dann (mit Synthesewerkzeugen) in die Gate-Level-Beschreibung in derselben HDL-Sprache oder in einem beliebigen Format übersetzt wird, das Ihr Zielgerät / -prozess benötigt.

Lassen Sie mich Ihnen ein Beispiel geben. Hier ist eine Verilog-Zeile (HDL), die einen Mux in RTL beschreibt:

assign mux_out = (sel) ? din_1 : din_0;

Ihr Synthesizer kann das übernehmen und in eine Reihe von Logikgattern oder nur in ein Mux-Makro konvertieren, das von Ihrem Endgerät unterstützt wird. Zum Beispiel könnte es ein Mux-Makro instanziieren

mux u3 (mux_out, din_1, din_0);

In beiden Fällen können Sie dem Block die gleichen Eingänge zuführen (RTL oder Gate-Pegel) und Ihr Ausgang sollte der gleiche sein. Tatsächlich gibt es Tools, die die Ausgabe Ihrer Synthese mit Ihrem RTL-Code vergleichen, um sicherzustellen, dass das Tool während der Synthese nicht versehentlich etwas optimiert oder geändert hat, was zu einer Nichtübereinstimmung geführt hat. Dies wird als formale Überprüfung bezeichnet.

Für eine Vielzahl von Gründen, Interoperabilität, einfache Änderung, Verständlichkeit schreiben Sie Ihre Beschreibung der digitalen Schaltung als RTL, anstatt auf Gate-Ebene.

EEToronto
quelle
3
Gute Antwort, nur eine weitere Verfeinerung ... RTL geht von einem bestimmten Designstil aus - Logikwolke, Register, Logikwolke, Register usw., was synchrones (getaktetes) Design impliziert. WENN Sie in Ihrer HDL-Datei für das zeitlose (asynchrone) Design codiert haben, verwendet Ihr Synthese-Tool möglicherweise etwas anderes als RTL.
Platzhalter
,, Tatsächlich gibt es Tools, die die Ausgabe Ihrer Synthese mit Ihrem RTL-Code vergleichen, um sicherzustellen, dass das Tool während der Synthese nicht versehentlich etwas optimiert oder geändert hat, was zu einer Nichtübereinstimmung geführt hat. Dies nennt man formale Verifizierung. «» Nein, das ist nicht der Fall. Dies wird als logische Äquivalenzprüfung oder formale Äquivalenzprüfung bezeichnet. Die formale Verifizierung ist eher ein Prozess des Nachweises (mithilfe mathematischer Methoden, ohne Simulation / Prüfstände), dass Ihre Hardwarebeschreibung wirklich das Verhalten beschreibt, das sie beschreiben soll.
Al Bundy
14

HDL (Hardware Description Language) ist die Art der verwendeten Sprache, Verilog / VHDL im Vergleich zu einem Nicht-HDL-Javascript.

RTL (Register-Transfer-Level) ist eine Abstraktionsebene, in die Sie schreiben. Die drei Ebenen, auf die ich mich beziehe, sind Behavioral, RTL, Gate-Level.

Behavioral hat die höchste Abstraktionsebene, die das Gesamtverhalten beschreibt und oft nicht synthetisierbar ist, aber für die Verifizierung nützlich ist.

RTL beschreibt die gewünschte Hardware, indem es Logik impliziert. Definieren von Flip-Flops, Latches und wie Daten zwischen ihnen übertragen werden. Dies ist synthetisierbar. Die Synthese kann die verwendete Logik ändern / optimieren, jedoch nicht das Verhalten. Durch das Umschalten von Multiplexern für Tore usw. werden manchmal Signale invertiert, um das Design besser zu optimieren.

Verilog RTL impliziert ein Flip-Flop:

logic a;              //logic is SystemVerilog, could be a 'reg'
logic k;              // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
  if (~rst_n) begin
    a <= 'b0 ;
  end
  else begin
    a <= k ;
  end
end

Kombinatorische bitweise Operatoren:

logic [1:0] n;
logic [1:0] m;
logic [1:0] result;

assign result = n & m ;

Der Gatterpegel ist ein Entwurf unter Verwendung der Basislogikgatter (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Es muss nicht synthetisiert werden oder ist das Ergebnis der Synthese. Dies hat die niedrigste Abstraktionsebene. Es sind die Logikgatter, die Sie auf dem Chip verwenden, aber es fehlen Positionsinformationen.

Gate Level Verilog (gleiche Funktion wie oben):

wire a;
wire k;
DFFRX1 dffrx1_i0 (
  .Q (a),   //Output
  .QN( ),   //Inverted output not used
  .D (k),   //Input
  .CK(clk), //Clk
  .RN(rst_n)// Active Low Async Reset
);

Kombinatorisch

wire [1:0] n;
wire [1:0] m;
wire [1:0] result;

AND2X1 and2x1_i0 (
  .Y( result[0]),
  .A( n[0]     ),
  .B( m[0]     )
);
AND2X1 and2x1_i1 (
  .Y( result[1]),
  .A( n[1]     ),
  .B( m[1]     )
);
pre_randomize
quelle
Wenn man eine Schaltung entwerfen würde als MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;(ein asynchrones Parallel-Load-Schieberegister, das auf einer Xilinx 9536 CPLD unter Verwendung von Blöcken mit asynchronem Reset / Preset implementiert werden könnte), würde dies als RTL oder Gate-Level betrachtet werden?
Supercat
RTL, Gate-Level würde so aussehen, als würden AND(.a(),.b()) OR(.a(),.b())rein logische Gates angeschlossen. Ich habe den Eindruck, dass RTL alles ist, was Sie synthetisieren wollen, auch kombinatorische Schaltungen, da Sie immer noch die Änderung der Daten beschreiben, aber nicht die logischen Gatter direkt.
pre_randomize
1
Sorry, ich folge nicht, werde versuchen zu klären. RTL impliziert ein Flip-Flop. Gate-Level instanziiert ein Flip-Flop. Für einfache Schaltungen kann es einfach sein, eine Reihe von Logikgattern anzuschließen. aber möglicherweise nicht energieeffizient. Ein Atomprozessor hat 47 Millionen Transistoren, was ungefähr 10 Millionen NAND2-Äquivalenten entspricht. Möchten Sie 10 Millionen handverdrahtete Tore definieren und debuggen? Dies ist der Vorteil einer kurzen Zusammenfassung, mit der wir das beabsichtigte Verhalten untersuchen und debuggen können.
pre_randomize
1
Angenommen, man versucht, einen 74HC74 in einer HDL anzugeben. Es gibt eine Vielzahl von Möglichkeiten, wie man ein solches Gerät mithilfe einer Kombination aus kombinatorischer Logik, Nur-Synchronisations-Flops und transparenten Latches synthetisieren kann, aber ich kann mir keine Implementierung vorstellen, bei der weder Race-Bedingungen noch Verhaltensanomalien auftreten gibt es nicht mit Hardware-Grundelementen (z. B. wenn D und Q hoch sind, sollte ein Runt-Impuls auf CP oder / SD keine Auswirkung haben, aber in den Implementierungen kann ich mir vorstellen, dass solche Impulse Metastabilität und / oder eine Ausgangsstörung verursachen könnten).
Supercat
1
Wie erstellen Sie es MyLatchist eine instanziierte Basiszelle oder ein implizites Latch. Wenn Sie das Gate instanziieren, ist es auf Gate-Ebene. Wenn Sie es implizieren, ist es RTL. Der Gate-Level-Bibliothek ist ein Timing für die Modellierung von Rennbedingungen / Störungen usw. zugeordnet. RTL-Simulationen werden mit idealen Komponenten ausgeführt.
pre_randomize