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?
verilog
vlsi
system-verilog
asic
Anand
fuente
fuente
Respuestas:
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.
fuente
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
#10
fuera sintetizable, en realidad obtendría 155 + -145, es decir, 10ns a 300ns, si también ha diseñado algo#20
para 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#10
y#20
eso 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.
fuente
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.
fuente