close

SystemC

Mergi la navigare Mergi la căutare

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

Link- uri externe