HDL (Linguagem de descrição de hardware) é o tipo de linguagem usada, Verilog / VHDL versus um javascript não HDL.
RTL (nível de transferência de registro) é um nível de abstração em que você está escrevendo. Os três níveis aos quais me refiro são Behavioral, RTL, Gate-level.
Comportamental tem a camada mais alta de abstração que descreve o comportamento geral e geralmente não é sintetizável, mas é útil para verificação.
RTL descreve o hardware que você deseja, implicando lógica. definindo flip-flops, trincos e como os dados são transferidos entre eles. Isso é sintetizável, a síntese pode alterar / otimizar a lógica usada, mas não o comportamento. Mudar muxes para portões etc algumas vezes invertendo sinais para otimizar melhor o design.
Verilog RTL implicando um 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
Operadores combinados bit a bit:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
O nível da porta é um projeto que utiliza as portas lógicas básicas (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Não precisa ser sintetizado ou é o resultado da síntese. Isso tem o nível mais baixo de abstração. são as portas lógicas que você usará no chip, mas faltam informações posicionais.
Nível de portão Verilog (mesma função que acima):
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
);
Combinatória
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] )
);