SystemC
SystemC to zestaw klas C++ i makr, które zapewniają interfejs symulacji sterowany zdarzeniami (zobacz także symulację zdarzeń dyskretnych ). Te udogodnienia umożliwiają projektantowi symulowanie współbieżnych procesów , z których każdy jest opisany przy użyciu prostej składni C++ . Procesy SystemC mogą komunikować się w symulowanym środowisku czasu rzeczywistego, wykorzystując sygnały wszystkich typów danych oferowanych przez C++, niektóre dodatkowe oferowane przez bibliotekę SystemC, a także zdefiniowane przez użytkownika. Pod pewnymi względami SystemC celowo naśladuje języki opisu sprzętu VHDL i Verilog , ale bardziej trafnie określa się go jako język modelowania na poziomie systemu .
modelowania na poziomie systemu , eksploracji architektury, modelowania wydajności, tworzenia oprogramowania , weryfikacji funkcjonalnej i syntezy wysokiego poziomu . SystemC jest często kojarzony z na poziomie systemu elektronicznego (ESL) oraz modelowaniem na poziomie transakcji (TLM).
Specyfikacja języka
SystemC jest zdefiniowany i promowany przez Open SystemC Initiative (OSCI — obecnie Accellera ) i został zatwierdzony przez IEEE Standards Association jako IEEE 1666-2011 — SystemC Language Reference Manual (LRM). LRM zapewnia ostateczne zestawienie semantyki SystemC. OSCI zapewnia również symulator weryfikacji koncepcji typu open source (czasami błędnie nazywany symulatorem referencyjnym), który można pobrać ze strony internetowej OSCI. Chociaż intencją OSCI było, aby dostawcy komercyjni i środowisko akademickie mogli tworzyć oryginalne oprogramowanie zgodne z IEEE 1666, w praktyce większość implementacji SystemC była przynajmniej częściowo oparta na symulatorze weryfikacji koncepcji OSCI.
W porównaniu do HDL
SystemC ma semantyczne podobieństwa do VHDL i Verilog , ale można powiedzieć, że ma narzut składniowy w porównaniu z nimi, gdy jest używany jako język opisu sprzętu . Z drugiej strony oferuje większy zakres ekspresji, podobnie jak partycjonowanie zorientowane obiektowo i klasy szablonów. Chociaż jest to ściśle biblioteka klas C++, SystemC jest czasami postrzegany jako język sam w sobie. Kod źródłowy można skompilować z biblioteką SystemC (która zawiera jądro symulacji), aby uzyskać plik wykonywalny. Wydajność implementacji open-source OSCI jest zwykle mniej optymalna niż komercyjne symulatory VHDL/Verilog, gdy są używane do poziomu transferu rejestrów . [ potrzebne źródło ]
Wersje
Wersja 1 SystemC zawierała wspólne funkcje języka opisu sprzętu, takie jak hierarchia strukturalna i łączność, dokładność cyklu zegara, cykle delta, logika czterowartościowa (0, 1, X, Z) oraz funkcje rozdzielczości magistrali.
SystemC w wersji 2 i nowszych koncentrował się na abstrakcji komunikacji, modelowaniu na poziomie transakcji i modelowaniu platform wirtualnych. Dodano również porty abstrakcyjne, procesy dynamiczne i powiadomienia o zdarzeniach w określonym czasie.
Funkcje językowe
Moduły
SystemC ma pojęcie klasy kontenera zwanej modułem. Jest to jednostka hierarchiczna, która może zawierać inne moduły lub procesy.
Moduły to podstawowe elementy składowe hierarchii projektu SystemC. Model SystemC zwykle składa się z kilku modułów, które komunikują się za pośrednictwem portów. Moduły można traktować jako blok konstrukcyjny SystemC.
Porty
Porty umożliwiają komunikację z wnętrza modułu na zewnątrz (zwykle do innych modułów) za pośrednictwem kanałów.
Sygnały
SystemC obsługuje sygnały rozwiązane i nierozwiązane. Rozwiązane sygnały mogą mieć więcej niż jeden sterownik (magistrala), podczas gdy nierozwiązane sygnały mogą mieć tylko jeden sterownik.
Eksport
Moduły posiadają porty, przez które łączą się z innymi modułami. SystemC obsługuje porty jednokierunkowe i dwukierunkowe.
Eksporty obejmują kanały i umożliwiają komunikację z wnętrza modułu na zewnątrz (zwykle do innych modułów).
Procesy
Procesy służą do opisu funkcjonalności. Procesy są zawarte w modułach. SystemC udostępnia trzy różne abstrakcje procesów [ które? ] do użytku przez projektantów sprzętu i oprogramowania. Procesy są głównymi elementami obliczeniowymi. Są równoległe.
Kanały
Kanały są elementami komunikacyjnymi SystemC. Mogą to być proste przewody lub złożone mechanizmy komunikacyjne, takie jak FIFO lub kanały magistrali .
Kanały podstawowe:
- sygnał: odpowiednik drutu
- bufor
- fifo
- muteks
- semafor
Interfejsy
Porty używają interfejsów do komunikacji z kanałami.
Wydarzenia
Zdarzenia umożliwiają synchronizację między procesami i muszą być zdefiniowane podczas inicjalizacji.
Typy danych
SystemC wprowadza kilka typów danych, które wspierają modelowanie sprzętu.
Rozszerzone typy standardowe:
-
sc_int<n>
n -bitowa liczba całkowita ze znakiem -
sc_uint<n>
n -bitowa liczba całkowita bez znaku -
sc_bigint<n>
n -bitowa liczba całkowita ze znakiem dla n > 64 -
sc_biguint<n>
n -bitowa liczba całkowita bez znaku dla n > 64
Typy logiki:
-
sc_bit
Pojedynczy bit o wartości 2 -
sc_logic
4-wartościowy pojedynczy bit -
sc_bv<n>
wektor o długości n z sc_bit -
sc_lv<n>
wektor o długości n z sc_logic
Typy punktów stałych:
-
sc_fixed<>
szablonowy podpisany stały punkt -
sc_ufixed<>
wzorcowy stały punkt bez znaku -
sc_fix
bez szablonu podpisany stały punkt -
sc_ufix
bez szablonu stały punkt bez znaku
Historia
- 1999-09-27 Ogłoszono Inicjatywę Open SystemC
- 2000-03-01 Wydano SystemC V0.91
- 2000-03-28 Wydano SystemC V1.0
- 2001-02-01 Wydano specyfikację SystemC V2.0 i kod źródłowy V1.2 Beta
- 2003-06-03 Wydano SystemC 2.0.1 LRM (podręcznik językowy)
- 2005-06-06 Wydanie standardu modelowania transakcji na poziomie SystemC 2.1 LRM i TLM 1.0
- 2005-12-12 IEEE zatwierdza standard IEEE 1666–2005 dla SystemC
- 2007-04-13 Wydano SystemC v2.2
- 2008-06-09 Wydano bibliotekę TLM-2.0.0
- 2009-07-27 Wydanie TLM-2.0 LRM wraz z biblioteką TLM-2.0.1
- 2010-03-08 Wydano rozszerzenia SystemC AMS 1.0 LRM
- 2011-11-10 IEEE zatwierdza standard IEEE 1666–2011 dla SystemC
- 2016-04-06 IEEE zatwierdza standard IEEE 1666.1–2016 dla SystemC AMS
SystemC wywodzi się z pracy nad językiem programowania Scenic opisanym w artykule DAC 1997.
ARM Ltd., CoWare , Synopsys i CynApps połączyły siły, aby opracować SystemC (CynApps później przekształciło się w Forte Design Systems ), aby uruchomić jego pierwszą wersję roboczą w 1999 roku. Głównym konkurentem w tamtym czasie był SpecC , inny pakiet open source oparty na C, opracowany przez personel UC Irvine i kilka japońskich firm.
czerwcu 2000 r. utworzono grupę normalizacyjną znaną jako Open SystemC Initiative, aby zapewnić neutralną w branży organizację do prowadzenia działalności SystemC i umożliwić największym konkurentom Synopsys, Cadence i Mentor Graphics, demokratyczną reprezentację w rozwoju SystemC.
Przykładowy kod
Przykładowy kod sumatora :
#include "systemc.h" SC_MODULE ( adder ) // deklaracja modułu (klasy) { sc_in < int > a , b ; // porty sc_out < int > suma ; void do_add () // proces { suma . napisz ( a . czytaj () + b . czytaj ());
//lub po prostu suma = a + b } SC_CTOR ( sumator ) // konstruktor { SC_METHOD ( do_add ); // zarejestruj do_add do wrażliwego na jądro << a << b ; // lista czułości do_add } };
Szacowanie mocy i energii w SystemC
Oszacowanie mocy i energii można przeprowadzić w SystemC za pomocą symulacji. Powersim to biblioteka klas SystemC przeznaczona do obliczania mocy i zużycia energii sprzętu opisanego na poziomie systemu. W tym celu operatorzy C++ są monitorowani, a dla każdego typu danych SystemC można stosować różne modele energetyczne. Symulacje z Powersim nie wymagają żadnych zmian w kodzie źródłowym aplikacji.
Zobacz też
Notatki
- 1666-2005 — Instrukcja obsługi języka standardowego systemu C IEEE . 2006. doi : 10.1109/IEEESTD.2006.99475 . ISBN 0-7381-4871-7 .
- 1666-2011 — Standard IEEE dla standardowego podręcznika języka SystemC . 2012. doi : 10.1109/IEEEESTD.2012.6134619 . ISBN 978-0-7381-6801-2 .
- T. Grötker, S. Liao, G. Martin, S. Swan, Projektowanie systemu z SystemC . Springer, 2002. ISBN 1-4020-7072-1
- Linux Live CD oparty na SystemC z samouczkiem C++/SystemC
- J. Bhasker, A SystemC Primer , wydanie drugie, Star Galaxy Publishing, 2004. ISBN 0-9650391-2-9
- DC Black, J. Donovan, SystemC: Od podstaw , wydanie drugie, Springer 2009. ISBN 0-387-69957-0
- George Frazier, SystemC: Konstrukcje zorientowane na sprzęt w C++
- Frank Ghenassia (redaktor), Modelowanie na poziomie transakcji za pomocą SystemC: TLM Concepts and Applications for Embedded Systems , Springer 2006. ISBN 0-387-26232-6
- Stan Y. Liao, Steven WK Tjiang, Rajesh K. Gupta: Wydajna implementacja reaktywności do modelowania sprzętu w środowisku projektowania scenicznego. DAC 1997: 70-75
Linki zewnętrzne
- Oficjalna strona internetowa
- Samouczek SystemC
- ESCUG - Europejska Grupa Użytkowników SystemC
- NASCUG - North American SystemC User's Group
- LASCUG - grupa użytkowników Systemu z Ameryki Łacińskiej
- ISCUG - Indyjska Grupa Użytkowników SystemC
- EDA Playground — darmowe środowisko C++/SystemC oparte na przeglądarce internetowej