RTL vs HDL? Cual es la diferencia

24

¿Cuál es la principal diferencia entre RTL y HDL? Para ser sincero, lo busqué / busqué en Google, pero la gente está dividida 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.

Lo quiero
fuente

Respuestas:

18

HDL es el nombre general para todos los lenguajes de definición de hardware (Verilog, VHDL, etc.) de la misma manera que Object Oriented 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 compuerta en el mismo lenguaje HDL o lo que sea necesario para 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 una macro mux que sea compatible con su dispositivo final. Por ejemplo, podría crear una instancia de 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 debe ser la misma. De hecho, hay herramientas que verifican la salida de su síntesis con su código RTL para asegurarse de que la herramienta no se haya optimizado o cambiado accidentalmente 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, usted escribe su descripción del circuito digital como RTL, en lugar de nivel de puerta.

EEToronto
fuente
3
Buena respuesta, solo un refinamiento adicional ... RTL asume un estilo de diseño dado: nube lógica, registro, nube lógica, registro, etc., lo que implica un diseño sincrónico (sincronizado). SI estaba codificando en su hdl para un diseño sin reloj (asíncrono), su herramienta de síntesis podría usar algo más que RTL.
marcador de posición
,, De hecho, hay herramientas que comprueban la salida de su síntesis con su código RTL para asegurarse de que la herramienta no se haya optimizado o cambiado accidentalmente durante la síntesis que provocó una falta de coincidencia. Esto se llama Verificación formal ''. No, no lo es. Esto se llama Verificación de equivalencia lógica o Verificación de equivalencia formal. La verificación formal es más bien un proceso de probar (usando métodos matemáticos, sin bancos de simulación / prueba) que la descripción de su hardware realmente describe el comportamiento que estaba destinado a describir.
Al Bundy
14

HDL (Lenguaje de descripción de hardware) es el tipo de lenguaje utilizado, Verilog / VHDL versus 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 es sintetizable, pero es útil para la verificación.

RTL describe el hardware que desea al implicar lógica. definir 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. Cambiar muxes por 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 combinatorios bit a bit:

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

assign result = n & m ;

El nivel de compuerta es un diseño que utiliza compuertas lógicas base (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.

Nivel de puerta Verilog (misma función que la anterior):

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]     )
);
pre_randomize
fuente
Si uno diseñara un circuito como 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 Xilinx 9536 CPLD usando bloques con reinicio / preajuste asíncrono) ¿eso se consideraría RTL o nivel de puerta?
supercat
RTL, el nivel de la puerta se vería como AND(.a(),.b()) OR(.a(),.b())puertas puramente lógicas conectadas. Tengo la impresión de que RTL es cualquier cosa que intente sintetizar, incluso circuitos combinatorios, ya que todavía está describiendo el cambio en los datos, pero no las puertas lógicas directamente.
pre_randomize
1
Lo siento, no sigo, trataré de aclarar. RTL implica un flip-flop. El nivel de puerta crea una instancia de flip-flop. Para circuitos simples, conectar un grupo de puertas lógicas podría ser simple. pero puede no ser eficiente en el área de energía. Un procesador Atom tiene 47 millones de transistores, que son alrededor de 10 millones de equivalentes NAND2. ¿Desea definir y depurar 10 millones de puertas cableadas a mano? Esta es la ventaja de abstraer un poco, podemos estudiar y depurar el comportamiento deseado.
pre_randomize
1
Supongamos que uno intentara especificar un 74HC74 en un HDL. Hay una variedad de formas en las que uno podría sintetizar un dispositivo de este tipo utilizando una combinación de lógica combinatoria, flops de solo sincronización y pestillos transparentes, pero no puedo imaginar ninguna implementación que no implique condiciones de carrera o cree anomalías de comportamiento que no existe con primitivas de hardware (por ejemplo, si D y Q son altos, un pulso de ejecución en CP o / SD no debería tener ningún efecto, pero en las implementaciones puedo calcular que esos pulsos podrían causar metaestabilidad y / o una falla de salida).
supercat
1
¿Cómo está creando MyLatches una celda base instanciada o un pestillo implícito? Si crea una instancia de la puerta, está a nivel de la puerta. Si lo implica, es RTL. La biblioteca de nivel de puerta tendrá un tiempo asociado para modelar condiciones de carrera / fallas, etc. Las simulaciones RTL se ejecutan con componentes ideales.
pre_randomize