Perché i ritardi non possono essere sintetizzati in Verilog?


8

Ho sempre letto che i ritardi dichiarati nel codice RTL non possono mai essere sintetizzati. Sono pensati solo a scopo di simulazione e i moderni strumenti di sintesi ignoreranno semplicemente le dichiarazioni di ritardo nel codice.

Ad esempio: x = #10 y;sarà considerato come x = y;dallo strumento di sintesi.

Quali sono i motivi per cui le dichiarazioni di ritardo in qualsiasi linguaggio di descrizione hardware (ad esempio VHDL, Verilog o Sytem-Verilog) non possono essere sintetizzate?


1
Questa è una domanda incrociata che cade tra la sovrapposizione di SO ed ElectronicsSE.
pre_randomizza

Risposte:


14

Sintetizzare significa in qualche modo convertire ciò che hai descritto (in Verilog qui) in hardware reale .

Ora nella tua Verilog dici che hai un ritardo di 50 ns. Ok, ma ora, in termini di hardware, come lo convertiresti in hardware reale?

Se stai usando un FPGA, come realizzeresti effettivamente il tuo ritardo 50ns usando le risorse FPGA disponibili (LUT, Registers, Ram element, ...)? Aggiungendo ulteriori ritardi di routing? immagina di specificare 1s di ritardo! Impossibile senza usare TUTTE le funzionalità di routing del tuo chip (forse non abbastanza). Il tuo design non può essere montato. Lo stesso per un ASIC. Utilizzereste l'80% della superficie del silicio per aggiungere un ritardo a UNA linea.

Il modo in cui dovrebbe funzionare è che usi la progettazione sincrona e implementi il ​​ritardo da solo usando contatori o altre tecniche. Ma i ritardi devono essere multipli dell'orologio di quell'elemento.

Di solito trovi cose come "dopo 10 ns" tesi sono ritardi di propagazione. Quando si esegue una simulazione ideale su un simulatore Verilog, le uscite si verificano esattamente quando cambiano gli ingressi. Questo non è realistico e non descrive il modo in cui funziona l'hardware reale. Per tener conto di ciò puoi specificare dopo quanto tempo il tuo output verrà modificato: usando la dichiarazione di ritardo.


2
Noterò che "perché occuperebbe l'intero chip" non è in realtà un motivo per cui qualcosa non può essere sintetizzato, è un motivo per cui qualcosa non può essere inserito o inserito entro i limiti definiti.
W5VO,

@ W5VO Hai ragione. Doveva mostrare qualcosa di assurdo che avrebbe giustificato trovare un altro modo. Corretto.
Blup1980,

5

Porting della mia risposta da SO . Il che si concentra sul perché non è pratico sintetizzare ritardi assoluti

Quando si sintetizzano alberi di clock, lo strumento di sintesi li bilancia aggiungendo ritardi in modo che tutti i nodi ricevano l'orologio contemporaneamente, quindi sembrerebbe che lo strumento di sintesi abbia la capacità di aggiungere ritardi.

Tuttavia, quando gli ASIC vengono prodotti, la velocità varia, ad un livello elevato può essere considerata lenta, tipica e veloce. In pratica ci sono centinaia di varianti di questi angoli in cui alcuni tipi di dispositivi nel silicio corrono veloci e altri rallentano.

Questi angoli del silicio hanno anche una temperatura nominale, il caso peggiore potrebbe essere + 140 ° C di silicio veloce e -40 ° C di silicio lento. La variazione del ritardo attraverso un buffer in questo caso potrebbe essere compresa tra 1 ns e 30 ns.

Per riportarlo a Verilog, se #10fosse sintetizzabile, avresti effettivamente ottenuto 155 + -145 cioè da 10ns a 300ns, se hai progettato anche qualcosa #20per far parte della stessa interfaccia o struttura di controllo avrà un intervallo da 20ns a 600ns . Pertanto, l'intera cosa non è realmente valida contro il tuo design. Non ottieni l'esatto #10e#20 che sono stati specificati.

Gli alberi dell'orologio sono progettati in modo da limitare i ritardi massimo e minimo e in modo che tutti i nodi dell'albero dell'orologio vengano ridimensionati l'uno rispetto all'altro. Non viene mai data una regola così rigorosa che deve essere # 10ns in quanto ciò è fisicamente impossibile da garantire in un circuito combinatorio.


3

L'unica unità di tempo assoluta verrebbe da un orologio esterno. Da dove verrebbe il ritardo arbitrario - che tipo di equivalente di logica digitale discreta lo produrrebbe dall'orologio?

Se si desidera un ritardo sintetizzabile, sarà necessario utilizzare l'ingresso di clock esterno e una macchina / contatore di stato appropriato che conterà per un numero specifico di cicli di clock.


Questo pensiero mi è appena passato per la testa. Perché dobbiamo fare affidamento sull'orologio per generare ritardo? Perché non è possibile sintetizzare il ritardo in un semplice circuito RC con Vdd?
Anand,

1
La sintesi riempie principalmente i valori nelle tabelle di ricerca e negli elementi di routing. Immagino sia molto più difficile creare un circuito RC programmabile sul campo, in particolare uno che non sia influenzato troppo dalla temperatura. Molto più facile sincronizzare tutto sullo stesso fronte di clock piuttosto che sperare in tempi di propagazione esatti.
Maxy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.