SystemC
SystemC beskrives ofte som et hardwarebeskrivelsessprog som VHDL og Verilog , men det beskrives mere præcist som et systembeskrivelsessprog , da det er virkelig nyttigt, når det bruges til at modellere systemer på adfærdsniveau.
Beskrivelse
SystemC er et sæt af biblioteker og makroer implementeret i C++ , der gør det muligt at simulere samtidige processer med syntaksen for det almindelige C++ sprog. Således kan de beskrevne objekter kommunikere under en realtidssimulering ved hjælp af signaler af enhver type, der tilbydes af C++, plus nogle andre, der tilbydes af SystemC-bibliotekerne og også andre, der er defineret af brugeren.
Designmetoden er at starte med en højniveaumodel skrevet i C++ og anvende en iterativ proces med at transformere koden til kun at bruge de elementer, der har deres ækvivalent i et hardwarebeskrivelsessprog.
Sprog
Moduler
Moduler ( modul ) er de grundlæggende byggeklodser i designet af et hierarki i SystemC. En SystemC-model består typisk af flere moduler, der kommunikerer gennem porte.
Porte
Porte ( port ) giver et modul mulighed for at kommunikere med omverdenen, normalt med andre moduler.
Processer
Processerne ( processerne ) er hovedelementerne i beregningen. De er samtidige.
Kanaler
Kanaler er kommunikationselementer i SystemC. De kan være simple kabler eller komplekse mekanismer såsom FIFO-systemer eller busser. De grundlæggende kanaler er:
- signal
- buffer
- FIFO
- mutex
- semafor
Grænseflader
Grænseflader bruges af porte til at kommunikere med kanaler.
Begivenheder
Hændelser ( hændelser ) tillader synkronisering mellem processer.
Datatyper
SystemC introducerer forskellige datatyper for at understøtte hardwaremodellering.
Udvidede typer
- sc_int<> 64-bit signeret heltal
- sc_uint<> 64-bit usigneret heltal
- sc_bigint<> vilkårlig -præcision signeret heltal
- sc_biguint<> usigneret heltal med vilkårlig præcision
Logiske typer
- sc_bit en bit med kun to mulige værdier2-værdi single bit
- sc_logic en bit, hvori 4 værdier kan gives
- sc_bv<> vektor af sc_bit
- sc_lv<> array af sc_logic
- sc_lv<> er normalt udtrykt i decimaltal
Typer af faste punkter
- sc_fixed<> skabelon signeret fikspunkt
- sc_ufixed<> skabelon usigneret fikspunkt
- sc_fix untemplated signeret fikspunkt
- sc_ufix ustempleret usigneret fikspunkt
Kodeeksempel
Følgende eksempel er en adder:
#include "systemc.h"
SC_MODULE(adder) // modul, klasseerklæring
{
sc_in<int> a, b; // porte
sc_out<int> sum;
void do_add() // proces
{
sum = a + b;
}
SC_CTOR(adder) // konstruktør
{
SC_METHOD(do_add); // do_add log til kernen
følsom << a << b; // do_add følsomhedsliste
}
};
Alternativer
SystemC bruger kode skrevet i C som input til dets synteseprogrammer. En anden mulighed er at transformere en beskrivelse lavet i et programmeringssprog til et hardwarebeskrivelsessprog såsom VHDL eller Verilog, nogle værktøjer til dette er:
- BachC
- CoWare
- OCAPI
- CynApps
- HDL-C2
- AR|T Builder
Se også
- Hardware -software co-design
- kredsløbsdesign
- Record Transfer Level (RTL)
Eksterne links
- SystemC hjemmeside
- En Linux "Live" CD fra SystemC med C++/SystemC tutorial
- Synopsys , skabere af CoCentric SystemC Compiler
- European SystemC User Group
- SystemC Vejledning