HM-ES-th1 Les 4 Hardware/Software Codesign with SystemC
SystemC Hiërarchie Een module kan (sub)modules bevatten 18 in port out port module submodule channel submodule
Verbindingen tussen modules Verbindingen tussen hiërarchische niveaus: Input van module (rechtstreeks) verbonden met input van submodule. Output van submodule (rechtstreeks) verbonden met output van module. Verbindingen binnen een hierarchische niveau: Output van een module (via een channel) verbonden met de input van een andere module (op hetzelfde niveau). 19
2 bit full adder Schema (opgebouwd uit twee 1 bit full adders). 20 A0 S0 Adder2Bits carry adder0 AB Cin SCout adder1 AB Cin SCout B0 Cin A1 B1 S1Cout
2 bit full adder SC_MODULE(Adder2Bits) { sc_in A0, B0, A1, B1, Cin; sc_out S0, S1, Cout; SC_CTOR(Adder2Bits): adder0("adder0"), adder1("adder1") { adder0.A(A0); adder0.B(B0); adder0.Cin(Cin); adder0.S(S0); adder0.Cout(carry); adder1.Cin(carry); adder1.A(A1); adder1.B(B1); adder1.S(S1); adder1.Cout(Cout); } private: Adder adder0, adder1; sc_signal carry; }; 21
2 bit full adder (alternatief) SC_MODULE(Adder2Bits) { sc_in A0, B0, A1, B1, Cin; sc_out S0, S1, Cout; SC_CTOR(Adder2Bits) { SC_METHOD(add); sensitive << A0 << B0 << A1 << B1 << Cin; } private: void add() { sc_uint a = 0, b = 0, c = 0; a[1] = A1.read().to_bool(); a[0] = A0.read().to_bool(); b[1] = B1.read().to_bool(); b[0] = B0.read().to_bool(); c[0] = Cin.read().to_bool(); sc_uint s = a + b + c; S0.write(sc_logic(s[0].to_bool())); S1.write(sc_logic(s[1].to_bool())); Cout.write(sc_logic(s[2].to_bool())); } }; 22
De 2 bit full adder opgebouwd met twee 1 bit full adders noemen we een structural model. De 2 bit full adder waarvan het gedrag wordt beschreven zonder gebruik te maken van submodules noemen we een behavioral model. 23
Modules Modules are the basic building blocks for partitioning a design A module is a structural entity, which can contain processes, ports, channels, member functions not registered as processes and instances of other modules A module is the foundation of structural hierarchy Modules allow designers to hide internal data representation and algorithms from other modules Designers are forced to use public interfaces to other modules, thus making the entire system easier to change and maintain reusability = lower design time 24
Processes Processes are small pieces of code that run concurrently with other processes. Functionality is described in processes. Processes must be contained within a module. They are registered as processes with the SystemC kernel, using a process declaration in the module constructor. Processes accept no arguments and produce no output 25
SystemC in UML 26
Fixed point getallen Een fixed point getal heeft een bepaald aantal bits voor de decimale punt en een bepaald aantal bits na de decimale punt. Fixed point getallen kunnen in een integer worden opgeslagen. De programmeur moet dan wel zelf onthouden waar de decimale punt staat. Rekenen met fixed point getallen: Optellen en aftrekken niets bijzonders. Vermenigvuldigen resultaat naar rechts schuiven zodat decimale punt weer goed staat. Delen resultaat naar links schuiven zodat decimale punt weer goed staat. 27