L'uso di plis nei dispositivi moderni. Portale di notizie e analisi "tempo dell'elettronica" Esempi di progettazione di grandi progetti FPGA

Immagina che il processore, invece di eseguire un insieme specifico di istruzioni, venga ricostruito per ogni programma e trasformi l'algoritmo direttamente in hardware. Ecco come funzionano gli FPG. Nell'articolo di oggi, spiegherò come ciò sia possibile e ti presenterò vari metodi di progettazione FPGA.

Per iniziare, devi capire un po 'la logica digitale di come funzionano gli ASIC, ma è molto difficile e costoso iniziare con loro, ed è meglio iniziare invece con gli FPGA.

Cos'è l'FPGA?

FPGA sta per array di gate programmabili sul campo (array di gate programmabili dall'utente, FPGA). In un caso più generale, sono chiamati FPGA - circuiti integrati logici programmabili.

Con l'aiuto di FPGA, puoi, nel vero senso della parola, progettare microcircuiti digitali stando seduto a casa con una scheda di debug economica sul tavolo e software per sviluppatori per diverse migliaia di rubli verdi. Ma ci sono anche opzioni gratuite. Nota: è progettare, non programmare, perché in uscita otterremo un circuito digitale fisico che esegue un certo algoritmo a livello hardware, e non un prog per il processore.

Funziona come segue. C'è un circuito stampato già pronto con una serie di interfacce che sono collegate a un chip FPGA installato sulla scheda, qualcosa come una fantastica scheda per data center o questa scheda di debug per l'addestramento.

Fino a quando non configuriamo l'FPGA, semplicemente non c'è logica all'interno del chip per elaborare i dati dalle interfacce e quindi, ovviamente, non funzionerà nulla. Ma come risultato del progetto, verrà creato il firmware che, dopo essere stato caricato nell'FPGA, creerà il circuito digitale di cui abbiamo bisogno. In questo modo è possibile creare un controller Ethernet 100G che riceverà ed elaborerà i pacchetti di rete.

Una caratteristica importante di FPGA è la capacità di riconfigurare. Diciamo che ora abbiamo bisogno di un controller Ethernet 100G e in una settimana la stessa scheda può essere utilizzata per implementare quattro interfacce Ethernet 25G indipendenti.

Ci sono due leader nel produttore di chip FPGA sul mercato: i noti Intel e Xilinx. Controllano il 58 e il 42% del mercato. I fondatori di Xilinx hanno inventato il loro primo chip FPGA nel 1985. Intel è entrata nel mercato abbastanza di recente, nel 2015, assorbendo Altera, fondata contemporaneamente a Xilinx. Le tecnologie Altera e Xilinx sono simili sotto molti aspetti, così come gli ambienti di sviluppo. Il più delle volte ho lavorato con i prodotti Xilinx, quindi non essere sorpreso di vederla costantemente menzionata nell'articolo.

Gli FPGA sono ampiamente utilizzati in vari campi: elettronica di consumo, apparecchiature per le telecomunicazioni, schede acceleratrici per l'utilizzo nei data center, robotica, prototipazione ASIC. Esaminerò un paio di esempi di seguito.

Esamineremo anche la tecnologia che fornisce la riconfigurazione dell'hardware, familiarizzeremo con il processo di progettazione e analizzeremo un semplice esempio di implementazione di un contatore hardware nel linguaggio Verilog. Se disponi di una scheda di debug FPGA, dovresti essere in grado di replicarla da solo. Se non è presente una scheda, puoi comunque familiarizzare con Verilog simulando il funzionamento del circuito sul tuo computer.

Come funziona un FPGA

Il chip FPGA è lo stesso chip ASIC personalizzato, costituito dagli stessi transistor utilizzati per assemblare flip-flop, registri, multiplexer e altri elementi logici per circuiti convenzionali. Ovviamente è impossibile modificare l'ordine di connessione di questi transistor. Ma dal punto di vista architettonico, il microcircuito è costruito in modo così astuto da poter modificare la commutazione dei segnali tra blocchi più grandi: sono chiamati CLB - blocchi logici programmabili.

È inoltre possibile modificare la funzione logica eseguita dal CLB. Ciò è possibile grazie al fatto che l'intero chip è permeato di celle di memoria di configurazione RAM statica. Ogni bit di questa memoria controlla una sorta di chiave di commutazione del segnale o fa parte della tabella di verità di una funzione logica implementata dal CLB.

Poiché la memoria di configurazione è costruita utilizzando la tecnologia Static RAM, in primo luogo, quando l'FPGA è acceso, il microcircuito deve essere configurato e, in secondo luogo, il microcircuito può essere riconfigurato quasi un numero infinito di volte.

Struttura del chip 2D molto semplificata senza memoria di configurazione

I CLB risiedono in una matrice di commutazione che definisce le connessioni per gli ingressi e le uscite dei CLB.

Diagramma della matrice di commutazione

Ad ogni intersezione di conduttori sono presenti sei tasti di commutazione controllati dalle proprie celle di memoria di configurazione. Aprendo alcuni e chiudendo altri, è possibile fornire diverse commutazioni di segnali tra i CLB.

CLB

CLB consiste molto semplicemente in un blocco che definisce una funzione booleana di diversi argomenti (è chiamata tabella di ricerca - Look Up Table, LUT) e un trigger (flip-flop, FF). Nei moderni FPGA, la LUT ha sei ingressi, ma la figura ne mostra tre per semplicità. L'uscita LUT viene inviata all'uscita CLB in modo asincrono (direttamente) o sincrono (tramite un flip-flop FF eseguito al clock di sistema).

Principio di implementazione LUT

È interessante osservare il principio dell'implementazione della LUT. Supponiamo di avere una funzione booleana y = (a & b) | ~ c. La sua rappresentazione schematica e la tavola di verità sono mostrate in figura. La funzione ha tre argomenti, quindi accetta 2^3 = 8 valori. Ciascuno di essi corrisponde alla propria combinazione di segnali di ingresso. Questi valori vengono calcolati dal programma di sviluppo del firmware FPGA e scritti in speciali celle di memoria di configurazione.

Il valore di ciascuna delle celle viene inviato al relativo input del multiplexer di output LUT e gli argomenti di input della funzione booleana vengono utilizzati per selezionare l'uno o l'altro valore della funzione. CLB è la risorsa hardware FPGA più importante. La quantità di CLB nei moderni chip FPGA può variare e dipende dal tipo e dalla capacità del chip. Xilinx ha cristalli CLB che vanno da circa quattromila a tre milioni.

Oltre al CLB, ci sono una serie di importanti risorse hardware all'interno dell'FPGA. Ad esempio, blocchi di moltiplicazione-accumulo hardware o blocchi DSP. Ciascuno di essi può eseguire la moltiplicazione e l'addizione di numeri a 18 bit ogni ciclo. Nei cristalli di fascia alta, il numero di blocchi DSP può superare i 6000.

Un'altra risorsa sono i blocchi memoria interna(Blocca RAM, BRAM). Ogni blocco può memorizzare 2 KB. La capacità totale di tale memoria, a seconda del cristallo, può raggiungere da 20 KB a 20 MB. Come i CLB, i blocchi BRAM e DSP sono collegati da una matrice di commutazione e permeano l'intero chip. Collegando i blocchi CLB, DSP e BRAM, è possibile ottenere schemi di elaborazione dei dati molto efficienti.

Vantaggi degli FPGA

Il primo chip FPGA creato da Xilinx nel 1985 conteneva solo 64 CLB. A quel tempo, l'integrazione dei transistor sui chip era molto inferiore a quella attuale e nei dispositivi digitali venivano spesso utilizzati chip "a logica libera". C'erano chip separati per registri, contatori, multiplexer, moltiplicatori. Sotto dispositivo specificoè stato creato un circuito stampato su cui sono stati installati questi microcircuiti a bassa integrazione.

L'uso di FPGA ha permesso di abbandonare questo approccio. Anche un FPGA da 64 CLB consente di risparmiare spazio sul circuito stampato e la disponibilità di riconfigurazione ha aggiunto la possibilità di aggiornare la funzionalità dei dispositivi dopo la produzione durante il funzionamento, come si dice "sul campo" (da cui il nome - gate array programmabile sul campo ).

Dato che qualsiasi circuito digitale hardware può essere creato all'interno dell'FPGA (l'importante è che ci siano risorse sufficienti), una delle applicazioni importanti degli FPGA è la prototipazione dei chip ASIC.

Lo sviluppo di ASIC è molto complesso e costoso, il costo dell'errore è molto elevato e la questione della logica di test è fondamentale. Pertanto, una delle fasi di sviluppo, anche prima dell'inizio dei lavori sulla topologia fisica del circuito, era la sua prototipazione su uno o più chip FPGA.

Per lo sviluppo di ASIC, vengono rilasciate schede speciali che contengono molti FPGA interconnessi. Il prototipo del microchip funziona a frequenze molto più basse (forse decine di megahertz), ma consente di risparmiare sull'identificazione di problemi e bug.

Tuttavia, a mio parere, ci sono applicazioni più interessanti degli FPGA. La struttura flessibile dell'FPGA consente l'implementazione di circuiti hardware per l'elaborazione dei dati ad alta velocità e parallela con la possibilità di modificare l'algoritmo.


Confronto di piattaforme hardware

Pensiamo alla differenza fondamentale tra CPU, GPU, FPGA e ASIC. La CPU è universale, puoi eseguire qualsiasi algoritmo su di essa, è la più flessibile ed è la più facile da usare grazie all'enorme numero di linguaggi di programmazione e ambienti di sviluppo.

Allo stesso tempo, a causa della versatilità e dell'esecuzione sequenziale delle istruzioni della CPU, le prestazioni diminuiscono e aumenta il consumo energetico del circuito. Ciò accade perché per ogni operazione aritmetica utile, la CPU esegue molte operazioni aggiuntive relative alla lettura di istruzioni, allo spostamento di dati tra registri e cache e altri gesti.

Dall'altro lato c'è l'ASIC. Su questa piattaforma, l'algoritmo richiesto è implementato nell'hardware grazie alla connessione diretta dei transistor, tutte le operazioni sono legate solo all'esecuzione dell'algoritmo e non è possibile modificarlo. Da qui le massime prestazioni e il minor consumo energetico della piattaforma. Ma è impossibile riprogrammare l'ASIC.

A destra della CPU c'è la GPU. Inizialmente, questi chip erano progettati per l'elaborazione grafica, ma ora vengono utilizzati anche per il mining computazionale. scopo generale. Sono costituiti da migliaia di piccoli core di elaborazione ed eseguono operazioni parallele su una serie di dati.

Se l'algoritmo può essere parallelizzato, sulla GPU sarà possibile ottenere un'accelerazione significativa rispetto alla CPU. D'altra parte, gli algoritmi sequenziali saranno implementati peggio, quindi la piattaforma è meno flessibile della CPU. Inoltre, per lo sviluppo di GPU, devi avere abilità speciali, conoscere OpenCL o CUDA.

Infine, FPGA. Questa piattaforma combina l'efficienza degli ASIC con la possibilità di modificare il programma. Gli FPGA non sono universali, ma esiste una classe di algoritmi e attività che mostreranno prestazioni migliori su di essi rispetto a CPU e persino GPU. La complessità dello sviluppo per FPGA è maggiore, ma i nuovi strumenti di sviluppo riducono questo divario.

Il vantaggio decisivo dell'FPGA è la capacità di elaborare i dati alla velocità del loro arrivo con un ritardo di risposta minimo. Ad esempio, immagina un router di rete intelligente con un numero elevato di porte: quando un pacchetto Ethernet arriva su una delle sue porte, è necessario verificare molte regole prima di scegliere una porta di uscita. Potrebbe essere necessario modificare alcuni campi nel pacchetto o aggiungerne di nuovi.

L'utilizzo di FPGA consente di risolvere istantaneamente questo problema: i byte del pacchetto hanno appena iniziato ad arrivare al microcircuito dall'interfaccia di rete e la sua intestazione è già in fase di analisi. L'uso di processori qui può rallentare in modo significativo la velocità di elaborazione del traffico di rete. È chiaro che è possibile creare un chip ASIC personalizzato per router che funzioni in modo più efficiente, ma cosa succede se le regole per l'elaborazione dei pacchetti devono cambiare? Solo FPGA può aiutarti a ottenere la flessibilità richiesta unita a prestazioni elevate.

Pertanto, gli FPGA vengono utilizzati laddove sono necessarie elevate prestazioni di elaborazione, tempi di risposta più rapidi e basso consumo energetico.

FPGA nel cloud

Nel cloud computing, gli FPGA vengono utilizzati per il conteggio rapido, l'accelerazione del traffico di rete e l'accesso agli array di dati. Ciò include anche l'uso di FPGA per il trading ad alta frequenza sugli scambi. Le schede FPGA sono inserite nei server con PCI Express e un'interfaccia di rete ottica prodotta da Intel (Altera) o Xilinx.

Gli FPGA sono ottimi per algoritmi crittografici, confronto di sequenze di DNA e compiti scientifici come la dinamica molecolare. Microsoft utilizza da tempo gli FPGA per accelerare il servizio di ricerca di Bing, nonché per organizzare il Software Defined Networking all'interno del cloud di Azure.

Il boom del machine learning non ha scavalcato neanche l'FPGA. Xilinx e Intel offrono strumenti basati su FPGA per lavorare con reti neurali profonde. Consentono di ottenere firmware FPGA che implementa una particolare rete direttamente da framework come Caffe e TensorFlow.

Inoltre, puoi provare tutto questo senza uscire di casa e utilizzando i servizi cloud. Ad esempio, su Amazon puoi noleggiare macchina virtuale con accesso alla scheda FPGA e a qualsiasi strumento di sviluppo, incluso l'apprendimento automatico.

FPGA al limite

Cos'altro è interessante fare su FPGA? Perché non lo fanno e basta! Robotica, veicoli senza pilota, droni, strumenti scientifici, attrezzature mediche, custom dispositivi mobili, telecamere di sicurezza intelligenti e così via.

Tradizionalmente, gli FPGA venivano utilizzati per l'elaborazione digitale di segnali unidimensionali (e facevano concorrenza ai processori DSP) in dispositivi radar, ricetrasmettitori di segnali radio. Con la crescente integrazione dei chip e l'aumento delle prestazioni, le piattaforme FPGA sono diventate sempre più utilizzate per il calcolo ad alte prestazioni, ad esempio per l'elaborazione di segnali bidimensionali "ai margini del cloud" (edge ​​computing).

Questo concetto è più facilmente comprensibile utilizzando l'esempio di una telecamera per l'analisi del traffico con riconoscimento della targa. Puoi prendere una videocamera con la possibilità di trasmettere video su Ethernet ed elaborare lo streaming su un server remoto. Con l'aumentare del numero di telecamere, aumenterà anche il carico sulla rete, che può portare a guasti del sistema.

Meglio invece implementare il riconoscimento delle targhe su un calcolatore installato direttamente nel corpo della telecamera e trasferire le targhe nel cloud in formato testo. Per fare ciò, puoi persino prendere FPGA a bassa potenza relativamente economici per cavartela con una batteria. Allo stesso tempo, rimane possibile modificare la logica dell'FPGA, ad esempio, quando si modifica lo standard per le targhe.

Per quanto riguarda la robotica e i droni, in quest'area è particolarmente importante soddisfare due condizioni: alte prestazioni e basso consumo energetico. La piattaforma FPGA si adatta perfettamente e può essere utilizzata, in particolare, per creare controllori di volo per droni. Sono già stati realizzati UAV in grado di prendere decisioni al volo.

Sviluppo del progetto FPGA

Esistono diversi livelli di design: basso, blocco e alto. Il livello basso prevede l'utilizzo di linguaggi come Verilog o VHDL, dove si controlla lo sviluppo a livello di trasferimento di registro (RTL). In questo caso si formano registri, come in un processore, e si definiscono funzioni logiche che modificano i dati tra di loro.

I circuiti FPGA funzionano sempre a determinate velocità di clock (in genere 100-300 MHz) e, a livello RTL, si definisce il comportamento del circuito all'interno di un clock di sistema. Questo lavoro scrupoloso si traduce nei circuiti più efficienti in termini di prestazioni, consumo di risorse del die FPGA e consumo energetico. Ma qui sono richieste serie abilità nei circuiti e il processo non è veloce con loro.

A livello di blocco, stai sostanzialmente collegando blocchi di grandi dimensioni già pronti che eseguono determinate funzioni per ottenere la funzionalità del sistema su chip (sistema su chip) di cui hai bisogno.

Ad un alto livello di progettazione, non avrai più il controllo dei dati ad ogni ciclo di clock, ma ti concentrerai sull'algoritmo. Esistono compilatori o traduttori da C e C++ al livello RTL, come Vivado HLS. È abbastanza intelligente e ti consente di tradurre un'ampia classe di algoritmi a livello hardware.

Il vantaggio principale di questo approccio rispetto ai linguaggi RTL è la velocità di sviluppo e in particolare il test dell'algoritmo: il codice C++ può essere eseguito e verificato su un computer e sarà molto più veloce del test delle modifiche dell'algoritmo a livello RTL. Ovviamente dovrai pagare per comodità: il circuito potrebbe non essere così veloce e richiedere più risorse hardware.

Spesso siamo pronti a pagare questo prezzo: se usi correttamente il traduttore, l'efficienza non ne risentirà molto e ci sono risorse sufficienti nei moderni FPGA. Nel nostro mondo con un indicatore critico del time to market, questo risulta essere giustificato.

Spesso tutti e tre gli stili di sviluppo devono essere combinati in un unico progetto. Diciamo che dobbiamo creare un dispositivo che potremmo integrare in un robot e dargli la capacità di riconoscere gli oggetti in un flusso video, ad esempio i segnali stradali. Prendiamo un chip sensore video e colleghiamolo direttamente all'FPGA. Per il debug possiamo usare Monitor HDMI, anch'esso collegato all'FPGA.

I frame dalla fotocamera verranno trasferiti all'FPGA tramite un'interfaccia predeterminata dal produttore del sensore (l'USB non funziona qui), elaborati e visualizzati sul monitor. Per elaborare i frame, è necessario un framebuffer, che di solito si trova all'esterno Memoria DDR installato sul PCB accanto al chip FPGA.


Tipico diagramma a blocchi di progettazione FPGA

Se il produttore del sensore video non fornisce l'interfaccia IP per il nostro chip FPGA, dovremo scriverlo noi stessi nel linguaggio RTL, contando clock, bit e byte in conformità con le specifiche del protocollo di trasferimento dati. Preprocesso, controller DDR e blocchi IP HDMI, molto probabilmente prenderemo quelli già pronti e collegheremo semplicemente le loro interfacce. E il blocco HLS, che esegue la ricerca e l'elaborazione dei dati in arrivo, possiamo scrivere in C ++ e trasmettere usando Vivado HLS.

Molto probabilmente, abbiamo ancora bisogno di una sorta di rilevatore di segnali stradali e libreria di classificazione già pronti, adattati per l'uso in FPGA. In questo esempio, ovviamente, fornisco un diagramma di flusso di progettazione notevolmente semplificato, ma riflette correttamente la logica del lavoro.

Considera il percorso di progettazione dalla scrittura del codice RTL al caricamento di un file di configurazione nell'FPGA.

Percorso di progettazione

Quindi, scrivi codice RTL che implementa lo schema di cui hai bisogno. Prima di testarlo su hardware reale, è necessario assicurarsi che sia corretto e risolva correttamente il problema richiesto. Per questo, la modellazione RTL viene utilizzata in un simulatore su un computer.

Prendi il tuo circuito, finora rappresentato solo in codice RTL, e lo metti su un banco virtuale, dove applichi sequenze di segnali digitali agli ingressi del circuito, registri diagrammi di uscita, dipendenze temporali dei segnali di uscita e confronti con i risultati attesi . Di solito trovi errori e torni a scrivere RTL.

Inoltre, il codice logicamente verificato viene inviato all'ingresso del programma del sintetizzatore. Converte la descrizione testuale del circuito in un elenco collegato di elementi digitali dalla libreria disponibile per il chip FPGA specificato. Questo elenco mostrerà elementi come LUT, trigger e collegamenti tra di loro. In questa fase, gli elementi non sono ancora legati a specifiche risorse hardware. Per fare ciò, è necessario imporre vincoli (vincoli) al circuito, in particolare specificare quali pin I / O fisici del chip FPGA sono collegati agli ingressi e alle uscite logiche del circuito.

Questi vincoli richiedono anche di specificare a quali velocità di clock deve funzionare il circuito. L'output del sintetizzatore e il file di vincolo vengono dati al processore di implementazione, che gestisce, tra le altre cose, Place e Route.

Il processo Place collega ogni elemento ancora impersonale della netlist a un elemento specifico all'interno del chip FPGA. Successivamente, inizia a funzionare il processo Route, che cerca di trovare la connessione ottimale di questi elementi per la configurazione corrispondente della matrice di commutazione FPGA.

Place e Route operano in base ai vincoli che abbiamo imposto al circuito: pin I/O e velocità di clock. Il periodo di clock ha un effetto molto forte sull'Implementazione: non deve essere inferiore al tempo di ritardo sulle porte logiche nel circuito critico tra due flip-flop successivi.

Spesso questo requisito non può essere soddisfatto immediatamente, quindi è necessario tornare alla fase iniziale e modificare il codice RTL: ad esempio, provare a ridurre la logica nella catena critica. Dopo che l'implementazione è stata completata con successo, sappiamo quali elementi sono dove e come sono collegati.

Solo dopo inizia il processo di creazione di un file binario del firmware FPGA. Resta da caricarlo nell'hardware reale e verificare se funziona come previsto. Se si verificano problemi in questa fase, significa che la modellazione era incompleta e in questa fase non sono stati eliminati tutti gli errori e le carenze.

È possibile tornare alla fase di simulazione e simulare una situazione anomala e, se ciò non funziona, in casi estremi viene fornito un meccanismo di debug direttamente nell'hardware in esecuzione. È possibile specificare quali segnali si desidera tracciare nel tempo e l'ambiente di sviluppo genererà un circuito analizzatore logico aggiuntivo che viene posizionato sul chip accanto al circuito di progettazione, si collega ai segnali di interesse e memorizza i loro valori nel tempo. I diagrammi temporali salvati dei segnali desiderati possono essere scaricati su un computer e analizzati.

IMPLEMENTAZIONE DEL PROGETTO FPGA

Dopo aver elaborato il circuito logico utilizzando la modellazione funzionale, è necessario posizionarlo su un chip. Quindi, simula il circuito tenendo conto dei ritardi effettivi degli elementi ottenuti dopo aver posizionato il circuito su un chip. Se necessario, correggere le soluzioni risultanti. Successivamente, il circuito viene caricato nell'FPGA e testato sul supporto.

Riso. 82. Fasi di progettazione di un dispositivo digitale su FPGA

Le fasi principali della progettazione su un FPGA (dalle lezioni):

    Un diagramma del dispositivo viene sviluppato e inserito in XILINX.

    Viene eseguita l'IMPLEMENTAZIONE (traduzione, formazione del circuito mediante l'estrazione di elementi di libreria, ottimizzazione, posizionamento su un chip).

    Programmazione.

  1. memoria associativa. Organizzazione, metodo di campionamento, differenze dalla memoria indirizzi.

Accesso associativo implementa una ricerca di informazioni per qualche attributo e non per la sua posizione in memoria (indirizzo o posizione in coda). Nella versione più completa, tutte le parole memorizzate vengono verificate contemporaneamente per verificarne la conformità con una funzione, ad esempio per abbinare determinati campi di parole (tag - dalla parola inglese tag) con una caratteristica specificata dalla parola di input (indirizzo tag) . L'output riceve parole che soddisfano l'attributo. La disciplina dell'emissione delle parole, se più parole soddisfano il tag, così come la disciplina della scrittura di nuovi dati, possono essere diverse. La principale area di applicazione della memoria associativa nei computer moderni è la memorizzazione nella cache dei dati.

Nei dispositivi di archiviazione associativi, le informazioni vengono cercate da una caratteristica associativa registrata in ciascuna cella di memoria.

Nel registro della maschera viene scritta una parola che consente di interrogare tutte o solo alcune cifre della caratteristica associativa, l'utilizzo di una maschera consente di ridurre o ampliare l'area di ricerca.

Le informazioni vengono cercate in parallelo per tutte le celle confrontando la query con la caratteristica associativa di ciascuna cella.

Il risultato della ricerca è generato da uno speciale circuito combinatorio che genera segnali che indicano l'assenza di parole che soddisfano le condizioni di ricerca, la presenza di una sola parola, la presenza di più parole con tale caratteristica associativa.

Dopo la formazione e l'elaborazione dei segnali di allerta, il circuito di controllo legge le informazioni necessarie. Durante la scrittura, viene cercata una cella libera in base al valore del bit occupato, le informazioni vengono scritte nella prima cella libera trovata.

Il controllo del bit di occupazione viene eseguito impostando l'ennesimo bit (busy bit) della maschera. Quando si utilizzano circuiti combinatori aggiuntivi nella memoria associativa, è possibile eseguire varie operazioni logiche, determinando il numero massimo o minimo, il numero di parole che hanno la stessa caratteristica associativa, ecc. Le celle di memoria di un dispositivo di memorizzazione associativa devono essere elementi di memoria statica; nella memoria associativa si accede a tutte le celle contemporaneamente e non devono essere interrotte da cicli di refresh. La memoria associativa è la più veloce, ma molto costosa, poiché richiede l'introduzione di un ulteriore circuito di confronto che permette di cercare ogni cella di memoria. Pertanto, tale memoria di solito non viene utilizzata nella sua forma pura e i dispositivi di memoria di tipo cache ad alta velocità sono generalmente implementati come parzialmente associativi.

INpienamente associativo memoria cache (FACM, Fully Associated Cache Memory), ogni cella memorizza i dati e nel campo "tag" - l'indirizzo fisico completo delle informazioni, una copia delle quali viene registrata. Durante gli eventuali scambi, l'indirizzo fisico delle informazioni richieste viene confrontato con i campi "tag" di tutte le celle e, in caso di corrispondenza, viene impostato il segnale Hit in qualsiasi cella.

Durante la lettura e il valore del segnale Hit = 1, i dati vengono inviati al bus dati, ma se non ci sono corrispondenze (Hit = 0), durante la lettura dalla memoria principale, i dati, insieme all'indirizzo, vengono collocato in una cella della cache libera o più inutilizzata.

Durante la scrittura, i dati, insieme all'indirizzo, vengono prima, di norma, inseriti nella memoria cache (nella cella rilevata a Hit = 1 e libera a Hit = 0). La copia dei dati nella memoria principale viene eseguita sotto il controllo di un controller speciale quando non ci sono accessi alla memoria.

La memoria di tipo FACM è un dispositivo molto complesso e viene utilizzata solo per piccole capacità, principalmente in applicazioni speciali. Allo stesso tempo, questo tipo di cache offre la massima flessibilità funzionale e l'assenza di conflitti di indirizzo, poiché qualsiasi unità di informazione può essere caricata in qualsiasi cella della cache.

Dalle lezioni:

Dispositivi di archiviazione associativi

La differenza fondamentale è che il sistema per estrarre informazioni da esse non è effettuato da un indirizzo univoco per trovare informazioni, ma da qualche segno, che, di fatto, fa parte delle informazioni ricercate.

Informazione

Un tag è una caratteristica distintiva, per coincidenza con la quale si ottiene un'informazione.

Schema semplificato di memoria associativa:

L'area di archiviazione è una memoria indirizzabile con celle numerate che memorizza informazioni e tag.

Per accedere alla memoria associativa, un campione del tag desiderato viene inserito nel registro delle richieste. Lo schema di confronto confronta la query. Viene stabilita una corrispondenza sul registro delle corrispondenze in cui il tag di memoria corrispondeva al modello. Sono possibili reazioni (nessuna corrispondenza; c'è almeno una corrispondenza - in questo caso, la cella trovata viene inserita nel registro dei dati; corrispondenza multipla - il COP deve decidere quale delle celle ottenere per l'elaborazione).

Applicazione: database, knowledge base, PC come cache.

UTILIZZO DI FPGA NEI DISPOSITIVI MODERNI

Tupikov Pavel Andreevich

Studente del 5° anno, Dipartimento di Arte OmSTU, Federazione Russa, Omsk

Oggi, i circuiti integrati logici programmabili (FPGA) sono sempre più utilizzati in vari dispositivi moderni, ciò è dovuto al fatto che gli FPGA presentano vantaggi significativi rispetto ai microcircuiti digitali convenzionali. Questi vantaggi includono:

· Migliori prestazioni del prodotto.

· Il prezzo del prodotto è ridotto.

Dimensioni ridotte del prodotto.

L'affidabilità del prodotto aumenta (il numero di microcircuiti discreti diminuisce)

La flessibilità del prodotto aumenta (l'FPGA può sempre essere riprogrammato)

L'architettura FPGA ha una struttura complessa (Fig. 1)

Figura 1. La struttura interna dell'FPGA

Come si può vedere dalla Figura 1, la parte principale dell'FPGA è costituita da blocchi logici programmabili e connessioni interne programmabili.

Lo stesso processo di programmazione (firmware) FPGA consiste nella formazione delle connessioni necessarie tra gli ingressi e le uscite del dispositivo.

Ad oggi, ci sono due leader mondiali nella produzione di FPGA nel mondo. Queste sono le aziende americane Xilinx e Altera.

Ogni azienda offre il proprio CAD per lavorare con FPGA. Xilinx offre lo Xilinx Software Development Kit (SDK). Altera offre Max+Plus II e Quartus II, oltre al sistema di simulazione ModelSim.

Per creare programmi firmware, vengono solitamente utilizzate le lingue per descrivere il funzionamento delle apparecchiature, le seguenti lingue sono le più comuni oggi:

Verlog HDL.

VHDL è la lingua più difficile da imparare, ma è così le maggiori opportunità a livello funzionale e comportamentale di astrazione, ma ha meno capacità a livello strutturale di astrazione rispetto a Verilog HDL, la libreria VITAL è stata sviluppata per estendere le capacità del linguaggio VHDL (Fig. 2).


Figura 2. Livelli di astrazione Verlog E VHDL

Un esempio del funzionamento del linguaggio Verilog HDL è un programma implementato sull'FPGA CYCLONE III EP3C5E1444C8N dello stand Mini-DiLab, la cui vista generale è mostrata in Fig. 3.


Figura 3. Vista generale della scheda Mini - DiLab

Questo programma implementa l'accensione sequenziale dei led led0-led7, con la possibilità di aggiungere il movimento “luce” tramite i pulsanti pba e pbb, oltre a controllare la velocità di commutazione tramite gli switch sw0, sw1.

//Testo del programma

modulo progetto( produzione guidato, ingresso clk_25mhz, ingresso pba, ingresso pbb,

ingresso sw);

// Destinazione delle connessioni interne del progetto

filo s1;

filo s2;

filo s3;

// Richiamo di altri file (subroutine) collegati al progetto

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Contatore counter_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.out(led), .in(s3));

endmodule// fine del programma

Sottoprogramma tr

modulo tr(fuori, insieme, res); // Crea un programma

// Assegnazione I/O

produzionereg fuori;

ingresso impostato;

ingresso ris;

// inizializzazione

iniziale

inizio

Fuori<= 1"d0;

// Codice del programma principale

Sempre @(nedge impostare o nedge ris)

inizio

Se(~(insieme))

Fuori<= 1"d1;

altro

Fuori<= 1"d0;

modulo finale // Fine del programma

Contatore di subroutine

modulo counter(con, q, clk, up); // Avvio del programma

produzionereg con;

produzione q = con;

ingresso su, clk;

// Codice del programma principale

Sempre @(posedge clic)

inizio

Se(clicca)

Se(su)

Contro<= con - 1"d1;

altro

Contro<= con + 1"d1;

endmodule// Fine del programma

Sottoprogramma mx(multiplexer)

modulo mx( output.reg UN, ingresso In, ingresso carico);

// Codice del programma principale

Sempre @*

inizio

caso(carico)

2"b00: a = dentro;

2"b01: a = dentro;

2"b10: a = dentro;

2"b11: a = dentro;

endcase

endmodule // Fine del programma

Sottoprogramma dc3_8 (multiplatore)

modulo dc3_8(fuori, dentro); // Avvio del programma

// Assegnazione I/O

output.reg fuori;

filo di ingresso In;

// Codice del programma principale

Sempre @*

inizio

caso(In)

3"d0: out = 8"b11111110;

3"d1: fuori = 8"b11111101;

3"d2: fuori = 8"b11111011;

3"d3: fuori = 8"b11110111;

3"d4: fuori = 8"b11101111;

3"d5: out = 8"b11011111;

3"d6: fuori = 8"b10111111;

3"d7: fuori = 8"b01111111;

endcase

endmodule // Fine del programma

Il programma è stato implementato in CAD Quartus II.

Dopo aver compilato il programma, il compilatore non ha generato errori o osservazioni nel programma relative all'analisi e alla sintassi del programma (Fig. 4).


Figura 4. Finestra del messaggio del progetto

Le osservazioni fatte dal compilatore indicano l'assenza di una licenza per Quartus II (la versione gratuita del programma è stata utilizzata per la formazione) e l'assenza di file necessari per la modellazione del progetto.

RTL La struttura di questo progetto è mostrata in fig. 5.


Figura 5. Realizzazione del progetto ( RTL struttura)

Come mostrato in fig. 6 in questo programma, viene utilizzata solo una piccola parte delle capacità di questo FPGA.

Figura 6. Parte dell'FPGA coinvolta nel progetto

Conclusioni: I circuiti integrati logici programmabili sono utilizzati in molti dispositivi. Per imparare a lavorare con loro, è necessario introdurre nel programma educativo delle specialità relative alla progettazione e costruzione di apparecchiature radioelettroniche familiarità con i linguaggi di descrizione dell'hardware (Verilog HDL e VHDL).

Bibliografia:

1. Grushevitzky R.I. Progettare sistemi basati su microcircuiti di logica di programma / R.I. Grushevitzky, A.X. Mursaev, E.P. Cupola. San Pietroburgo: BHV Pietroburgo, 2002. - 608 p.

2. Kolomov D.A. Sistemi di progettazione assistita da computer di Altra MAX+plus II e Quartus II. Breve descrizione e tutorial / D.A. Kolomov, RA Myalk, AA Zobenko, A.S. Filippov. M.: IP RadioSoft, 2002. - 126 p.

3. Maxfield K. Progettazione FPGA. Il corso di un giovane combattente. / K. Maxfield. M .: Casa editrice "Dodeka-XXI", 2007. - 408 p. (traduzione dall'inglese).

Mentre c'erano le vacanze, ho realizzato un piccolo progetto su Verilog, che volevo provare da molto tempo.

L'essenza del progetto è la seguente: un ADC veloce (relativamente, ovviamente) con due canali e un'interfaccia parallela (14-16 bit per canale) è collegato all'FPGA. L'FPGA legge i dati dall'ADC e li memorizza in un buffer (la sua memoria BRAM interna). Quando il buffer è pieno, la lettura si interrompe e il dispositivo esterno (microcontrollore) può leggere i dati dal buffer tramite l'interfaccia SPI. Puoi anche configurare alcuni parametri tramite SPI (di questo parleremo nel prossimo post).

Test del progetto (immagine cliccabile).

Risultato della sintesi per Cyclone IVE

Ho sintetizzato il risultato in Quartus II, per FPGA della famiglia Cyclone IVE (EP4CE6E22A7). Questo è uno degli FPGA più semplici ed economici nel pacchetto QFP144 per 6272 elementi logici. Il chip ha una capacità di memoria di 30K * 9 bit. Pin utente - 92.

chip EP4CE6E22A7
elementi logici - 301 (5%)
perni - 41 (45%)
memoria - 65536 bit (24%)
frequenza del caso peggiore (125 C) - 151 MHz.

Memoria 8 KB, questo è in realtà il buffer in cui vengono scritti i dati. Con due canali di 16 bit, risulta 32 bit per campione e 2048 campioni. Ho deciso che sarebbe bastato, anche se il buffer può essere esteso anche all'intero volume.

La frequenza è abbastanza soddisfacente, mi aspettavo una frequenza di clock di 50 MHz e un ADC a 25 MHz. Cioè, si ottiene un triplice margine di frequenza.

Il numero di elementi logici è abbastanza insignificante per un tale FPGA, vale a dire puoi, se lo desideri, allegare molte altre cose lì, soprattutto perché sono rimasti fino a 51 pin.

C'è una nuova famiglia Cyclone 10.

Risultato della sintesi per Cyclone 10

Selezioniamo il chip 10CL006YE144C8G. Ha lo stesso numero di porte (6272) della versione Cyclone 4 e la stessa quantità di memoria (30K x 9). Il case è lo stesso di QFP144, ci sono ancora meno pin utente - 89.

circuito integrato 10CL006YE144C8G
elementi logici - 289 (5%)
perni - 41 (46%)
memoria - 65536 bit (24%)
la frequenza del caso peggiore (85 C) è 145,5 MHz.

È curioso che il progetto sia diventato più compatto in termini di elementi logici. Cioè, con la stessa capacità logica, un progetto più complesso si adatterà a Cyclone 10. Tutto il resto è più o meno allo stesso livello.

Sorge una domanda ragionevole: è possibile risparmiare denaro installando un altro FPGA o CPLD?

Proviamo FPGA MAX10.

Risultato di sintesi per MAX 10

Qui il lettore (se è nell'argomento) può esclamare: no, non è così! La famiglia MAX è CPLD, non FPGA, e confondere questi concetti è palese mancanza di professionalità!

Tuttavia, grazie agli sforzi dei marketer Intel (sapete tutti che stiamo parlando di chip Intel?), la famiglia MAX10 si è trasformata in un FPGA, sebbene abbia una memoria di configurazione interna non volatile, come qualsiasi CPLD.

Quindi, scegliamo un chip, ad esempio 10M02SCE144A7G (2304 LE, 101 GPIO, 12Kx9 BRAM), pacchetto QFP144.

circuito integrato 10M02SCE144A7G.
elementi logici - 298 (13%)
perni - 41 (41%)
memoria - 65536 bit (59%)
frequenza del caso peggiore (125 C) - 153 MHz.

Vediamo che gli indicatori assoluti sono rimasti praticamente gli stessi, solo il grado di riempimento dei cristalli è aumentato, il che è comprensibile: 2304LE contro 6272 LE.

Si può usare MAX II?

Ora la domanda è: è possibile utilizzare alcuni CPLD molto economici, come MAX II? Qui è tutto più complicato. Non hanno memoria BRAM, cioè avrai anche bisogno di una SRAM veloce esterna.

Per connettere SRAM, sarà ovviamente necessaria una logica aggiuntiva. Se utilizziamo una memoria 4K x 16, avremo bisogno di altri 16 pin per i dati, 12 per l'indirizzo e 3 per il controllo (/cs, /we, /oe), per un totale di 31 pin aggiuntivi.

Anche la logica aumenterà di dimensioni. È difficile dire esattamente quanto, ma inizialmente non si adatterà a CPLD su 240 LE, ma forse si adatterà a 570 LE.

Scegliamo CPLD EPM570 nel pacchetto QFP100. Abbiamo bisogno solo di 72 pin, il case ha 76 pin per GPIO, cioè dovrebbe bastare per tutto, ma c'è già pochissimo spazio per l'espansione.

Pro di questa soluzione: prezzo possibilmente inferiore (anche con un chip SRAM aggiuntivo), contro: maggiore complessità del circuito e area della scheda.

Prezzo di emissione

Ecco cosa ho trovato usando efind. I microcircuiti sono leggermente diversi, ma il numero e la lettera alla fine sono l'indice di prestazione e l'intervallo di temperatura (commerciale). Poiché abbiamo un margine di frequenza triplo, queste cifre non sono assolutamente importanti per noi.

EP4CE6E22C8N - 456,55 R (Promelectronics, EKB, vendita al dettaglio)
10CL006YE144C - 754.71 (Il quinto elemento, San Pietroburgo, ingrosso)
10M02SCE144C8G - 456 R (Elitan, Ekb, all'ingrosso)
EPM570F100C5N - 368 R (Hitech, San Pietroburgo) + memoria (CY7C1021DV33-10ZSXI, SRAM 1MBIT 10NS 44TSOP) - 92,51 R (elettronica industriale, EKB, vendita al dettaglio)

Certo, puoi trovare più economico, questi sono solo i prezzi al dettaglio nel negozio, ma il rapporto sarà più o meno lo stesso.

Si può vedere che l'opzione CPLD non vince in alcun modo in termini di prezzo, pur presentando molti svantaggi. Il resto delle opzioni sono più o meno equivalenti, tranne per il fatto che il Cyclone 10 è ancora un po' più costoso e poche persone lo hanno in magazzino. Tuttavia, questa è una famiglia completamente nuova, finora non tutti i distributori l'hanno portata.

Personalmente, mi piace di più l'opzione MAX 10. Ha un vantaggio: non è necessario caricare la configurazione FPGA all'avvio. Nella variante Cyclone 4, dovrai caricare la configurazione FPGA, che può essere eseguita utilizzando un chip di memoria di configurazione aggiuntivo o utilizzando un microcontrollore. C'è una terza opzione: eseguire il flash tramite JTAG e non rimuovere mai l'alimentazione dal chip. Ho sentito che qualcuno l'ha fatto, non so se sia uno scherzo o no, ma sicuramente non lo farò.

Tuttavia, la variante con firmware Cyclone 4 tramite il microcontrollore ha un vantaggio: la possibilità di aggiornare il firmware FPGA tramite interfacce utente: USB, Ethernet, ecc.

Un'altra opzione non banale è possibile: non installare affatto un microcontrollore, ma eseguire il flashing di un processore incorporato nell'FPGA. Ma questa non è un'opzione molto buona, forse, perché. questo richiederà sicuramente ROM e RAM esterne, nonché almeno un bridge USB. Ovviamente non è necessario rifiutare deliberatamente questa opzione, ma mi sembra più difficile da implementare che con un microcontrollore.

A proposito di quali funzioni esegue questo firmware, scriverò nel prossimo post.

L'articolo tenta di determinare la composizione della documentazione di accompagnamento per i moduli digitali sviluppati per i circuiti integrati logici programmabili (FPGA). Questa documentazione di accompagnamento deve essere fornita dagli sviluppatori al consumatore/cliente per l'ulteriore utilizzo del modulo digitale sviluppato nei loro progetti nella fase di progettazione di dispositivi digitali sull'FPGA.

introduzione

Quindi, che tipo di documentazione di progettazione dovrebbe essere richiesta allo sviluppatore se l'azienda o l'impresa cliente o un altro sviluppatore utilizzerà in futuro un dispositivo sviluppato "straniero" nei propri progetti? Questo articolo può fungere da "cheat sheet" per emettere prima correttamente i termini di riferimento per lo sviluppo di un dispositivo digitale per FPGA, quindi chiedere allo sviluppatore la documentazione di progettazione per un dispositivo digitale già sviluppato. Sulla base dell'esperienza precedente con la documentazione di progettazione, un'impresa o un'azienda di solito utilizza i seguenti standard e regolamenti:

  • GOST 2.102-68 ESKD. Tipologie e completezza dei documenti di progettazione.
  • GOST 15.101-98. Sistema per lo sviluppo e la produzione di prodotti. La procedura per l'esecuzione del lavoro di ricerca.
  • GOST R 15.201-20-00. Sistema per lo sviluppo e la produzione di prodotti. Prodotti per uso industriale e tecnico. La procedura per lo sviluppo e la produzione di prodotti.

Di norma, si trattava di un file firmware e di un programma (una descrizione di un dispositivo digitale in VHDL / Verilog o un insieme di circuiti digitali sviluppati in un editor di circuiti utilizzando elementi di libreria di logica digitale, come flip-flop, registri, contatori, decoder, ecc.) su CD o DVD e le istruzioni di programmazione. E questo è tutto.

L'autore, ad esempio, ha affrontato il seguente problema. Uno dei dipendenti ha sviluppato un complesso dispositivo digitale multimodulo. Ho descritto tutti i moduli in VHDL e ho esaminato i ciclogrammi del funzionamento di questi moduli e del dispositivo digitale nel suo insieme su un buon e costoso oscilloscopio. Non sapeva dei file di Test Bench e della possibilità di condurre simulazioni o non sapeva come scriverli, tra l'altro non c'erano nemmeno commenti sul progetto e sulle descrizioni dei moduli. La situazione può essere anche peggiore se i moduli sono rappresentati da circuiti digitali progettati in un editor schematico utilizzando elementi di libreria. È qui che risiede uno dei principali inconvenienti: a parte lo sviluppatore stesso, è improbabile che qualcun altro capisca questo dispositivo digitale, soprattutto se il progetto è multimodulo e la descrizione di ciascun modulo è superiore a 100 righe o più di uno schermo monitor. Quindi, se un altro sviluppatore desidera introdurre un dispositivo digitale già sviluppato per FPGA in un nuovo sviluppo o progetto, deve dedicare nuovamente del tempo allo sviluppo di questo dispositivo digitale.

Storia del problema di progettazione per FPGA

Attualmente, il mercato FPGA è uno dei più dinamici in via di sviluppo. Gli FPGA sono utilizzati in molti rami della tecnologia. Al momento, non esiste una metodologia univoca che soddisfi tutti gli sviluppatori hardware per ottenere la configurazione FPGA dal modello funzionale del dispositivo a livello di sistema. L'approccio più popolare per risolvere questo problema è l'uso della tecnologia IP-core (Intellectual Property Cores). I core IP sono componenti già pronti che ti consentono di includerli facilmente nel tuo progetto per creare un sistema più complesso. Questo approccio ha uno svantaggio significativo: l'attaccamento dei nuclei IP alla base elementare. Ogni core IP è ottimizzato per una serie specifica di chip di un produttore specifico, il che compromette in modo significativo la possibilità di trasferire dispositivi già creati da una base di elementi a un'altra. La natura chiusa delle architetture CAD commerciali rende impossibile aggiungere i propri modelli di dispositivi funzionali a livello di sistema per ottenere modelli di dispositivi a livello di trasferimento di registro (RTL) sulla base. Lo sviluppo di un modulo digitale viene eseguito sotto forma di un circuito digitale disegnato in un editor di circuiti utilizzando la libreria CAD integrata del produttore di elementi circuitali di base, come flip-flop, decodificatori, contatori, sommatori, ecc.

Un altro approccio popolare che consente la transizione da un modello funzionale a livello di sistema a un modello di dispositivo a livello di trasferimenti di registro è l'uso di linguaggi di progettazione a livello di sistema (SLDL). Tali lingue includono SystemC, Handel-C, VHDL, Verilog, System Verilog. Il vantaggio principale è l'indipendenza dalla base hardware in cui verrà implementato il dispositivo.

Pertanto, da un lato, quando si utilizza la tecnologia IP-core, lo sviluppatore hardware riceve una soluzione di alta qualità, ma strettamente legata alla base hardware in cui è implementato il dispositivo. D'altra parte, quando si utilizzano i linguaggi di descrizione dell'hardware a livello di sistema, l'implementazione del dispositivo è indipendente dall'hardware. Da quanto precede, ne consegue che attualmente è importante utilizzare l'uso congiunto di moduli digitali nel linguaggio di descrizione dell'hardware e core IP del produttore (Xilinx, Altera, Actel, ecc.) E sviluppatori di terze parti per accelerare il processo di progettazione dei moduli digitali. Quando si utilizzano moduli digitali di produttori di terze parti, a volte mancano le informazioni nella documentazione di accompagnamento.

Fornire informazioni sul modulo digitale sviluppato per FPGA

A seconda della metodologia per ottenere la configurazione FPGA in base al modello funzionale del dispositivo a livello di sistema, lo sviluppatore può distinguere i seguenti tipi di modulo digitale per FPGA:

  • Software - un modulo digitale sviluppato, trasmesso al consumatore sotto forma di descrizione nel linguaggio di descrizione dell'hardware (VHDL, Verilog) o / e sviluppato nell'editor schematico per un ulteriore utilizzo in programmi per la sintesi automatizzata di circuiti logici e ottimizzato in termini di parametri funzionali.
  • firmware - un modulo digitale sviluppato da una società di sviluppo di terze parti, chiamato core IP, trasmesso al consumatore sotto forma di un circuito logico (netlist) basato sulla libreria di elementi logici del produttore dell'FPGA e ottimizzato in termini di funzionalità e parametri elettrici.

Nella fase di sviluppo della documentazione, sulla base dell'esperienza personale, è necessario rilasciare, oltre alla consueta documentazione e specifiche di progettazione, eseguita in conformità con GOST 15.101, GOST 15.201, GOST 2.102, GOST 2.114, documentazione per tutti i tipi di modelli (sistema, logica, circuiti) creato nelle fasi di progettazione di dispositivi digitali su FPGA.

In altre parole, l'insieme della documentazione di progettazione di un dispositivo digitale per FPGA, oltre al file del firmware, alle istruzioni di programmazione e al progetto registrato su CD/DVD, dovrebbe includere anche la documentazione di accompagnamento.

Tavolo. Elenco delle sezioni della documentazione di supporto

Nome della sezione Visualizzazione
Software firmware
informazioni generali
Obiettivo e scopo DI R
Specifiche DI DI
Descrizione dei segnali di reset DI DI
Descrizione dei segnali di sincronizzazione DI DI
Descrizione delle interfacce DI R
Diagrammi temporali R DI
Descrizione dei registri di controllo DI DI
Diagramma strutturale (funzionale). R R
Guida alla programmazione DI DI
modello o famiglia FPGA,
produttore dell'azienda
R DI
Presentazione del modulo digitale
per la progettazione logica su FPGA
Modello RTL DI NO
Modello logico NO DI
Limiti di progettazione DI DI

Ecco un elenco di sezioni (tabella) che dovrebbero essere incluse nella documentazione di accompagnamento del progetto di un modulo digitale per FPGA. Per ogni sezione vengono evidenziati i segnali della necessità di includere la sezione nel set di documenti:

  • "O" - sezione fornita obbligatoria;
  • "R" - sezione consigliata per la consegna.

I formati di file consigliati per l'invio della documentazione di supporto sono MS Word, PDF (formato migliore), HTML. I file di descrizione in linguaggio di descrizione hardware (VHDL, Verilog) e/o quelli sviluppati nello Schematic Editor vengono forniti come richiesto dal software di progettazione CAD. Un'eccezione può essere la fornitura aggiuntiva in formato grafico (JPEG, BMP) di file di circuiti digitali sviluppati nello Schematic Editor.

informazioni generali

Questa sezione descrive le informazioni generali sul modulo digitale sviluppato sotto forma di descrizione:

  • schema funzionale e suoi blocchi/parti costituenti;
  • segnali di ripristino, sincronizzazione;
  • interfacce applicate;
  • registri di controllo;
  • diagramma di temporizzazione;
  • programmazione.

Obiettivo e scopo

Viene determinato lo scopo del modulo digitale, l'ambito della sua applicazione.

Specifiche

Viene fornita una descrizione delle sue principali caratteristiche tecniche, come le prestazioni, il consumo energetico per un particolare chip FPGA, il numero di porte occupate, il tipo di chip FPGA utilizzato. Inoltre, sono indicati il ​​produttore dell'FPGA utilizzato nello sviluppo del modulo CAD digitale e il software utilizzato per la modellazione e la verifica. Per tutti i programmi utilizzati sono indicati la versione e gli aggiornamenti installati. Viene fornita una rappresentazione grafica del modulo digitale sotto forma di una "scatola nera" con la designazione di ingressi/uscite esterni e viene fornita una breve descrizione del loro scopo.

Descrizione dei segnali di reset

Vengono fornite informazioni dettagliate sui segnali di ripristino:

  • Elenco dei segnali di reset esterni e interni.
  • Parametri di temporizzazione e diagrammi di temporizzazione dei segnali di reset.
  • Circuiti per la generazione di segnali interni di ripristino, se presenti, sono inclusi nel modulo digitale.
  • Relazioni con altri segnali (in particolare segnali di sincronizzazione).

Descrizione dei segnali di sincronizzazione

Vengono fornite informazioni dettagliate sui segnali di sincronizzazione:

  • descrizione dei segnali di sincronizzazione esterni;
  • parametri di temporizzazione dei segnali di sincronizzazione;
  • descrizione dei segnali di sincronizzazione interna e schemi della loro formazione;
  • relazioni di temporizzazione tra segnali di sincronizzazione provenienti da sorgenti diverse;

Descrizione delle interfacce

Vengono fornite le caratteristiche dell'utilizzo di tutte le interfacce che fanno parte del modulo digitale sviluppato, preferibilmente unificate per organizzare l'interazione con altri nodi del sistema su un chip. Inoltre, viene fornito un collegamento Internet a una descrizione completa dell'interfaccia standard o viene fornita la descrizione dell'interfaccia stessa. Al momento, le interfacce al bus AMBA, PLB, Wishbone sono accettate come interfacce unificate per i moduli digitali.

Diagrammi temporali

Vengono fornite le informazioni necessarie per organizzare lo scambio dati attraverso interfacce e altri ingressi/uscite del modulo digitale: rappresentazione grafica dei diagrammi temporali, descrizione dei protocolli di trasferimento dati, requisiti per i segnali esterni applicati al modulo digitale (durata, frequenza, ecc.) e altre informazioni.

Descrizione dei registri di controllo

Viene fornita una descrizione di tutti i registri di controllo del modulo digitale. Una descrizione tipica del registro di controllo contiene il nome del registro, l'indirizzo del registro nello spazio indirizzi interno, il valore iniziale dopo la rimozione del segnale di reset, il tipo di accesso (lettura/scrittura), una descrizione del registro interno campi.

Diagramma strutturale (funzionale).

Viene fornita un'immagine della struttura interna delle connessioni dei principali nodi/blocchi interni del modulo digitale, nonché una loro breve descrizione testuale. Viene inoltre fornita una descrizione dei principali blocchi interni del modulo digitale. Lo scopo di questo documento è quello di fornire al consumatore le informazioni necessarie per comprendere i principi di funzionamento del modulo digitale.

Il numero di blocchi descritti e l'ambito della descrizione sono determinati dallo sviluppatore del modulo digitale. Preferibilmente, il numero minimo di moduli descritti corrisponde al numero di elementi dello schema strutturale (funzionale) del modulo digitale.

Una tipica descrizione dell'unità interna contiene:

  • assegnazione di blocco;
  • diagramma a blocchi strutturale (funzionale) (se necessario);
  • modalità operative e algoritmi;
  • tabelle orarie di lavoro;
  • organizzazione della gestione delle unità;
  • organizzazione della comunicazione con altri blocchi;
  • qualunque altra informazione.

Guida alla programmazione

Fornisce tutte le informazioni necessarie sul processo di programmazione utilizzando il CAD del produttore del modulo digitale nell'FPGA, gli strumenti necessari per lo sviluppo e il debug del software e le librerie software.

Modello o famiglia di FPGA, produttore

Per il firmware di un modulo digitale, sono indicati il ​​produttore dell'FPGA, il modello o la famiglia dell'FPGA e le sue caratteristiche di velocità. Per il modulo digitale Software, vengono fornite informazioni sulla quantità di risorse occupate, i requisiti per l'FPGA applicato.

Rappresentazione di un modulo digitale per la progettazione logica

L'articolo discuteva le difficoltà nell'usare un progetto "straniero" su VHDL - la mancanza di linee guida adeguate per nominare e scrivere programmi. Sono state fornite anche istruzioni generali sui nomi, le buone maniere per la scrittura dei programmi e le linee guida per la sintesi. Questi problemi dovrebbero essere discussi nel modo più dettagliato possibile con lo sviluppatore se in futuro prevedi di continuare a sviluppare o aggiornare da solo prima che inizi a sviluppare il modello RTL del modulo digitale sull'FPGA. Ciò è particolarmente vero per il tipo di modulo digitale software sull'FPGA. La stessa parte dell'articolo descrive i requisiti generali per l'intero progetto del modulo digitale sviluppato sull'FPGA. Ecco le questioni a cui prestare attenzione quando si redigono i termini di riferimento per lo sviluppo di un modulo digitale sull'FPGA, e questo riguarda in particolare il trasferimento dei risultati del lavoro.

Modello RTL

Un modulo digitale descritto in un sottoinsieme sintetizzato del linguaggio Verilog o VHDL o/e sviluppato nello Schematic Editor è destinato all'uso nella fase di sintesi logica FPGA. Fornito per Software sotto forma di progetto assemblato di un modulo digitale nel sistema CAD del produttore FPGA. Per il modulo digitale Firmware, il modello RTL viene fornito con un accordo separato.

Oltre ai file modello RTL, vengono trasferiti:

  • Istruzioni per l'uso del modello.
  • Descrizione dei blocchi di memoria inclusi nel modello, incluso il tipo di memoria, dimensione, numero di blocchi di memoria, nome gerarchico del blocco di memoria.
  • Descrive come creare kernel predefiniti quando si utilizzano programmi per crearli (ad esempio, CoreGenerator per Xilinx ISE). In assenza di descrizioni, potrebbero esserci restrizioni sulla riprogettazione e sull'applicazione a causa della tecnologia e della dipendenza dal produttore.
  • Nel caso di utilizzo di un microprocessore di un produttore (ad esempio, da Altera - processore Nios; da Xilinx - Microblaze, microprocessori PowerPC), è richiesta una descrizione del processo di configurazione del core del processore e della sua periferia.
  • Una serie di test (file Test Bench) per la verifica e la simulazione di un modulo digitale scritto in Verilog o/e VHDL o/e System Verilog.
  • Eventuali altre informazioni aggiuntive.

Modello logico

Il modello è una netlist descritta utilizzando i linguaggi Verilog o VHDL sulla base della libreria del produttore dell'FPGA ed è fornita per il Digital Module Firmware.

Oltre ai file del modello logico, vengono trasferiti:

  • Istruzioni per l'uso di questo modello.
  • Una serie di test (file Test Bench) per la verifica e la simulazione di un modulo digitale scritto in Verilog o/e VHDL o/e System Verilog.
  • Una guida per lavorare con una serie di test per modellare e verificare un modulo digitale.
  • Eventuali altre informazioni aggiuntive.

Limiti di progettazione

I vincoli di progettazione sono forniti come un file che descrive un insieme di vincoli imposti a un modulo digitale quando è incluso nel modello logico system-on-chip. Questo set include restrizioni per i segnali di sincronizzazione (vincoli di clock), vincoli di temporizzazione (vincoli di temporizzazione), restrizioni sull'interazione del modulo digitale con altri moduli e le condizioni operative del modulo digitale. Sinossi Design Constraints (SDC) o il formato CAD del produttore dell'FPGA è preferibile.

Un esempio di elenco di limitazioni per i segnali di sincronizzazione:

  • diagramma di temporizzazione (forma d'onda dell'orologio);
  • instabilità della frequenza di clock (Jitter);
  • cambio di fase dell'orologio;
  • durata dei tempi di commutazione (Tempi di transizione);
  • diagrammi temporali di segnali di clock derivati ​​(Forme d'onda di clock generate);
  • qualsiasi altra informazione aggiuntiva.

Una serie di restrizioni per i segnali di sincronizzazione è obbligatoria per il software e il firmware dei moduli digitali.

Esempio di elenco di limiti di tempo:

  • il tempo di occorrenza dei segnali agli ingressi (Tempi di arrivo agli ingressi);
  • il tempo di comparsa dei segnali alle uscite (Tempi richiesti alle uscite);
  • multipiste ciclabili;
  • falsi percorsi (falsi percorsi);
  • durata dei tempi di transizione del segnale dati;
  • qualsiasi altra informazione aggiuntiva.

Conclusione

La data composizione della documentazione di accompagnamento per i moduli digitali sviluppati per FPGA è fornita da un accordo tra il consumatore e lo sviluppatore. Molto spesso, lo sviluppatore fornisce solo un modulo digitale, descritto in VHDL, Verilog, System Verilog e/o sviluppato in un editor schematico. Per quanto riguarda la documentazione aggiuntiva, la risposta dello sviluppatore è molto spesso la seguente: “Il modulo digitale funziona, quindi prendilo e usalo. Non c'è niente di difficile nel descrivere il circuito nel linguaggio dell'hardware: lo capirai da solo.

Secondo l'autore si può capire qualsiasi cosa, tutto dipende dalla voglia e dal tempo speso, e il tempo speso per comprendere un progetto "straniero" su un modulo digitale già sviluppato è direttamente proporzionale all'esperienza di descrivere apparecchiature in VHDL, Verilog e conoscenza dei circuiti digitali e dei microprocessori. Questo può essere evitato se inizialmente sei d'accordo con lo sviluppatore sulla composizione della documentazione di accompagnamento, quindi l'uso del modulo digitale nel tuo progetto diventa più facile e la sua implementazione sarà più veloce.

Riassumendo, l'autore vorrebbe notare che quando si formula un'attività per lo sviluppo di un dispositivo digitale su un FPGA, si dovrebbero aderire alle raccomandazioni fornite nell'articolo, quindi non ci saranno problemi durante il riutilizzo o l'aggiornamento di un digitale sviluppato in precedenza dispositivo.

Letteratura

  1. Denisov A. Diversi suggerimenti per la progettazione di dispositivi digitali su VHDL per FPGA // Componenti e tecnologie. 2009. N. 12.
  2. GOST 2.102-68 ESKD. Tipologie e completezza dei documenti di progettazione.
  3. GOST 2.114-95 ESKD. Specifiche.
  4. GOST 15.101-98. Sistema per lo sviluppo e la produzione di prodotti. La procedura per l'esecuzione di lavori di ricerca scientifica.
  5. GOST R 15.201-20-00. Sistema per lo sviluppo e la produzione di prodotti. Prodotti per uso industriale e tecnico. La procedura per lo sviluppo e la produzione di prodotti.