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

8

Siempre he leído que los retrasos declarados en el código RTL nunca se pueden sintetizar. Están destinados solo para fines de simulación y las herramientas de síntesis modernas simplemente ignorarán las declaraciones de retrasos 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 cuales las declaraciones de retraso en cualquier lenguaje de descripción de hardware (por ejemplo, VHDL, Verilog o Sytem-Verilog) no se pueden sintetizar?

Anand
fuente
1
Esta es una pregunta cruzada ya que se encuentra entre la superposición de SO y ElectronicsSE.
pre_randomize

Respuestas:

14

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

Ahora en su Verilog dice que tiene un retraso de 50ns. 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 FPGA disponibles (LUT, Registros, elemento Ram, ...)? ¿Al agregar demoras de enrutamiento adicionales? imagina que especificas 1s de retraso! Imposible sin usar TODA la capacidad de enrutamiento de su chip (quizás no lo suficiente). Su diseño no se puede ajustar. Lo mismo para un ASIC. Usaría el 80% de la superficie de silicio para agregar un retraso a UNA línea.

La forma en que se supone que funciona es que utiliza un diseño sincrónico e implementa el retraso usted mismo utilizando contadores u otras técnicas. Pero los retrasos tienen que ser múltiplos del reloj de ese elemento.

Por lo general, las cosas como las tesis "después de 10 ns" son demoras en la propagación. Cuando se realiza una simulación ideal en un simulador Verilog, las salidas ocurren 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: utilizando la declaración de retraso.

Blup1980
fuente
2
Notaré que "porque ocuparía todo el chip" no es realmente una razón por la cual algo no se puede sintetizar, es una razón por la cual algo no se puede ajustar o colocar dentro de los límites definidos.
W5VO
@ W5VO Tienes razón. Tenía la intención de mostrar algo absurdo que justificaría encontrar otra manera. Corregido
Blup1980
5

Portando mi respuesta de SO . 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, existe una variación en la velocidad; en un nivel alto, esto puede verse como Lento, Típico y Rápido. En la práctica, hay cientos de variaciones de estas esquinas donde ciertos tipos de dispositivos en el silicio funcionan rápido y otros son lentos.

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

Para devolver esto a Verilog si #10fuera sintetizable, en realidad obtendría 155 + -145, es decir, 10ns a 300ns, si también ha diseñado algo #20para ser parte de la misma interfaz o estructura de control, tendrá un rango de 20ns a 600ns . Por lo tanto, todo esto no es realmente válido contra su diseño. No obtienes el exacto #10y #20eso fue especificado.

Los árboles de reloj están diseñados para limitar los retrasos máximo y mínimo y para que todos los nodos en el árbol de reloj se escalen uno con respecto al otro. 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.

pre_randomize
fuente
3

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

Si desea un retraso sintetizable, necesitará usar la entrada de reloj externo y una máquina / contador de estado apropiado que contará para un número específico de ciclos de reloj.

Juan
fuente
Este pensamiento acaba de pasar por mi mente. ¿Por qué tenemos que confiar en el reloj para generar demoras? ¿Por qué no se puede sintetizar el retraso en un circuito RC simple con Vdd?
Anand
1
La síntesis llena principalmente valores en tablas de búsqueda y elementos de enrutamiento. Supongo que es mucho más difícil crear un circuito RC programable en campo, especialmente uno que no se vea demasiado afectado por la temperatura. Mucho más fácil sincronizar todo en el mismo borde del reloj que esperar tiempos de propagación exactos.
maxy