HDL (Lenguaje de descripción de hardware) es el tipo de lenguaje utilizado, Verilog / VHDL frente a un javascript que no es HDL.
RTL (Nivel de transferencia de registro) es un nivel de abstracción en el que está escribiendo. Los tres niveles a los que me refiero son Comportamiento, RTL, Nivel de puerta.
Comportamiento tiene el nivel más alto de abstracción que describe el comportamiento general y, a menudo, no es sintetizable, pero es útil para la verificación.
RTL describe el hardware que desea al implicar la lógica. Definición de flip-flops, pestillos y cómo se transfieren los datos entre ellos. Esto es sintetizable, la síntesis puede alterar / optimizar la lógica utilizada pero no el comportamiento. Cambiando muxes para puertas, etc. algunas veces invirtiendo señales para optimizar mejor el diseño.
Verilog RTL implica un 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 bitwise combinatorios:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
Nivel de puerta es un diseño que utiliza las puertas lógicas básicas (NAND, NOR, AND, OR, MUX, FLIP-FLOP). No necesita ser sintetizado o es el resultado de la síntesis. Esto tiene el nivel más bajo de abstracción. Son las puertas lógicas que usará en el chip, pero carece de información posicional.
Verilog de nivel de puerta (la misma función que arriba):
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
);
Combinatorio
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] )
);