La progettazione RTL (Register Transfer Level) è una fase fondamentale nel processo di progettazione dei circuiti digitali. Definisce e ottimizza la funzionalità logica di un progetto digitale a livello astratto prima di specificare il layout fisico del circuito. Gli ingegneri convertono il funzionamento desiderato di alto livello del proprio progetto in codice software utilizzando un linguaggio di descrizione hardware (HDL) come VHDL o Verilog.
I primi HDL in grado di eseguire la modellazione a livello RTL sono stati sviluppati negli anni '80 e si sono evoluti in sistemi di progettazione completi che consentono agli ingegneri di modellare il flusso di dati nei circuiti elettronici.
Man mano che i progetti diventano sempre più grandi e complessi e la tecnologia di produzione ha consentito nuove modalità di esecuzione di operazioni logiche e matematiche, i metodi di progettazione RTL hanno tenuto il passo. Nel corso del tempo la progettazione RTL è diventata una fase necessaria del processo di progettazione digitale che collega le specifiche del sistema e le fasi di progettazione dei circuiti.
La natura astratta della descrizione RTL consente di eseguire studi rapidi e rapide iterazioni di progettazione per ottenere un progetto accettabile e ottimizzato prima di passare alle fasi più complesse e lunghe del processo di progettazione.
La progettazione RTL è una parte fondamentale del ciclo di progettazione dei circuiti integrati che consente agli ingegneri di ottimizzare i progetti nelle fasi di registrazione, operatore e flusso di dati prima di doversi preoccupare dei componenti fisici e di come collegarli. In questo articolo ci occuperemo dei fondamenti, descriveremo dove si colloca la progettazione RTL nella progettazione di circuiti digitali e spiegheremo il flusso della progettazione RTL. Mostreremo in che modo la progettazione RTL si adatta alla progettazione di chip ASIC (Application-Specific Integrated Circuit) e FPGA (Field-Programmable Gate Array) e riveleremo il futuro della progettazione RTL.
Il termine "register-transfer" si riferisce a come il linguaggio descrive il flusso di dati tra i registri e a come applicare operazioni logiche e operazioni matematiche ai dati. Gli ingegneri utilizzano la progettazione RTL per descrivere i blocchi funzionali, in modo da definire il funzionamento di un componente discreto utilizzato per eseguire una funzione specifica. Ogni blocco funzionale ha una descrizione dei registri nel blocco, indicato come circuito sequenziale, e un circuito combinato che contiene il funzionamento logico del blocco funzionale. Inoltre, utilizzano l'HDL per descrivere in che modo i blocchi funzionali sono collegati per definire il flusso di dati attraverso il circuito.
Il vantaggio della progettazione RTL è la possibilità di prendere sistemi complessi e scomporli in blocchi relativamente semplici, rappresentati da codice HDL. Ecco alcuni principi fondamentali che sono importanti per comprendere come viene utilizzata la progettazione RTL.
Registri
Nella progettazione RTL, un elemento hardware in grado di memorizzare una quantità di dati impostata viene definito registro. Vengono generalmente implementati come flip-flop D. Il valore di un registro può essere letto come input per un'operazione logica o impostato come output di un'operazione. La caratterizzazione del flusso dei dati tra i registri e del modo in cui i dati vengono modificati da un'operazione è lo scopo fondamentale della progettazione RTL.
HDL (Hardware Description Language)
La parte più importante della progettazione RTL è il codice che descrive il funzionamento del circuito. Un HDL è un linguaggio di specifica molto simile a un linguaggio di programmazione, con variabili, chiamate di funzione, espressioni logiche come if-then-else e CASE, espressioni booleane e matematica. Tuttavia, i linguaggi HDL sono specificamente progettati per descrivere il funzionamento e la struttura dei circuiti elettronici, solitamente circuiti integrati. Una cosa che distingue gli HDL dai linguaggi di programmazione è che il concetto del tempo è incluso nel linguaggio in modo che le operazioni possano essere attivate da clock nel circuito.
Ciò si ottiene mediante l'uso di una variabile che definisce il valore del clock digitale nel circuito, come in questo semplice esempio VHDL di un inverter in cui l'output (Q) è impostato sul valore di input (D) quando il valore di clock, CLK, passa da uno stato basso a uno stato alto (fronte di salita):
D <= not Q;
process(clk)
begin
if rising_edge(clk) then
Q <= D;
end if;
end process;
L'HDL più comunemente utilizzato, VHDL (Very High-Speed Integrated Circuit Hardware Description Language), è un linguaggio verboso e fortemente tipizzato con una sintassi che ha un aspetto diverso da quella del linguaggio C. Si tratta dell'HDL preferito per descrivere design di sistemi più complessi.
Un altro HDL comune è Verilog o il suo superset, SystemVerilog. È un linguaggio di programmazione più conciso, debolmente tipizzato e flessibile e la sua sintassi ricorda molto da vicino il linguaggio di programmazione C. Poiché è facile apprendere e creare descrizioni, gli ingegneri preferiscono questo linguaggio all'inizio o quando i loro circuiti non sono così complicati. L'IEEE definisce sia Verilog che VHDL come standard del settore.
Ecco un semplice esempio di gate AND in entrambi i linguaggi. Un gate AND ha due input e un output. Se entrambi gli input sono uguali a 1, l'output è 1. Se non sono uguali o se entrambi sono impostati su 0, l'output è 0.
VHDL descrive un gate AND come:
entity my_and is -- First, you define the entity
port (
inp1: in std_logic; -- The first port
inp2: in std_logic; -- The second port
rst: out std_logic -- The output port
);
end my_and;
architecture blk of my_and is -- Next, define the architecture
begin
process(inp1, inp2) -- With the inputs, do the following
Begin
-- Use a simple if-then-else statement
if((inp1=’1’) and inp1=’1’))then
rst <= ’1’;
else
rst <= ’0’;
End if;
end process
end blk;
Verilog descrive un gate AND come:
module my_and(inp1,inp2,rst); // define the module call
input inp1, inp2; // define inputs and output
output rst;
assign rst = inp1 & inp2; // use the & (and) operator
endmodule
La logica prende il valore in corrispondenza delle due porte di input e imposta l'output su 1 se entrambe le porte sono 1. Questo è un semplice esempio, ma questo tipo di codice può rappresentare ogni entità del sistema e può quindi essere combinato per definire un intero circuito digitale. Gli elementi di base tipici includono sommatori, moltiplicatori, contatori, memoria e macchine di stato. Una volta che il progettista definisce il sistema, il codice viene inviato a un compilatore. Se viene compilato senza errori, l'ingegnere può utilizzare il risultato per testare il sistema.
Operazioni logiche
Esistono due tipi di operazioni nella progettazione RTL. La prima, l'operazione logica, esegue la valutazione e la modifica in bit dei dati memorizzati nei registri. Le operazioni logiche come AND, OR, NOT, XOR e shift vengono create definendo il funzionamento logico nell'HDL. L'esempio riportato sopra illustra come un operatore logico AND possa essere rappresentato nei linguaggi di programmazione VHDL e Verilog. Le operazioni logiche rappresentano i gate logici nell'hardware.
Operazioni aritmetiche
Il secondo tipo di operazioni nella progettazione RTL sono le operazioni aritmetiche. I dati vengono prelevati dai registri e utilizzati per effettuare operazioni di addizione, sottrazione, moltiplicazione e divisione. Sono rappresentati nell'HDL con operatori matematici standard. Ad esempio, per sommare due numeri in VHDL si userebbe la linea:
rst <= inp1 + inp2;
- dove inp1 e inp2 sono due registri di input e rst è assegnato al registro di output. Le operazioni aritmetiche in RTL rappresentano elementi fisici dedicati, quali sommatori, sottrattori, moltiplicatori e divisori.
Azioni sincrone e asincrone
La progettazione RTL può rappresentare il flusso di dati in modo sincrono o asincrono. Per quanto riguarda il modo sincrono, una procedura viene eseguita o attivata dall'input del clock di sistema alla funzione. Per quanto riguarda il modo asincrono, la routine viene eseguita quando un valore di una o più porte di input cambia in un modo specifico. Questo viene implementato controllando i valori di input dell'input del clock o gli input non del clock per verificare se sono stati modificati con un'istruzione IF.
Il moderno flusso di progettazione di circuiti integrati (IC) comporta l'applicazione di una specifica per ciò che il dispositivo deve fare e la sua trasformazione in un chip semiconduttore confezionato. Il livello di astrazione che la progettazione RTL offre consente agli ingegneri di concentrarsi sulle funzioni di livello superiore del sistema senza dover considerare nel dettaglio come implementare fisicamente il progetto.
Il primo passo del flusso di progettazione di un circuito integrato è definire le specifiche del sistema e il design architettonico. Queste informazioni vengono convertite in codice HDL. Gli ingegneri utilizzano questo codice per definire il design funzionale e logico. Una volta completato, il progetto viene convertito in una netlist, che viene quindi utilizzata per creare il design del circuito, seguito dal resto del processo di progettazione.
La rappresentazione astratta che utilizza la progettazione RTL viene eseguita il più presto possibile nel processo di progettazione, prima di dedicare tempo e denaro alla progettazione fisica, alla verifica della progettazione fisica o alla realizzazione effettiva dell'hardware. L'inserimento della fase di progettazione RTL nel processo richiede una buona integrazione tra le specifiche del sistema all'inizio e strumenti affidabili che convertono i registri, le operazioni e il flusso di dati in un circuito, effettiva una volta completata la progettazione RTL.
L'obiettivo del flusso di progettazione RTL è definire e ottimizzare la funzionalità di un circuito integrato, di solito un dispositivo FPGA o ASIC. I progettisti utilizzano il flusso di progettazione RTL per definire prima la logica e il flusso del dispositivo per testare e ottimizzare il sistema, quindi convertire la definizione RTL in una netlist. Le cinque fasi seguenti definiscono la tipica metodologia di progettazione RTL.
1. Sintesi di alto livello
La prima attività nel flusso consiste nel convertire le specifiche del dispositivo in codice HDL con il minor numero possibile di modifiche. Nella maggior parte dei casi, gli ingegneri rappresentano il funzionamento desiderato del dispositivo in un linguaggio di programmazione standard come C o C++. Uno strumento software suddivide quindi gli algoritmi nel modello software nel linguaggio di specifica scelto. Questo passaggio può essere ignorato nei casi in cui si tratti di progetti più semplici, ma nel caso di progetti più complessi questo passaggio può contribuire a risparmiare una considerevole quantità di lavoro.
2. Codifica RTL
Gli ingegneri creano o perfezionano il codice. I progettisti possono accedere ai dettagli di specifici registri, alle operazioni necessarie e al flusso dei dati. Una parte importante di questa fase è l'uso di moduli per descrivere operazioni comuni e parti specifiche del sistema. Una volta creato, il modulo può essere riutilizzato ove applicabile, semplificando notevolmente la complessità del progetto generale.
3. Ottimizzazione di prestazioni, potenza e area (PPA, Performance, Power, Area)
Una volta completata la codifica, inizia il processo di ottimizzazione. L'obiettivo di questa fase è migliorare le prestazioni, ridurre al minimo il consumo energetico e ridurre le dimensioni fisiche del progetto.
Tempi e simulazione logica
Vengono utilizzati strumenti di simulazione per eseguire l'analisi dei tempi e tenere traccia dei valori di registro in tutto il sistema. Il progetto viene controllato a livello RTL per garantire che non vi siano problemi di tempi nel circuito e che le operazioni restituiscano i risultati previsti. È qui che il team di progettazione lavora per eseguire il debug di qualsiasi problema, inclusi problemi di potenza, nel sistema il prima possibile nel processo di progettazione.
Stima della potenza
Ogni dispositivo del sistema consuma una certa quantità di potenza e i progettisti devono conoscere la quantità di potenza consumata e ripetere la progettazione per comprendere la distribuzione della potenza e ridurne al minimo il consumo. Il software Ansys PowerArtist™ è utilizzato da molte società leader nel settore della progettazione di semiconduttori per l'analisi, la profilazione e la riduzione della potenza al livello RTL. Offre un tempo di risposta rapido che consente ai team di progettazione di analizzare nel dettaglio la potenza, identificare il codice RTL inefficiente dal punto di vista del consumo di potenza e contrassegnare ogni passaggio inefficiente nel progetto.
Riduzione al minimo dell'area
Ogni componente all'interno di un circuito integrato occupa spazio fisico, così come il routing tra questi componenti. Sebbene il processo di progettazione RTL non analizzi le dimensioni fisiche dei componenti, rileva quanti componenti sono presenti e la complessità dei collegamenti tra loro.
4. Verifica
Una volta ottimizzato il progetto, è necessario verificarlo per assicurarsi che tutte le specifiche siano soddisfatte. Si tratta di una parte fondamentale del processo di progettazione e tutti i requisiti di progettazione devono essere soddisfatti prima che il progetto possa procedere. Questa operazione viene eseguita con la simulazione RTL o verifica formale.
Simulazione RTL: Per la verifica dinamica del progetto vengono utilizzati vari strumenti software. Vengono applicati i vettori di input e i vettori di output risultanti vengono confrontati con i risultati previsti. Input e output sono solitamente rappresentati come forme d'onda in modo che il progettista possa ispezionare visivamente il funzionamento del sistema.
Verifica formale: Si tratta di un processo di verifica statica che utilizza l'automazione per convertire una serie di aspettative di funzionamento in algoritmi matematici che esplorano l'intero spazio operativo del sistema. I risultati vengono quindi valutati matematicamente per verificare la correttezza.
5. Sintesi RTL
Una volta che il progetto del sistema è stato completamente verificato, viene utilizzata la sintesi RTL per convertire la rappresentazione del codice HDL del progetto RTL in una netlist a livello di gate. Questo è il front-end per strumenti che convertono lo schema risultante in un layout fisico in uno strumento di progettazione automatica elettronica (EDA, Electronic Design Automation). Società come Synopsys hanno creato una varietà di strumenti di sintesi nelle piattaforme EDA.
I circuiti integrati possono essere suddivisi in due classi. I circuiti integrati specifici per applicazioni (ASIC) sono progettati su misura per applicazioni o attività specifiche. Una volta costruito, la logica nel chip non può essere modificata. Esempi di chip ASIC sono moduli di memoria, registratori vocali digitali, processori di segnale ottimizzati, microprocessori, CPU (Central Processing Unit) o persino qualcosa di complesso come un sistema su un chip che include I/O, CPU, memoria e altro ancora.
I chip FPGA (Field Programmable Gate Array) sono chip di semiconduttori che possono essere riprogrammati dopo la produzione. Invece della logica incorporata nella geometria nel chip, gli FPGA dispongono di array di blocchi logici collegati da una griglia di connessione che può anche essere programmata.
La progettazione RTL svolge lo stesso ruolo nella prima parte di entrambi i flussi di progettazione. Una volta completata la sintesi RTL, il flusso di progettazione ASIC richiede agli ingegneri di pianificare e disporre i circuiti fisici, fase nota come pianificazione del posizionamento fisico. In un progetto FPGA, il codice RTL viene convertito direttamente in una netlist che conosce quali blocchi logici sono disponibili e configura tali blocchi nella fase di posizionamento e instradamento.
L'utilizzo di linguaggi di descrizione hardware per rappresentare il funzionamento desiderato di sistemi digitali iniziò negli anni '70 e '80. Ha trovato terreno fertile man mano che l'integrazione su larga scala (VLSI, Very Large Scale Integration) diventava sempre più popolare e ha tenuto il passo con gli ulteriori sviluppi nella progettazione di circuiti integrati. Poiché le dimensioni delle caratteristiche dei circuiti integrati continuano a ridursi, le velocità di clock continuano ad aumentare e in un unico chip viene integrato un maggior numero di funzionalità, i progettisti devono affrontare sfide sempre più impegnative.
La complessità della progettazione non è rallentata e gli strumenti RTL continuano ad affrontare queste sfide. Le società che sviluppano le suite di strumenti che i progettisti utilizzeranno per definire la prossima generazione di circuiti integrati si concentreranno su un paio di aree chiave per migliorare la facilità d'uso, le capacità e la funzionalità del flusso di progettazione RTL. Alcune aree di interesse sono:
La gestione della potenza continua a essere una delle sfide più impegnative nell'intero processo di progettazione dei circuiti integrati e l'ottimizzazione RTL continua a essere il luogo ottimale per comprendere e gestire le cadute di tensione che consumano potenza in un sistema. I miglioramenti apportati a strumenti come il software PowerArtist, che offrono più opzioni, maggiore visibilità e maggiore velocità, aiuteranno i team a superare questa sfida.
Con l'aumento del numero di strumenti disponibili per la progettazione, la simulazione, la verifica e l'approvazione, aumentano anche le funzionalità degli strumenti esistenti. Le società che forniscono questi strumenti e le organizzazioni del settore come IEEE dovranno tenere il passo aggiornando e migliorando gli standard e fornendo strumenti che possano rendere il flusso tra le applicazioni il più semplice possibile.
Molti strumenti usati nel processo di progettazione dei circuiti integrati hanno utilizzato forme di apprendimento automatico (ML) e sistemi esperti per accelerare le fasi del processo, soprattutto nella disposizione fisica dei circuiti. Questo continuerà solo con algoritmi ML migliorati e l'uso di strumenti di intelligenza artificiale (AI) generativa per suggerire le fasi successive più probabili o soluzioni ai problemi.
I fornitori nel settore RTL stanno lavorando sodo per migliorare la capacità degli ingegneri di convertire le specifiche di sistema di alto livello in linguaggi hardware di alto livello con maggiore velocità e con progetti più vicini alla configurazione ottimale.
C'è spazio per un miglioramento notevole della produttività e dell'ottimizzazione quando i gate di una descrizione RTL vengono convertiti in transistor effettivi nella fase di sintesi RTL. Man mano che la geometria fisica entra nel progetto, c'è la possibilità di prendere decisioni informate che semplificheranno i processi a valle della disposizione del circuito.