¿Cuál es la principal diferencia entre RTL y HDL? Para ser honesto, lo busqué / lo busqué en Google, pero las personas están divididas en sus opiniones. Recuerdo que uno decía que HDL es el lenguaje informático utilizado para describir un circuito digital y, cuando es sintetizable, se considera RTL.
HDL es el nombre general para todos los lenguajes de definición de hardware (Verilog, VHDL, etc.) de la misma manera que Orientado a objetos puede referirse a C++, Java, etc.
RTL, por otro lado, es una forma de describir un circuito.
Usted escribe su código de nivel RTL en un lenguaje HDL que luego se traduce (mediante herramientas de síntesis) a la descripción del nivel de puerta en el mismo lenguaje HDL o lo que sea que tome su dispositivo/proceso de destino.
Dejame darte un ejemplo. Aquí hay una línea de Verilog (HDL) que describe un mux en RTL:
assign mux_out = (sel) ? din_1 : din_0;
Su herramienta de síntesis puede tomar eso y convertirlo en un conjunto de puertas lógicas, o simplemente en una macro mux compatible con su dispositivo final. Por ejemplo, podría instanciar una macro mux
mux u3 (mux_out, din_1, din_0);
En ambos casos, puede alimentar las mismas entradas al bloque (RTL o nivel de puerta) y su salida debería ser la misma. De hecho, hay herramientas que comparan la salida de su síntesis con su código RTL para asegurarse de que la herramienta no optimizó o cambió accidentalmente algo durante la síntesis que causó una falta de coincidencia. Esto se llama verificación formal.
Por una variedad de razones, interoperabilidad, facilidad de cambio, comprensibilidad, escribe su descripción del circuito digital como RTL, en lugar de nivel de puerta.
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.
El comportamiento tiene la capa más alta de abstracción que describe el comportamiento general y, a menudo, no se puede sintetizar, pero es útil para la verificación.
RTL describe el hardware que desea implicando lógica. definiendo 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 que 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 combinatorios bit a bit:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
El 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 las que usará en el chip, pero carece de información posicional.
Nivel de puerta Verilog (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
);
Combinacional
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] )
);
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 de desplazamiento de carga paralela asíncrono que podría implementarse en un CPLD Xilinx 9536 usando bloques con reinicio/preajuste asíncrono) ¿se consideraría RTL o nivel de puerta?AND(.a(),.b()) OR(.a(),.b())
puertas puramente lógicas conectadas. Tengo la impresión de que RTL es cualquier cosa que pretenda sintetizar, incluso circuitos combinatorios, ya que todavía está describiendo el cambio en los datos, pero no las puertas lógicas directamente.MyLatch
una celda base instanciada o un pestillo implícito? Si crea una instancia de la puerta, es el nivel de la puerta. Si lo implica, es RTL. La biblioteca de nivel de puerta tendrá temporización asociada para modelar condiciones de carrera/fallas, etc. Las simulaciones RTL se ejecutan con componentes ideales.
marcador de posición
al bundy