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