29 votos

¿RTL vs HDL? ¿Cuál es la diferencia?

¿Cuál es la principal diferencia entre RTL y HDL? Para ser honesto, he buscado/buscado 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 que cuando es sintetizable, entonces se considera RTL.

23voto

Barry Kelly Puntos 30330

HDL es el nombre que engloba a todos los lenguajes de definición de hardware (Verilog, VHDL, etc.) del mismo modo que orientado a objetos puede referirse a C++, Java, etc.

Por otro lado, el RTL es una forma de describir un circuito.

Se escribe el código de nivel RTL en un lenguaje HDL que luego se traduce (mediante herramientas de síntesis) a una descripción de nivel de puerta en el mismo lenguaje HDL o lo que sea que tome el dispositivo/proceso de destino.

Déjeme darle un ejemplo. Aquí hay una línea de Verilog (HDL) que describe un mux en RTL:

assign mux_out = (sel) ? din_1 : din_0;

Tu herramienta de síntesis puede tomar eso y convertirlo en un conjunto de puertas lógicas, o simplemente en una macro mux que sea soportada por tu dispositivo final. Por ejemplo, podría instanciar una macro mux

mux u3 (mux_out, din_1, din_0);

En ambos casos puedes alimentar el bloque con las mismas entradas (RTL, o a nivel de puerta) y tu salida debería ser la misma. De hecho, hay herramientas que comprueban la salida de su síntesis contra su código RTL para asegurarse de que la herramienta no optimizó accidentalmente o cambió algo durante la síntesis que causó un desajuste. Esto se llama Verificación Formal.

Por diversas razones, interoperabilidad, facilidad de cambio, comprensibilidad, se escribe la descripción del circuito digital como RTL, en lugar de a nivel de puerta.

3 votos

Buena respuesta, sólo una precisión más... RTL asume un estilo de diseño determinado - nube lógica, registro, nube lógica, registro, etc. que implica un diseño síncrono (con reloj). Si usted codificara en su hdl para un diseño sin reloj (asíncrono) su herramienta de síntesis puede utilizar otra cosa que no sea RTL.

0 votos

De hecho, hay herramientas que comprueban el resultado de la síntesis con el código RTL para asegurarse de que la herramienta no ha optimizado accidentalmente o ha cambiado algo durante la síntesis que haya causado un desajuste. Esto se llama verificación formal". No, no lo es. Se llama Comprobación de Equivalencia Lógica o Comprobación de Equivalencia Formal. La Verificación Formal es más bien el proceso de probar (usando métodos matemáticos, sin bancos de simulación/prueba) que su descripción de hardware realmente describe el comportamiento que se pretendía describir.

15voto

Martin Pearman Puntos 126

HDL (Hardware description Language) es el tipo de lenguaje utilizado, Verilog/VHDL frente a un javascript no HDL.

RTL (Register-transfer level) es un nivel de abstracción en el que se escribe. Los tres niveles a los que me refiero son Behavioural, RTL, Gate-level.

Comportamiento tiene la capa más alta de abstracción que describe el comportamiento global y a menudo no es sintetizable, pero es útil para la verificación.

RTL describe el hardware que se desea mediante la lógica. define los flip-flops, los latches 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. Conmutación de muxes para puertas, etc., algunas veces invirtiendo las señales para optimizar 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 a base de bits :

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

assign result = n & m ;

Nivel de la 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. Es el nivel más bajo de abstracción. Son las puertas lógicas que se utilizarán 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
);

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

0 votos

Si uno tuviera que diseñar 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íncrona que podría implementarse en un CPLD Xilinx 9536 utilizando bloques con reset/preset asíncrono) ¿se consideraría RTL o nivel de puerta?

0 votos

RTL, el nivel de la puerta se vería como AND(.a(),.b()) OR(.a(),.b()) puramente puertas lógicas que se conectan. Tengo la impresión de que RTL es cualquier cosa que se pretende sintetizar, incluso los circuitos combinatorios, ya que todavía está describiendo el cambio de datos, pero no las puertas lógicas directamente.

0 votos

Incluiste "flip-flop" en tu lista de puertas lógicas base; como son una primitiva en algunas topologías, me imaginé que podría ser intencional. Escribir una especificación de comportamiento para cosas que combinan el comportamiento asíncrono y síncrono parece más difícil que especificar el comportamiento en términos de entradas de flip-flop, relojes, pines asíncrono-preset y asíncrono-reset.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X