Differenza tra RTL e verilog comportamentale


10

Qualcuno può dirmi qual è la differenza tra RTL e codice Verilog comportamentale? Esiste una netta demarcazione netta tra i disegni a questi due livelli?

Risposte:


5

Il codice comportamentale è di livello superiore e di solito non può essere sintetizzato. Costrutti come loop, ritardi e dichiarazioni "iniziali" sono comportamentali.

Il codice RTL è di livello inferiore e deve essere sintetizzato. Definisce un circuito come una combinazione di registri interconnessi e le operazioni eseguite sui segnali tra tali registri.

Tratto da Yahoo Answers e trovato immediatamente con Google!


1
i loop possono essere utilizzati nel codice rtl a condizione che il numero di iterazioni sia limitato. Alcuni strumenti supportano anche l'uso di blocchi intital per specificare le condizioni di accensione.
Peter Green,

Questa domanda / risposta è stata in realtà la prima risposta che Google mi ha dato
Drewster,

3

Il codice "Registra livello di trasferimento" è il codice descritto in termini di registri e logica combinatoria che si trova tra di loro e destinato ad essere utilizzato come input per uno strumento di sintesi. Il codice si attacca a un sottoinsieme sintetizzabile [1] della lingua. Non ci sono ritardi espliciti, tutti i tempi sono in termini di bordi dell'orologio. Le strutture che rappresentano i fermi a livello innescato sono generalmente evitate. I registri sono in genere esclusi da un numero limitato di orologi i cui dettagli possono essere forniti all'analizzatore di temporizzazione. La logica combinatoria di solito si prevede che si stabilizzi all'interno di un singolo ciclo di clock che ne limita la complessità. È di livello superiore rispetto a un modello a livello di gate, ma definisce comunque il valore che ogni registro ha su ogni ciclo di clock.

Il codice "comportamentale" è generalmente un codice che descrive il comportamento ad un livello superiore per l'uso in una simulazione, ma non intende essere sintetizzabile. Può essere utilizzato per descrivere l'ambiente che circonda il progetto in una simulazione. Può essere utilizzato come fase iniziale di un progetto per ottenere il progetto complessivo prima che venga superato il progetto RTL dettagliato dei singoli moduli.

[1] Il sottoinsieme esatto consentito varia tra gli strumenti di sintesi.
[2] Se non si risolve in un singolo ciclo di quanto la simulazione e la sintesi possano dare risultati diversi e l'analizzatore di temporizzazione mostrerà una violazione a meno che non venga esplicitamente detto di non farlo.


2

Una definizione più generalizzata.

Codice comportamentale: per definizione definisce il comportamento di un componente digitale. Non fornisce informazioni su come verrà implementato nell'attuale HW (sintesi). Non fornirà informazioni su come verranno implementati i registri e le porte per eseguire le operazioni richieste. È più come scrivere un algoritmo o FSM in C.

RTL: è la forma più precisa di un componente digitale. Fornisce informazioni su come il codice verrà implementato come effettivo HW (dopo la sintesi). Inoltre fornisce informazioni su come verranno trasferiti i dati tra i registri e le porte.


1

È la stessa lingua, ma vengono utilizzati stili diversi. Con l'esperienza puoi distinguerli rapidamente, ecco alcuni tratti di ciascuno:

Il codice verilog comportamentale generalmente assomiglia più a un programma per computer sequenziale che va dall'alto verso il basso all'interno di un initial beginblocco. Potresti scoprire che non ci sono porte di input / output definite nei moduli comportamentali di livello superiore, dal momento che l'output potrebbe essere per le strutture del simulatore, come la console $display()o il filesystem con $openo il dumper della forma d'onda con $dumpfilee $dumpvars. Osserva i ritardi tra le istruzioni implementate utilizzando tempi di simulazione lunghi, ad es. #4000E invocando attività wishbone_master.checked_read(addr, value). Per questi costrutti di livello superiore non è ovvio quale potrebbe essere / potrebbe essere l'equivalente della tecnologia sintetizzata.

Verilog per sintesi ha sempre porte di input / output, poiché senza porte connesse il modulo non ha effetti collaterali e può essere eliminato [1]. Ritardi probabilmente implementati contando i cicli di un determinato orologio. Nota alcune funzioni del sistema Verilog, ad esempio, $clog2(PARAMETER)possono essere consentite nel codice per la sintesi, quindi la presenza di $functionnon è una garanzia in entrambi i modi. Il codice per la sintesi tende a comprendere molti "processi" indipendenti ciascuno con un elenco di sensibilità. Alcune tecnologie consentono initial beginblocchi per l'inizializzazione della memoria, quindi non è una garanzia.

Alla fine il progettista conosce lo scopo del codice che scrive e lo invocherà appropriatamente con il set di strumenti di sintesi o in un simulatore.

[1] ad eccezione di determinati blocchi IP che possono effettuare connessioni back-door a strutture di chip interne, ad esempio JTAG

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.