Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Rendszerszint˝u tervez´es: SystemC I. Czirkos Zolt´an BME EET
2016. febru´ar 24.
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
Mir˝ol lesz sz´o? Magas szint˝ u tervez´es programoz´asi nyelvek seg´ıts´eg´evel HDL le´ır´as (Verilog / VHDL) is eml´ekeztet egy programra Ne kelljen k´ezzel el˝ o´all´ıtani HDL k´ odot, legyen el´eg egy ismert programoz´asi nyelven elk´esz´ıteni a rendszer le´ır´as´at
Mi´ert programoz´asi nyelv seg´ıts´eg´evel? Nem kell m´eg eld¨ onteni, mi lesz hardverben, mi lesz szoftverben Egy¨ utt tervezhet˝ o a hardver ´es a szoftver Mi a hardvertervez´es r´eszre koncentr´alunk
SystemC C++ oszt´alyok gy˝ ujtem´enye, amelyekkel lehet˝os´eg¨ unk van C++ fejleszt˝ oi k¨ ornyezetben a hardvert is reprezent´alni ´ compiled code szimul´aci´ Un. o is ´es hardverszint´ezis is lehets´eges Ny´ılt megold´as
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
Hardver-szoftver egy¨uttes tervez´es ESL: Electronic System Level design ≈ HSCD: Hardware-Software Co-Design L´enyeg: els˝ odleges szempontnak tekintj¨ uk, hogy az adott rendszert min´el magasabb absztrakci´ os szinten ´ırjuk le. Az ESL szeml´elet a rendszerszint˝ u tervekn´el egyre elterjedtebb. A vil´ag vezet˝ o system-on-a-chip (SoC) tervez˝o c´egei ir´anyelv¨ uknek tekintik.
A hardver-szoftver egy¨ uttes tervez´es c´eljai: magas absztrakci´ os szint, k¨ onnyebben ´atl´athat´o terv legyen, hib´akat gyorsabban meg lehessen tal´alni, optimaliz´alni lehessen a hardver/szoftver particion´al´ast, cs¨ okkenjen a piacra ker¨ ul´es ´atfut´asi ideje, ´es hogy cs¨ okkenjenek a fejleszt´esi k¨ olts´egek.
SystemC – a HSCD jellegzetes eszk¨ oze
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
A SystemC I.
A SystemC nyelv egy C++ k¨ onyvt´ar ´es met´ odus gy˝ ujtem´eny, ami igen hat´ekonyan haszn´alhat´ o szoftveres algoritmusok k´esz´ıt´es´ere, hardver architekt´ ur´ak modellez´es´ere, valamint SoC ´es rendszer szint˝ u modellek interf´esz´enek megval´os´ıt´as´ara.
A SystemC ´es a hagyom´anyos C++ fejleszt˝ oi k¨ornyezet haszn´alat´aval rendszer szint˝ u modellek ´ırhat´ ok le, ezek azut´an gyorsan szimul´alhat´ ok ´es optimaliz´alhat´ ok. A rendszert le´ır´o modell egy C++ program, ami futtatva ugyanazt a viselked´est produk´alja, amit maga a rendszer
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
A SystemC II.
A SystemC olyan oszt´alyokat tartalmaz, amelyekkel a megszokott nyelv ´es feljeszt˝ o eszk¨ oz¨ ok haszn´alat´aval k´epesek lesz¨ unk hardver le´ır´as´ara A SystemC olyan hardverhez k¨ ozeli modellez´esi lehet˝os´egeket biztos´ıt, mint a p´arhuzamoss´ag, id˝ oz´ıt´esek, k´esleltet´esek, hardverk¨ ozeli kommunik´aci´ os csatorn´ak (pl. portok), hardver-megval´ os´ıt´asokban haszn´alt adatt´ıpusok,
melyek a C++-ban nincsenek meg, hiszen az egy szekvenci´alis programoz´asi nyelv, amely szoftverfejleszt´eshez val´o.
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
A SystemC c´elja Rendszerszint˝ u modellek fejleszt´ese magas absztrakci´ os szint a m˝ uk¨ od´es vizsg´alata szimul´aci´ oval
Magasszint˝ u hardverle´ır´asb´ ol szint´ezis szintetiz´alhat´ o k´ odot kell ´ırni bizonyos nyelvi elemeket – pl. pointereket – ker¨ ulni kell kimenet: Verilog vagy VHDL le´ır´as, ami egy target technol´ ogi´ara val´ oban szintetiz´alhat´o
Szimul´aci´ohoz: SystemC library ´es egy C++ ford´ıt´o kell Szint´ezis: szabad hozz´af´er´es˝ u programokkal megoldhat´o. Pl. SystemC k¨ onyvt´ar CvSDL Waveform Viewer 0.3.1 SystemCrafter SC v2.0.0.3 Xilinx ISE WebPack 8.2i
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
SystemC alap´u szint´ezis ´es szimul´aci´o
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
A SystemC komponensei Modul egy container, ami m´as modulokat ´es process-eket foglalhat mag´aban (C++ oszt´aly) Process folyamat – egy adott funkcionalit´as le´ır´as´ara szolg´al Signal jel – t´amogatott a 2 (0,1) ´es 4 (0,1,X,Z) ´ert´ek˝ u logika is Port jelek csatlakoz´ o pontja Adatt´ıpusok sokf´ele t´ıpus, k¨ ul¨ onf´ele szempontok szerint haszn´alhat´ ok. Vigy´azat – szintetiz´alhat´os´ag! ´ Orajel az id˝o modellez´es´ere szolg´al´ o spec. jel Szimul´aci´os kernel – lehet˝ ov´e teszi a gyors (compiled k´od´ u) szimul´aci´ ot Jelalak-figyel´es VCD (Value Change Dump), WIF (Waveform Intermediate Format) ´es ISDB (Integrated Signal Data Base) form´atum´ u jelalak f´ajlok t´amogat´asa
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
Az id˝o modellez´ese
A SystemC k¨onyvt´ar egyik legfontosabb komponense a m´ar eml´ıtett id˝omodellez´es. Ezt a nyelv 64-bites el˝ ojel n´elk¨ uli eg´esz sz´amokkal ´ırja le. Ez a programoz´o sz´am´ara az sc time t´ıpus m¨ og´e van b´ ujtatva. Ilyen m´odon t¨ort´en˝ o implement´al´asa miatt az id˝o nem ´ırhat´o le folytonos, anal´og m´ odon, csak diszkr´et ´ert´ekekkel. Ennek k¨ovetkezt´eben van egy legkisebb ´abr´azolhat´o id˝okvantum, amit id˝ ofelbont´asnak nevez¨ unk. Ez a nyelv haszn´al´ oja ´altal be´all´ıthat´ o. Default egys´eg: ps. 264 ps = 213 nap. :)
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
Hardver adatt´ıpusok A hardver modellez´es c´elj´ara a SystemC-ben hasonl´o adatt´ıpusok l´eteznek, mint a Verilog-ban, pl. sc logic, sc lv. Pl. DSP jelleg˝ u hardverekhez, sz´am´ıt´asi algoritmusok implement´al´as´ara szolg´al´ o t´ıpusok a sc fixed ´es az sc int
Mivel a SystemC a C++-on alapul, ´ertelemszer˝ uen minden C++ adatt´ıpus haszn´alhat´ o, ha nem sz¨ uks´eges valamit SystemC t´ıpussal reprezent´alni. Fontos szempontok az adatt´ıpusokkal kapcsolatban: Bizonyos adatt´ıpusok haszn´alata nem teszi lehet˝ov´e a hardverszint´ezist. Minden olyan modulban, amit esetleg hardverk´ent szeretn´enk megval´ os´ıtani, az ilyen t´ıpusokat ker¨ ulni kell. A SystemC adatt´ıpusok sok mem´ ori´at ig´enyelnek, ´es jelent˝osen lass´ıthatj´ak a szimul´aci´ ot.
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Modulok ´es met´odusok A modulok egy SystemC terv alapvet˝ o ´ep´ıt˝ ok¨ ovei, hasonl´oan a C++ oszt´alyokhoz. Egy modul egy m´asik modulban p´eld´anyos´ıthat´o (pl. t¨obb flipflop egy sz´aml´al´ oban) Minden alacsonyabb szint˝ u modul p´eld´anyos´ıthat´o magasabb szint˝ u modulokban Az SC METHOD ´es az SC THREAD t´ıpus´ u f¨ uggv´enyek jelentik a modellez´es alapj´at a SystemC-ben. SC METHOD nem ker¨ ul id˝ obe a v´egrehajt´asuk SC THREAD egy esem´enyre v´arnak (pl. ´ orajel pozit´ıv ´ele), azt´an egy adott ideig futnak” ”
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Hello world SystemC-ben – modulok szintaxisa
#include ”systemc.h” SC MODULE(hello world) { // hello world: modul neve SC CTOR(hello world) {} // ez most u ¨res void say hello() { cout << ”Hello World.\n”; } }; int sc main(int argc, char ∗argv[]) { hello world hello(”hello”); // modul p´eld´anyos´ıt´asa hello.say hello(); return 0; }
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
M´asodik p´elda: inverter I. – a modul Az inverter nev˝ u modulnak egy-egy 1 bites bemene ´es kimenete van. A m˝ uk¨od´est le´ır´o f¨ uggv´eny a bement jelszintj´enek b´armely ir´any´ u v´altoz´as´ara lefut. #include ”systemc.h” SC MODULE(inverter) { sc in
be; // bemenet sc out ki; // kimenet
};
#include ”inverter.h”
void inverterproc();
void inverter::inverterproc() { ki.write(!be.read()); }
SC CTOR(inverter) { SC METHOD(inverterproc); sensitive << be; }
A m˝ uk¨ od´es egyszer˝ u: beolvassuk a bemenetet (read), invert´aljuk (felki´alt´ ojel oper´ator) ´es ki´ırjuk a kimenetre (write).
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
M´asodik p´elda: inverter II. – a testbench #include ”inverter.h” int sc main(int argc, char ∗argv[]) { // vezet´ekek sc signal BE, KI; // p´eld´anyos´ıt´as inverter i1(”i1”); // bemenet ´es kimenet bek¨ ot´ese i1.be(BE); i1.ki(KI); sc start(1, SC NS); // trace f´ajl megnyit´asa sc trace file ∗tf = sc create vcd trace file(”out”); sc trace(tf, BE, ”BE”); sc trace(tf, KI, ”KI”);
// bemenetek BE=0; sc start(2, SC BE=1; sc start(2, SC BE=0; sc start(2, SC BE=1; sc start(2, SC BE=0; sc start(2, SC
v´altoztat´asa NS); NS); NS); NS); NS);
// trace f´ajl bez´ar´asa sc close vcd trace file(tf); return 0; }
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
M´asodik p´elda: inverter III. – magyar´azatok Az inverter i1(”i1”); sorban t¨ ort´enik a p´eld´anyos´ıt´as, az i1.be(BE); pedig azt jelenti, hogy az i1 n´even p´eld´anyos´ıtott inverter be nev˝ u portj´ahoz k¨ otj¨ uk a fent deklar´alt BE jelet. Az sc start(1, SC NS) l´epteti 1 ns-mal a szimul´aci´os kernelt (szimul´aci´os ´or´at). A jelalakfigyel´eshez l´etrehozunk egy out.vcd nev˝ u f´ajlt, amelyre a k´od tov´abbi r´esz´eben tf n´even fogunk hivatkozni. Az ezt k¨ovet˝o k´et sor mondja meg, hogy mely f´ajlba melyik jel v´altoz´asait jegyezze fel a SystemC, ´es milyen n´even jelen´ıtse meg azt. Amint az l´athat´o, az inverter bemeneti portj´ahoz k¨ot¨ott jelnek ´ert´eket adunk, majd l´eptj¨ uk a szimul´aci´ ot 2 egys´eggel, stb. A v´eg´en lez´arjuk a jelalakot tartalmaz´ o f´ajlt.
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
Harmadik p´elda: sz´aml´al´o
void incr count() { // sz´ aml´ al´ o logika // reset jel? if (reset.read() == 1) { count = 0; counter out.write(count); } // ha enged´ elyezve van, sz´ amol else if (enable.read() == 1) { count = count + 1; counter out.write(count); cout <<”@”<< sc time stamp()<< ” :: Incremented Counter ” <
SC MODULE(first counter) { // kimenetek, bemenetek sc in clk clock; sc in reset; sc in enable; sc out<sc uint<4> > counter out; // bels˝ o´ allapotok (regiszterek) sc uint<4> count; // konstruktor SC CTOR(first counter) { SC METHOD(incr count); sensitive << clock.pos(); // felfut´ o´ el }
};
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Negyedik p´elda: o´rajelgener´ator SC MODULE(ClockGen) { // Clock gen sc out clk clock out; void clockgen() { while (true) { clock out = true; wait(500, SC US); clock out = false; wait(500, SC US); } } SC CTOR(ClockGen) { SC THREAD(clockgen); } };
Ez nem szintetiz´alhat´o, tesztel´esre (testbench-be) viszont kit˝ un˝o.
Irodalom
Bevezet´ es
A SystemC c´ elja
A SystemC alapjai
Irodalom
http://www.asic-world.com/systemc/tutorial.html 1666-2005 IEEE Standard SystemC Language Reference Manual http://shop.ieee.org/ieeestore/Product.aspx?product_ no=SS95505 SystemC User’s Guide v2.0.1 https://www.systemc.org/ projects/sitedocs/document/v201_Users_guide/en/1 SystemC Language Reference Manual v2.1 https://www.systemc.org/download/5/3/60/104/ SystemC to Verilog Synthesizable Subset Translator http: //www.opencores.org/projects.cgi/web/sc2v/overview
Irodalom