8 votos

¿Por qué no se pueden sintetizar los retardos en Verilog?

Siempre he leído que los retardos declarados en código RTL nunca se pueden sintetizar. Sólo sirven para simular y las herramientas de síntesis modernas ignoran los retardos declarados en el código.

Por ejemplo: x = #10 y; se considerará x = y; por la herramienta de síntesis.

¿Cuáles son las razones por las que no se pueden sintetizar las declaraciones de retardo en cualquier lenguaje de descripción de hardware (por ejemplo, VHDL, Verilog o Sytem-Verilog)?

1 votos

Se trata de un pregunta cruzada ya que se encuentra entre el solapamiento de SO y ElectronicsSE.

16voto

arclight Puntos 499

Sintetizar significa de alguna manera convertir lo que has descrito (en Verilog aquí) en hardware real .

Ahora en tu Verilog dices que tienes un retardo de 50ns. Vale, pero ahora, en términos de hardware, ¿cómo convertirías esto en hardware real?

Si estás usando una FPGA, ¿cómo construirías realmente tu retardo de 50ns usando los recursos disponibles de la FPGA (LUT, Registros, elemento Ram, ...)? Imagina que especificas un retardo de 1s. Imposible sin usar TODA la capacidad de enrutamiento de tu chip (quizás no la suficiente). Tu diseño no se puede adaptar. Lo mismo para un ASIC. Utilizarías el 80% de la superficie de silicio para añadir un retardo a UNA línea.

La forma en que se supone que funciona es que se utiliza el diseño síncrono y se implementa el retraso por sí mismo utilizando contadores u otras técnicas. Pero los retardos tienen que ser múltiplos del reloj de ese elemento.

Normalmente se encuentran cosas como "después de 10 ns", que son retardos de propagación. Al hacer un ideal en un simulador Verilog, las salidas se producen exactamente cuando cambian las entradas. Esto no es realista y no describe el funcionamiento del hardware real. Para tener en cuenta que se puede especificar después de cuánto tiempo su salida se cambiará: el uso de la declaración de retardo.

2 votos

Observaré que "porque ocuparía todo el chip" no es realmente una razón de por qué algo no se puede sintetizar, es una razón de por qué algo no se puede equipado o colocado dentro de los límites definidos.

0 votos

@W5VO Tienes razón. Pretendía mostrar algo absurdo que justificara buscar otro camino. Corregido.

6voto

Martin Pearman Puntos 126

Portar mi respuesta de SO . Que se centra en por qué es poco práctico sintetizar retrasos absolutos

Al sintetizar árboles de reloj, la herramienta de síntesis los equilibra añadiendo retardos para que todos los nodos reciban el reloj al mismo tiempo, por lo que parece que la herramienta de síntesis sí tiene capacidad para añadir retardos.

Sin embargo, cuando se fabrican los ASIC, la velocidad varía. En términos generales, se puede hablar de velocidad lenta, típica y rápida. En la práctica, hay cientos de variaciones de estas curvas, en las que ciertos tipos de dispositivos del silicio funcionan rápido y otros lento.

Estas esquinas del silicio también tienen una clasificación de temperatura, en el peor de los casos puede ser +140C Silicio rápido y -40C Silicio lento. La variación del retardo a través de un buffer en este caso podría ser de 1ns a digamos 30ns.

Para volver a Verilog si #10 era sintetizable en realidad obtendrías 155+-145, es decir, de 10ns a 300ns, si también has diseñado algo con #20 para formar parte de la misma interfaz o estructura de control va a tener un rango de 20ns a 600ns. Por lo tanto todo esto no es realmente válido contra tu diseño. Usted no consigue el exacto #10 y #20 que se especificaron.

Los árboles de reloj están diseñados para limitar los retrasos máximo y mínimo y para que todos los nodos del árbol de reloj se escalen entre sí. Nunca se les da una regla tan estricta que deba ser #10, ya que esto es físicamente imposible de garantizar en un circuito combinatorio.

3voto

Louis Munro Puntos 58

La única unidad de tiempo absoluta sería la de un reloj externo. De dónde procedería el retardo arbitrario? ¿Qué tipo de equivalente lógico digital discreto lo produciría a partir del reloj?

Si quieres un retardo sintetizable entonces tendrás que utilizar la entrada de reloj externo y una máquina de estados/contador apropiado que cuente para un número específico de ciclos de reloj.

0 votos

Esta idea se me acaba de pasar por la cabeza. ¿Por qué tenemos que depender del reloj para generar retardo? ¿Por qué no se puede sintetizar el retardo en un simple circuito RC con Vdd?

1 votos

La síntesis rellena principalmente valores en tablas de consulta y elementos de enrutamiento. Supongo que es mucho más difícil crear un circuito RC programable sobre el terreno, especialmente uno al que no afecte demasiado la temperatura. Es mucho más fácil sincronizar todo en el mismo flanco de reloj que esperar tiempos de propagación exactos.

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