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:
- Queste nozioni di quali systemC e Verilog (o lingue HDL, se lo desideri) sono corrette?
- Quando dovrei usare SystemC e quando Verilog?
- 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 ...
- 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?
- 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!