SystemC
SystemC este adesea descris ca un limbaj de descriere hardware, cum ar fi VHDL și Verilog , dar este descris mai precis ca un limbaj de descriere a sistemelor , deoarece este cu adevărat util atunci când este utilizat pentru modelarea sistemelor la nivel comportamental.
Descriere
SystemC este un set de biblioteci și macrocomenzi implementate în C++ care fac posibilă simularea proceselor concurente cu sintaxa limbajului obișnuit C++. Astfel, obiectele descrise pot comunica în timpul unei simulări în timp real folosind semnale de orice tip oferite de C++, plus unele oferite de bibliotecile SystemC și de asemenea altele definite de utilizator.
Metodologia de proiectare este de a începe cu un model de nivel înalt scris în C++ și de a aplica un proces iterativ de transformare a codului pentru a utiliza doar acele elemente care au echivalentul lor într-un limbaj de descriere hardware.
Limba
Module
Modulele ( module ) sunt blocurile de bază în proiectarea unei ierarhii în SystemC. Un model SystemC constă de obicei din mai multe module care comunică prin porturi.
Porturi
Porturile ( port ) permit unui modul să comunice cu lumea exterioară, de obicei cu alte module.
Procese
Procesele ( procesele ) sunt principalele elemente de calcul. Sunt concurente.
Canale
Canalele sunt elemente de comunicare ale SystemC. Pot fi cabluri simple sau mecanisme complexe precum sisteme FIFO sau magistrale. Canalele de bază sunt:
- semnal
- tampon
- FIFO
- mutex
- semafor
Interfețe
Interfețele sunt folosite de porturi pentru a comunica cu canalele.
Evenimente
Evenimentele ( evenimente ) permit sincronizarea între procese.
Tipuri de date
SystemC introduce diverse tipuri de date pentru a sprijini modelarea hardware.
Tipuri extinse
- sc_int<> întreg semnat pe 64 de biți
- sc_uint<> întreg fără semn pe 64 de biți
- sc_bigint<> număr întreg cu semn de precizie arbitrar
- sc_biguint<> număr întreg fără semn cu precizie arbitrară
Tipuri logice
- sc_bit un bit cu doar două valori posibile cu un singur bit cu 2 valori
- sc_logic un pic în care pot fi date 4 valori
- sc_bv<> vector de sc_bit
- sc_lv<> matrice de sc_logic
- sc_lv<> este de obicei exprimat în numere zecimale
Tipuri de puncte fixe
- sc_fixed<> șablon semnat punct fix
- sc_ufixed<> șablon punct fix nesemnat
- sc_fix punct fix semnat fără șablon
- sc_ufix punct fix nesemnat fără șablon
Exemplu de cod
Următorul exemplu este un sumator:
#include „systemc.h”
SC_MODULE(adăugător) // modul, declarație de clasă
{
sc_in<int> a, b; // porturi
sc_out<int> suma;
void do_add() // proces
{
suma = a + b;
}
SC_CTOR(adunator) // constructor
{
SC_METODA(do_add); // do_add log la kernel
sensibil << a << b; // do_add lista de sensibilități
}
};
Alternative
SystemC folosește codul scris în C ca intrare în programele sale de sinteză. O altă opțiune este de a transforma o descriere făcută într-un limbaj de programare într-un limbaj de descriere hardware precum VHDL sau Verilog, unele instrumente pentru aceasta sunt:
- BachC
- CoWare
- OCAPI
- CynApps
- HDL-C2
- AR|T Builder
Vezi și
- Co-proiectare hardware - software
- proiectarea circuitelor
- Nivel de transfer de înregistrări (RTL)
Link- uri externe
- Site-ul web SystemC
- Un CD „Live” Linux de SystemC cu tutorial C++/SystemC
- Synopsys , creatorii compilatorului CoCentric SystemC
- Grupul de utilizatori European SystemC
- Ghidul SystemC