SystemC vs HDLs


9

Attualmente sono coinvolto in un progetto universitario per l'implementazione di un elaboratore di un set di istruzioni esistente. L'idea è che entro la fine del progetto dovrei essere in grado di sintetizzare questo progetto ed eseguirlo in un FPGA. Finora tutto procede bene, ho iniziato a implementare il design in Verilog HDL pochi giorni fa e ho ottenuto una versione molto semplice funzionante. Ora il problema: sono entrato in contatto con alcune persone che sono state coinvolte nella progettazione hardware per anni e mi hanno suggerito che prima di andare oltre dovrei passare a utilizzare SystemC per l'implementazione. Ora, mi ha fatto molto confuso perché questo era il mio pensiero:

Verilog -> Come linguaggio HDL si rivolge specificamente alla progettazione hardware. Ha alcuni livelli di astrazione come Verilog strutturale e comportamentale, ma è una forma molto accurata di specificare l'RTL di un progetto. Puoi sicuramente sintetizzarlo usando un sacco di strumenti a seconda dell'FPGA che scegli (nel mio caso sto usando le schede Xilinx Vivado 2014 e Zynq). Sul lato negativo, Verilog non offre abbastanza astrazione per la verifica ed è per questo che hai cose come System Verilog.

SystemC -> Questa è una libreria di classi C ++ che introduce efficacemente il concetto di tempo in C ++ e consente di eseguire una simulazione guidata dagli eventi. Chiaramente è molto più di alto livello rispetto a qualsiasi HDL e le cose qui possono essere implementate molto più rapidamente. Questo lo rende un ottimo strumento per cose come la verifica e persino l'implementazione di simulatori in modo che le persone possano iniziare a progettare driver e cose per un chip prima che l'oggetto venga effettivamente prodotto. Apparentemente, c'è anche un sottoinsieme di SystemC che è sintetizzabile (penso che anche Xilinx Vivado possa farlo) e in alcuni casi consente a SystemC di essere utilizzato per progettare sistemi molto grandi in cui è utile un livello di astrazione più elevato.

Quindi, le mie domande sono:

  1. Queste nozioni di quali systemC e Verilog (o lingue HDL, se lo desideri) sono corrette?
  2. Quando dovrei usare SystemC e quando Verilog?
  3. Mi è stato detto che anche in Verilog, l'uso di molto codice comportamentale può essere un po 'problematico in sezioni critiche dell'implementazione perché in pratica stai dando molti meno vincoli allo strumento di sintesi su come sintetizzarlo. Con un livello di astrazione più elevato questo non sarebbe un problema? cioè se uso systemC potrei finire con un design molto lento, affamato di energia, di grandi dimensioni ...
  4. La persona che ha suggerito SystemC ha affermato che sembra che io stia facendo "esplorazione architettonica" ed è per questo che preferirebbe Verilog. Cosa significa esattamente? Avevo l'impressione che l'architettura si riferisse in genere al set di istruzioni e alla microarchitettura a un'implementazione di un set di istruzioni (quindi la microarchitettura è l'effl rtl che esegue le istruzioni). Quindi l'esplorazione dell'architettura significa che pensa che sto implementando un processore per vedere quanto sia fattibile un set di istruzioni?
  5. Ha detto che un argomento per usare SystemC è che è molto più facile perché è un livello di astrazione più alto di un HDL. Ha anche affermato che era più facile ottenere i tempi giusti per la progettazione. Fino a che punto è vero?

L'aiuto sarebbe molto apprezzato, sono un po 'confuso e trovo difficile ottenere informazioni chiare su questo online. Grazie!


Ciao, posso chiedere quale corso accademico è stato?
Riflessione

Ciao, ho studiato informatica. A rigor di termini questo non fa parte del corso standard, ho scelto di costruire un processore basato sul Transputer per la mia tesi di laurea da zero.
Andrés AG,

Risposte:


3

Il tuo amico o ha frainteso quello che stai facendo o stava pensando a SystemC come un passo preliminare. Un HDL è l'unica scelta In ogni caso, e suggerirei di utilizzare SystemVerilog sintetizzabile che è abbastanza potente da fare molta esplorazione, essendo sostanzialmente lo stesso di Verilog per tutto il resto.

  1. Parzialmente. Hai operato una distinzione tra Verilog come HDL, SystemVerilog come linguaggio di verifica e hai affermato che SystemC ha un'astrazione più elevata ma anche un sottoinsieme sintetizzabile. Ci sono due errori qui. Innanzitutto, SystemVerilog è anche un HDL con un sottoinsieme completamente sintetizzabile che potrebbe essere ripreso come Verilog con correzioni ovvie (ad es. Un singolo logictipo per i fili) e molti meccanismi di astrazione sintetizzabili (ad es. Interfacce). È supportato da molti strumenti tra cui Vivado. SystemC d'altra parte, non lo èdirettamente sintetizzabile (nemmeno un sottoinsieme), è pensato per la modellazione di livello superiore e l'esplorazione architettonica sebbene alcuni sottoinsiemi di esso possano essere alimentati in uno strumento di sintesi di alto livello come Vivado HLS che lo traduce in Verilog sintetizzabile (anche se illeggibile) .

  2. Verilog e il sottoinsieme sintetizzabile di SystemVerilog sono linguaggi per la progettazione HW, di solito utilizzati per descrivere HW a livello di trasferimento di registro, ovvero come un insieme di blocchi come registri, funzioni combinatorie, macchine a stati finiti ecc. Verilog-2001 può anche descrivere in modo appropriato hw come netlist a livello di gate, mentre SV può anche essere utilizzato per un livello di astrazione molto più elevato, quindi le sue capacità di verifica. D'altra parte, SystemC è appropriato per la modellazione di alto livello di sistemi in cui interi blocchi sono descritti solo in modo comportamentale di alto livello. È anche molto potente per l'esplorazione dell'architettura, vale a dire la variazione di parametri e caratteristiche di un'architettura e la valutazione dei cambiamenti nelle prestazioni complessive.

  3. Questo è vero solo se si tenta di descrivere le cose in modo non RTL mentre si sviluppa un modello RTL. Ad esempio, il modo giusto per descrivere un blocco che esegue un multiplo-accumulo ripetitivo è una macchina a stati finiti che guida un moltiplicatore combinatorio, un sommatore combinazionale e un registro - se per comportamento intendevi descriverlo come nel software (un ciclo for) quindi sì, il codice comportamentale non funzionerà. Se intendevi descrivere ciascuno dei blocchi che ho descritto (mult, add, reg e FSM) tramitealwaysblocchi, che va perfettamente bene e funzionerà in una netlist realizzando esattamente ciò che hai specificato con risultati eccellenti (spesso meglio di un approccio eccessivamente strutturale che limita la capacità dello strumento di sintesi di ottimizzare la logica). In effetti, la sintesi di alto livello di SystemC porterà spesso a buoni risultati solo se si rispettano schemi molto simili, annullando efficacemente qualsiasi vantaggio nell'uso di un linguaggio di livello superiore. In ogni caso, SystemC non è una buona scelta per l'implementazione di un processore.

  4. L'architettura è un termine molto ampio che non si limita all'ISA, infatti nei moderni processori il design dell'ISA è solo un piccolo pezzo del puzzle. Nel contesto della progettazione di un sistema, l'architettura di solito indica l'insieme di scelte a livello di sistema (ad es. Il DMA può essere controllato da qualsiasi core o solo da uno speciale? La cache L1 è completamente o impostata come associativa? Hai una cache o gestisci la memoria in SW?), incluso l'ISA e anche la microarchitettura del processore. Penso che ciò che il tuo amico intendesse sia che stai esplorando varie configurazioni del tuo processore, che in realtà è esplorazione architettonica (o esplorazione microarchitettura se preferisci). Tuttavia, potrebbe essersi perso il fatto che lo implementerai su un FPGA, il che rende insensata l'opzione SystemC.

  5. Questo è sbagliato. Se stai progettando un acceleratore molto semplice, come un filtro di streaming, questo potrebbe essere vero perché gli strumenti HLS consentono di inserire facilmente le fasi della pipeline, mentre dovresti farlo manualmente in RTL (o utilizzare la retimazione del datapath, ma penso che non lo sia possibile in Vivado). In tutti gli altri casi, e specialmente in un oggetto altamente complesso e strutturato come un processore, HLS si tradurrà in un Verilog gonfio, indebolibile e spesso chiaramente sbagliato che deve quindi essere sintetizzato - gli strumenti semplicemente non sono progettati per questo lavoro.


Grazie per l'aiuto. Ho già avviato il progetto con Verilog, ma ho ancora imparato molto dalla tua risposta!
Andrés AG,

3

Sei all'università e studi (presumibilmente) per diventare un ingegnere. Come ingegnere dovresti capire come funzionano le cose a basso livello. Per raggiungere questo obiettivo è necessario eliminare gli strati di astrazione, non aggiungerli.

Per questo motivo, il mio consiglio è di non utilizzare SystemC per questo progetto. Potresti finire per usarlo nella tua carriera professionale, ma è per il futuro.

Se scegli di usarlo comunque, dovresti prima parlare con il tuo docente. Quando ho svolto un compito simile all'università, ci è stato esplicitamente detto di non utilizzare SystemC per il motivo che ho descritto sopra.


0

Siamo sinceri, è tutta programmazione. Cosa puoi fare in SystemC, puoi anche programmare in VHDL o Verilog. È solo una questione di supporto per gli strumenti. Non richiede SystemC o SystemVerilog.

Se i fornitori rappresentano la soluzione ovvia per convertire i progettisti RTL in programmazione di sistema, devono semplicemente fornire supporto al linguaggio appropriato per la progettazione FPGA. Secondo il sondaggio Mentor 2012 di Wilson, la lingua per gli FPGA è VHDL. Vedi http://blogs.mentor.com/verificationhorizons/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/


0

SystemC viene utilizzato per progetti complessi. Ad esempio, specificare qualcosa a livello di architettura. Vantaggio, meno linee di codice rispetto ai progetti Verilog, tempi di simulazione più rapidi, modelli precisi in termini di cicli. Non credere alla persona che dice che SystemC non è "non" sintetizzabile. Ovviamente è. Per darti un'idea, In Verilog abbiamo un livello di astrazione, puoi modellare con il livello di commutazione / livello comportamentale. La scelta è fatta in base alla complessità del design.

Un modo più familiare per descrivere l'hardware è usare Verilog, la cui sintesi è supportata in molti strumenti EDA.

Tipicamente per progetti più grandi i modelli SystemC e il banco di prova sono progettati dal progettista dell'architettura. Questi modelli sono stati poi dati al progettista elettronico per convertirli in RTL usando Verilog / VHDL.

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.