Dalla C al silicio: come implementare la soluzione software / firmware come hardware?


13

Alla luce di questa domanda, mi chiedevo se esistesse un processo abbastanza standard per trasformare una soluzione software in un'implementazione hardware. Perdona me e la mia immaginazione, ma ci sarebbe un compilatore che potrebbe prendere un programma C e compilarlo in termini di uno schema di transistor, resistori, ecc. O forse anche PCB noti?

Mi rendo conto che potrei guardare questo scenario dalla prospettiva sbagliata. Storicamente dalla mia esperienza, in genere hai un pezzo di hardware che qualcuno ha implementato come soluzione software (pensa all'emulazione hardware). Esiste anche questo concetto al contrario? Come fanno queste grandi aziende come il routing IP software vs hardware?


Vedi anche "perché non riesco a rendere automaticamente multithread il mio programma C a testa singola?"
pjc50,

@ pjc50: dove posso vedere "perché non riesco a rendere automaticamente multithread il mio programma C a testa singola?" ?
David

Non ho in mente un esempio specifico, ma è una domanda che ho visto fare prima. È anche legato al fatto che l'hardware è intrinsecamente parallelo mentre il software è "naturalmente" sequenziale in termini di modo in cui le persone ci pensano e scrivono programmi.
pjc50,

Risposte:


11

No, non esiste una soluzione standard per trasformare il software in hardware. In generale, prendere in considerazione un software che non è stato scritto con un'implementazione hardware in mente non può essere facilmente convertito in hardware senza enormi sprechi e inefficienze. Di solito, la cosa migliore da fare è creare un chip con CPU e ROM e inserire il software nella ROM.

Nel corso degli anni ci sono stati compilatori che avrebbero preso il codice "C-Like" e lo avrebbero compilato in hardware, più o meno allo stesso modo in cui VHDL o Verilog possono essere compilati in hardware. Ma la cosa fondamentale è che è "C-Like", e non C. Non puoi ancora prendere, per esempio, un programma C / C ++ che calcola PI e magicamente lo converte in hardware che calcola PI. La maggior parte di questi linguaggi C-Line è scomparsa o non viene utilizzata in nessun numero. Una delle versioni più popolari di questo è SystemC , ma è importante notare che non è C / C ++ e non è utile per il generico "scriviamo software e quindi compilarlo in hardware". Devi ancora "scrivere dell'hardware, che potrebbe anche essere compilato in software".

Gli switch e i router in genere dispongono di hardware che svolge la maggior parte delle funzioni router comunemente utilizzate e critiche per la velocità (ricerca di elementi nelle tabelle di routing, gestione delle code, ecc.) Nell'hardware e quindi utilizzo di una CPU per eseguire tutte le funzioni non così comuni (gestione di eccezioni, errori, aggiornamenti della tabella di routing, ecc.). In molti modi questo è simile al funzionamento della moderna CPU, in cui i codici operativi più comuni sono eseguiti in hardware e occasionalmente alcuni codici operativi sono effettivamente implementati nel software (ad esempio, istruzioni in virgola mobile quando non è presente una FPU).


Non solo SystemC è un C ++ reale, è solo una libreria C ++. Puoi usare qualsiasi normale codice C ++ che ti piace con SystemC. Detto questo, SystemC non ha molto a che fare con la generazione automatica dell'hardware. È più orientato alla simulazione di sistemi, aiuta a prendere decisioni sull'architettura e consente ai team di software di iniziare prima che l'hardware sia disponibile.
Theran,

Questo mi aiuta davvero a capire perché c'è hardware specifico che esegue compiti specifici.
Chad Harrison,

Esistono molti altri compilatori da C a HDL progettati per questo scopo.
Anderson Green,

5

La cosa più vicina sarebbe il compilatore C-to-Hardware (C2H) di Altera . Può fare qualcosa di ciò che stai suggerendo. Ma ci sono avvertimenti provocatori. Non è possibile trasformare qualsiasi codice C in hardware, né lo si vorrebbe. Ma funzioni specifiche funzionano piuttosto bene e puoi vedere un notevole aumento delle prestazioni.

In genere si implementa un processore softcore NIOS II in un FPGA Altera. Dovresti quindi scrivere un codice ANSI C per farlo come faresti con qualsiasi altro processore. Quindi dì che una delle funzioni C che hai scritto implica una matematica pesante che trarrebbe beneficio dal punto di vista delle prestazioni da un'esecuzione parallela. Si invoca il compilatore C2H, si dice "Implementa in Hardware" e trasforma essenzialmente quella funzione in una periferica del processore softcore NIOS II.

Ecco un esempio di codifica di un calcolo di Mandelbrot in ANSI C e della sua implementazione in hardware:

L'algoritmo Mandelbrot accelerato dal compilatore C2H determina un miglioramento della velocità di almeno 60x rispetto allo stesso algoritmo in esecuzione sul processore Nios II più veloce utilizzando l'ottimizzazione del compilatore livello 2 (-O2). Questo aumento di velocità è dovuto al parallelismo e alle velocità di iterazione elevate che l'hardware può fornire, cosa impossibile da un'unità di elaborazione per scopi generici.

Tornando al tuo esempio, il processore NIOS II può eseguire Linux. E alcune funzioni che sarebbero necessarie per eseguire le attività di routing potrebbero trarre vantaggio dall'accelerazione hardware. Molto probabilmente funzionerebbe meglio di un router software puro. Ma non si avvicinerà mai alle prestazioni di ASIC dedicati appositamente progettati.


1
Xilinx ha uno strumento comparabile chiamato Vivado HLS (sintesi di alto livello), precedentemente noto come AutoESL. Si applicano avvertenze simili: fa un buon lavoro convertendo il codice in RTL se è il tipo di codice che è facile da convertire automaticamente in RTL.
Theran,

@Theran Non ero a conoscenza del fatto che Xilinx avesse un prodotto concorrente. Dovrò verificarlo. Grazie!
embedded.kyle

2

Citi "C to Silicon" nel tuo titolo e menzioni i prodotti a livello di scheda nel corpo. Mi concentrerò solo sulla parte dell'equazione esistente -> Flussi di progettazione da "C a silicio". C di per sé non è una misura naturale per la descrizione dell'hardware in quanto manca di un supporto fondamentale per il parallelismo intrinseco dell'hardware, la necessità di prevenire le condizioni di gara e altri problemi, e non è particolarmente espressivo nel poter rappresentare questi concetti. O almeno quanto Verilog e VHDL.

Il codice C che è sintetizzabile (cioè può essere reso con una descrizione hardware) e qui hardware = logica digitale, non vincerebbe alcun concorso di codifica giudicato dagli sviluppatori di software.

Ecco un elenco di alcuni importanti fornitori che forniscono strumenti C -> Silicon per la folla del flusso ASIC.

  • Forte Cynthesizer

  • Mentor Catapult

  • BlueSpec C

  • Synopsys Synphony (ex- Synfora)

  • Cadenza da C a silicio


1

Trasformare il software in hardware non è un compito completamente banale se ti aspetti un hardware ragionevole. L'hardware tende a richiedere più architettura per gestire attentamente l'utilizzo delle risorse in relazione all'area / costo. Detto questo, ci sono una serie di strumenti che assumono C in qualche modo, ti permettono di aggiungere informazioni specifiche sull'hardware (ad esempio, qual è l'interfaccia hardware?) E generare hardware ottimizzato. Gli utenti esperti possono facilmente ottenere risultati migliori in meno tempo rispetto alla RTL codificata a mano.

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.