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] )
);