Was ist der Hauptunterschied zwischen RTL und HDL? Um ehrlich zu sein, habe ich danach gesucht / gegoogelt, aber die Meinungen sind geteilt. Ich erinnere mich an einen, der sagte, dass HDL die Computersprache ist, die verwendet wird, um eine digitale Schaltung zu beschreiben, und wenn sie synthetisierbar ist, dann wird sie als RTL betrachtet.
HDL ist der Sammelbegriff für alle Hardware-Definitionssprachen (Verilog, VHDL usw.), genauso wie sich Object Oriented auf C++, Java usw. beziehen kann.
RTL hingegen ist eine Möglichkeit, eine Schaltung zu beschreiben.
Sie schreiben Ihren Code auf RTL-Ebene in einer HDL-Sprache, die dann (durch Synthesewerkzeuge) in eine Beschreibung auf Gatterebene in derselben HDL-Sprache oder was auch immer Ihr Zielgerät/Prozess benötigt übersetzt wird.
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 Synthesetool kann das nehmen und es in eine Reihe von Logikgattern oder nur ein Mux-Makro konvertieren, das von Ihrem Endgerät unterstützt wird. Beispielsweise könnte es ein Mux-Makro instanziieren
mux u3 (mux_out, din_1, din_0);
In beiden Fällen können Sie dem Block dieselben Eingänge zuführen (RTL oder Gate-Level) und Ihr Ausgang sollte derselbe 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, das zu einer Diskrepanz geführt hat. Dies wird als formale Verifizierung bezeichnet.
Aus einer Vielzahl von Gründen, Interoperabilität, einfache Änderung, Verständlichkeit, schreiben Sie Ihre Beschreibung der digitalen Schaltung als RTL und nicht als Gatterebene.
HDL (Hardware Description Language) ist der verwendete Sprachtyp, Verilog/VHDL im Vergleich zu einem Nicht-HDL-Javascript.
RTL (Register-Transfer-Ebene) ist eine Abstraktionsebene, auf der Sie schreiben. Die drei Ebenen, auf die ich mich beziehe, sind Verhaltens-, RTL- und Gate-Ebene.
Verhalten hat die höchste Abstraktionsebene, die das Gesamtverhalten beschreibt und oft nicht synthetisierbar ist, aber zur 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, aber nicht das Verhalten. Schalten von Muxes für Gates usw. manchmal Invertieren von Signalen, 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 ;
Die Gate-Ebene ist ein Design, das die Basislogikgatter (NAND, NOR, AND, OR, MUX, FLIP-FLOP) verwendet. 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 werden, aber es fehlen Positionsinformationen.
Verilog auf Gate-Ebene (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] )
);
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 Parallellade-Schieberegister, das auf einem Xilinx 9536 CPLD unter Verwendung von Blöcken mit asynchronem Zurücksetzen / Voreinstellen implementiert werden könnte) entwerfen würde, würde dies als RTL oder Gate-Ebene betrachtet werden?AND(.a(),.b()) OR(.a(),.b())
reine Logikgatter angeschlossen. Ich habe den Eindruck, dass RTL alles ist, was Sie synthetisieren möchten, sogar kombinatorische Schaltungen, da Sie immer noch die Änderung der Daten beschreiben, aber nicht die Logikgatter direkt.MyLatch
Sie eine instanziierte Basiszelle oder ein implizites Latch? Wenn Sie das Gate instanziieren, ist es Gate-Level. Wenn Sie es implizieren, ist es RTL. Die Gate-Level-Bibliothek wird mit Timing verknüpft sein, um Rennbedingungen/Glitches usw. zu modellieren. RTL-Simulationen laufen mit idealen Komponenten.
Platzhalter
Al Bundy