Temat: Nowe wydanie standardu SystemC
Jerzy G.:
Cześć,
Witam
Moje doświadczenie ogranicza się do VHDL'a i czytania ze zrozumieniem Verilog'a.
Opierając się na moim doświadczeniu chciałbym Ci zasugerować lepsze zgłębienie Veriloga. Wydaje mi się że z czasem VHDL ulegnie dużej marginalizacji właśnie na rzecz Veriloga lub syntezowalnego SystemC/C++. To już się dzieje i wydaje mi się że będzie się pogłębiać. Tym bardziej w kontekście SystemC. Verilog jest po prostu o wiele wygodniejszy w użyciu i integracji z modelami w SystemC/C++, chociaż wiąże się to z pewnymi pułapkami na które trzeba uważać.
Pytania, czy SystemC daje się już używać w praktyce?
Rozumiem, że bardziej służy on do symulacji niż do implementacji.
Powiedziałbym że już od bardzo dawna się daje używać w praktyce. Poprzednia wersja z 2005 (standard)/2006 (implementacja 2.2), w połączeniu z TLM 2.0 to bardzo potężne narzędzie.
Z tym że jak zawsze jest jakieś "ale". W tym przypadku chodzi o zastosowanie.
Jeżeli chodzi o modele syntezowalne to narzędzia są ciągle rozwijane i nie sądzę żeby był wygodniejszy od VHDL/Verilog, aczkolwiek nie mam żadnego doświadczenia z syntezą wysokopoziomową, nie wiem jaka jest użyteczność narzędzi typu Catapult C od Mentora. Z opisu na stronie internetowej wydaje się, że wciąż jest to najpierw synteza do poziomu RTL i następnie synteza takiego opisu przy użyciu Leonardo czy Precision.
Modelowania w SystemC na poziomie RTL nawet nie biorę pod uwagę. Da się, tylko po co? Ogromny narzut kodu w stosunku do klasycznych języków HDL, problematyczna synteza...
Jeśli chodzi o weryfikację, czyli pisanie testbencha. Tutaj sprawa nie jest jednoznaczna. Symulacja modelu mieszanego (DUV w VHDL/Verilog, TB w SystemC) może być dość kłopotliwa w uruchomieniu, zwłaszcza szukanie potencjalnych problemów. Jednak jak się już model uruchomi (mam doświadczenie z Questą od Mentora i NCSim/IUS od Cadence'a) to można dać się ponieść wykorzystując wszelkie dobrodziejstwa C++ ze STL włącznie. Wydaje się tu obowiązywać prosta zależność: im bardziej skomplikowane algorytmy w TB które preferują implementację w C/C++ tym bardziej uzasadnione jest stosowanie SystemC. W prostszych środowiskach zdecydowanie lepiej używać do testbencha tego samego języka co do implementacji. Nie mogę nie wspomnieć o SystemVerilogu, który w rozważanym zakresie już jest standardem i raczej SystemC go nigdy nie zastąpi. Jednakże zagadnienie SystemC czy SystemVerilog to już całkiem inna para kaloszy i temat na o wiele dłuższy elaborat. Wspomnę tylko, że mam obecnie na tapecie projekt w którym implementacja jest w Verilogu, testbench w SystemC a gdzieś po drodze jest jeszcze SystemVerilog (głównie SVA) i z takim zestawem można całkiem przyjemnie pracować.
Po trzecie - modelowanie systemów na poziomie TLM lub ESL (komunikacja pomiędzy elementami systemu, wydajność, współpraca z oprogramowaniem). Tutaj zdecydowanie SystemC, zwłaszcza przy bardziej złożonych algorytmach. Wydaje się że to jest przyszłość. Modelowanie w RTLu systemów które mają złożoność sięgającą dziesiątek czy setek milionów bramek przeliczeniowych jest bardzo nieefektywne i jak już narzędzia do syntezy wysokopoziomowej będą zapewniały odpowiednie wsparcie to w tym kierunku widzę rozwój projektowania scalaków.
Czy jest wygodny?
J/w - zależy od zastosowania: o RTL zapomnij, testbench w niektórych przypadkach bardzo wygodny (przy zastosowaniu odpowiednich narzędzi), w innych niekoniecznie, ESL/TLM - zdecydowanie tak.
Polecasz jakieś narzędzia?
Tutaj właściwie zbyt wielkich możliwości wyboru nie ma. Jeśli trzeba symulować model mieszany to trzeba stosować narzędzia komercyjne w wersjach zaawansowanych. Mogę polecić mentorowską Questę. Bardzo wygodne narzędzie, w dodatku w wersji linuksowej z każda wersją coraz ściślej integrowana z narzędziami 0in do weryfikacji formalnej i CDC. Zawiera własne, dostosowane do debugu wersje SystemC, SCV i TLM - dla przykładu, każde pole klasy dziedziczącej po sc_module, włącznie ze zmiennymi natywnych typów C++ jest widoczne w strukturze i może być obserwowane na przebiegach.
Do symulacji modeli wysokopoziomowych w samym SystemC wystarczy referencyjna, darmowa implementacja kernela od Accellery (przedtem OSCI). Należy pamiętać, że SystemC to tak naprawdę nie jest język, ale biblioteka szablonów,klas i typów C++ zorientowana na modelowanie układów współbieżnych. Uzupełniona o implementację symulatora cycle-based napisanego również w C++ stanowi rozwiązanie umożliwiające symulację kompletnego modelu.
Z ciekawostek.
Istnieje bardzo ciekawe otwarte (i darmowe) narzędzie o nazwie Verilator. Program tłumaczy opis Verilogowy (tylko konstrukcje na poziomie RTL i też z pewnymi ograniczeniami) na SystemC, C++ lub Perla. Dzięki temu można stworzyć model środowiska całkowicie w SystemC, choć DUT jest implementowany w Verilogu, i do symulacji wykorzystać symulator referencyjny od Accellery.
Pozdrawiam,
Paweł