RTL vs HDL? Qual è la differenza


24

Qual è la differenza principale tra RTL e HDL? Ad essere sincero, ho cercato / cercato su Google, ma le persone sono divise nelle loro opinioni. Ricordo uno che diceva che HDL è il linguaggio utilizzato per descrivere un circuito digitale e quando è sintetizzabile, viene considerato RTL.

Risposte:


18

HDL è il nome generico per tutti i linguaggi di definizione hardware (Verilog, VHDL, ecc.) Nello stesso modo in cui Orientamento agli oggetti può fare riferimento a C ++, Java, ecc.

RTL d'altra parte è un modo per descrivere un circuito.

Scrivi il tuo codice di livello RTL in un linguaggio HDL che viene poi tradotto (tramite strumenti di sintesi) nella descrizione del livello di gate nella stessa lingua HDL o qualunque cosa il tuo dispositivo / processo target prenderà.

Lasciate che vi faccia un esempio. Ecco una riga di Verilog (HDL) che descrive un mux in RTL:

assign mux_out = (sel) ? din_1 : din_0;

Il tuo strumento di sintesi può prenderlo e convertirlo in un set di porte logiche, o semplicemente in una macro mux supportata dal tuo dispositivo finale. Ad esempio, potrebbe creare un'istanza di una macro mux

mux u3 (mux_out, din_1, din_0);

In entrambi i casi è possibile alimentare gli stessi input al blocco (RTL o gate-level) e l'output dovrebbe essere lo stesso. In effetti ci sono strumenti che controllano l'output della tua sintesi rispetto al tuo codice RTL per assicurarsi che lo strumento non abbia accidentalmente ottimizzato o cambiato qualcosa durante la sintesi che ha causato una mancata corrispondenza. Questo si chiama verifica formale.

Per una serie di motivi, interoperabilità, facilità di modifica, comprensibilità, scrivi la tua descrizione del circuito digitale come RTL, anziché a livello di gate.


3
Bella risposta, solo un ulteriore perfezionamento ... RTL assume un determinato stile di progettazione - nuvola logica, registro, nuvola logica, registro ecc. Che implica un design sincrono (con clock). Se stavi codificando nel tuo hdl per un design senza clock (asincrono) il tuo strumento di sintesi potrebbe usare qualcosa di diverso da RTL.
segnaposto

,, In effetti ci sono strumenti che controllano l'output della tua sintesi rispetto al tuo codice RTL per assicurarsi che lo strumento non abbia accidentalmente ottimizzato o modificato qualcosa durante la sintesi che ha causato una mancata corrispondenza. Questa si chiama verifica formale. "" No, non lo è. Questo si chiama Controllo dell'equivalenza logica o Controllo dell'equivalenza formale. La verifica formale è piuttosto un processo per dimostrare (usando metodi matematici, senza banchi di simulazione / test) che la descrizione dell'hardware descrive realmente il comportamento che intendeva descrivere.
Al Bundy,

14

HDL (Hardware description Language) è il tipo di linguaggio utilizzato, Verilog / VHDL rispetto a un javascript non HDL.

RTL (Register-transfer level) è un livello di astrazione in cui stai scrivendo. I tre livelli a cui mi riferisco sono Behavioral, RTL, Gate-level.

Il comportamento ha il più alto livello di astrazione che descrive il comportamento generale e spesso non è sintetizzabile, ma è utile per la verifica.

RTL descrive l'hardware desiderato implicando la logica. definire infradito, chiavistelli e come i dati vengono trasferiti tra loro. Questo è sintetizzabile, la sintesi può alterare / ottimizzare la logica utilizzata ma non il comportamento. Commutazione di mux per cancelli, ecc. Alcune volte invertendo i segnali per ottimizzare il design.

Verilog RTL che implica un infradito:

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

Operatori combinati Bitwise:

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

assign result = n & m ;

Il livello di gate è un progetto che utilizza le porte logiche di base (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Non ha bisogno di essere sintetizzato o è l'output della sintesi. Questo ha il livello più basso di astrazione. sono le porte logiche che userete sul chip, ma mancano di informazioni sulla posizione.

Gate level Verilog (stessa funzione di cui sopra):

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

combinatoria

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

Se si progettasse un circuito come 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;(un registro a scorrimento a carico parallelo asincrono che potrebbe essere implementato su un CPLD Xilinx 9536 usando blocchi con reset / preimpostazione asincroni) sarebbe considerato RTL o gate-level?
supercat

RTL, il livello del gate sembrerebbe come se AND(.a(),.b()) OR(.a(),.b())fossero collegate porte puramente logiche. Ho l'impressione che RTL sia tutto ciò che intendi sintetizzare, anche i circuiti combinatori poiché stai ancora descrivendo il cambiamento nei dati, ma non le porte logiche direttamente.
pre_randomize

1
Scusa se non seguo, proverò a chiarire. RTL implica un infradito. Il gate-level crea un'istantanea. Per i circuiti semplici, collegare un gruppo di porte logiche potrebbe essere semplice. ma potrebbe non essere efficiente nell'area di potenza. Un processore Atom ha 47 milioni di transistor che equivalgono a circa 10 milioni di equivalenti NAND2. Vuoi definire ed eseguire il debug di 10 milioni di porte cablate a mano? Questo è il vantaggio di astrarre un po 'che possiamo studiare ed eseguire il debug del comportamento previsto.
pre_randomize

1
Supponiamo che uno stia cercando di specificare un 74HC74 in un HDL. Esistono diversi modi in cui si potrebbe sintetizzare un dispositivo del genere usando una combinazione di logica combinatoria, flop di sola sincronizzazione e chiavistelli trasparenti, ma non riesco a immaginare alcuna implementazione che non implichi né condizioni di gara né crei anomalie comportamentali che potrebbero non esistono con le primitive hardware (ad es. se D e Q sono alti, un impulso di rottura su CP o / SD non dovrebbe avere alcun effetto, ma nelle implementazioni posso immaginare che tali impulsi potrebbero causare metastabilità e / o un glitch in uscita).
supercat,

1
Come stai creando MyLatchè una cella di base istanziata o un latch implicito. Se si istanzia il gate, questo è a livello di gate. Se lo si implica, è RTL. La libreria a livello di gate avrà un timing associato ad essa per modellare le condizioni di gara / glitch ecc. Simulazioni RTL eseguite con componenti ideali.
pre_randomize
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.