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

8

Siempre he leído que los retrasos declarados en el código RTL nunca se pueden sintetizar. Están diseñados solo para fines de simulación y las herramientas de síntesis modernas simplemente ignorarán las declaraciones de demoras en el código.

Por ejemplo: x = #10 y; será considerado como x = y; por la herramienta de síntesis.

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

    
pregunta Anand

3 respuestas

14

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

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

Si está utilizando un FPGA, ¿cómo construiría realmente su retraso de 50 ns utilizando los recursos de FPGA disponibles (LUT, Registers, Ram element, ...)? ¿Agregando retrasos de enrutamiento adicionales? Imagina que especificas 1s de retraso! Imposible sin usar TODA la capacidad de enrutamiento de su chip (tal vez no sea suficiente). Su diseño no puede ser ajustado. Lo mismo para un ASIC. Usaría el 80% de la superficie de silicona para agregar un retraso a UNA línea.

La forma en que se supone que debe funcionar es que usa el diseño síncrono y lo implementa usted mismo mediante el uso de contadores u otras técnicas. Pero los retrasos deben ser múltiplos del reloj de ese elemento.

Por lo general, se encuentran cosas como "después de 10 ns" las tesis son retrasos de propagación. Cuando se realiza una simulación ideal en un simulador Verilog, las salidas suceden exactamente cuando cambian las entradas. Esto no es realista y no describe la forma en que funciona el hardware real. Para tener en cuenta eso, puede especificar después de cuánto tiempo se cambiará su salida: usando la declaración de demora.

    
respondido por el Blup1980
5

Trasladar mi respuesta desde SO . Lo que se centra en por qué no es práctico sintetizar retrasos absolutos

Al sintetizar árboles de reloj, la herramienta de síntesis los equilibra agregando retrasos para que todos los nodos reciban el reloj al mismo tiempo, por lo que parece que la herramienta de síntesis tiene la capacidad de agregar retrasos.

Sin embargo, cuando se fabrican los ASIC hay una variación en la velocidad, en un nivel alto, esto se puede ver como Lento, Típico y Rápido. En la práctica, hay cientos de variaciones de estos rincones donde ciertos tipos de dispositivos en el silicio se ejecutan rápido y otros son lentos.

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 búfer en este caso podría ser de 1ns a 30ns.

Para devolver esto a Verilog si #10 era sintetizable, en realidad obtendría 155 + -145, es decir, 10ns a 300ns, si también ha diseñado algo con #20 para que forme 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 su diseño. No obtiene los #10 y #20 exactos que se especificaron.

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

    
respondido por el pre_randomize
3

La única unidad absoluta de tiempo sería desde un reloj externo. ¿De dónde vendría el retraso arbitrario? ¿Qué tipo de lógica digital discreta lo produciría a partir del reloj?

Si desea un retardo de síntesis, deberá utilizar la entrada del reloj externo y una máquina / contador de estado adecuados que contarán para un número específico de ciclos de reloj.

    
respondido por el John

Lea otras preguntas en las etiquetas