Hardware/Software Codesign with SystemC - PowerPoint PPT Presentation

hedda
hardware software codesign with systemc n.
Skip this Video
Loading SlideShow in 5 Seconds..
Hardware/Software Codesign with SystemC PowerPoint Presentation
Download Presentation
Hardware/Software Codesign with SystemC

play fullscreen
1 / 14
Download Presentation
Hardware/Software Codesign with SystemC
140 Views
Download Presentation

Hardware/Software Codesign with SystemC

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Hardware/Software Codesignwith SystemC HM-ES-th1 Les 3

  2. SystemC Module • Elementary building blocks event in port module trigger process Beschrijft gedrag read write Bijvoorbeeld: waarde op in port wijzigt out port

  3. SystemCSC_MODULE • Een module wordt gedefinieerd als een class m.b.v. de macro SC_MODULE(…). • Een input port worden gedefinieerd als sc_in<…>. • Een output port worden gedefinieerd als sc_out<…>. • Een process wordt gedefinieerd als memberfunctie en geregistreerd in de constructor met de macro SC_METHOD. (Er zijn ook nog andere soorten processen.) • De constructor wordt gedefinieerd m.b.v. de macro SC_CTOR(…). • De events waardoor de SC_METHOD start worden in de constructorgedefinieerd m.b.v. sensitive.

  4. 1 bit full adder • Schema op poortniveau

  5. 1 bit full adder tempD SC_MODULE(Adder) { sc_out<sc_logic> S, Cout; sc_in<sc_logic> A, B, Cin; SC_CTOR(Adder) { SC_METHOD(add); sensitive<< A << B << Cin; } private: voidadd() { sc_logictempC, tempD, tempE; tempC= A.read() & B.read(); tempD= A.read() ^ B.read(); tempE= Cin.read() & tempD; S.write(tempD^ Cin.read()); Cout.write(tempC| tempE); } }; tempE tempC sc_logic is een 4-value type. Een variabele van het type sc_logic kan de waarde SC_LOGIC_0, SC_LOGIC_1, SC_LOGIC_X of SC_LOGIC_Z hebben.

  6. 1 bit full adder SC_MODULE(Adder) { sc_out<sc_logic> S, Cout; sc_in<sc_logic> A, B, Cin; SC_CTOR(Adder) { SC_METHOD(add); sensitive<< A << B << Cin; } private: voidadd() { // zonder lokale variabelen S.write(A.read() ^ B.read() ^ Cin.read()); Cout.write(A.read() & B.read() | Cin.read() & (A.read() ^ B.read())); } };

  7. 1 bit full adder SC_MODULE(Adder) { sc_out<sc_logic> S, Cout; sc_in<sc_logic> A, B, Cin; SC_CTOR(Adder) { SC_METHOD(add); sensitive<< A << B << Cin; } private: voidadd() { // m.b.v. impliciete type conversies en operator overloading S = A ^ B ^ Cin; Cout = A & B | Cin& (A ^ B); } }; Raad ik niet aan

  8. Testbench • We gebruiken een testbench om (één of meerdere) module(s) te testen. Testbench TA TB TCin Adder Cin A B S Cout

  9. Wachten • In de beschrijving van de testbench willen we kunnen wachten. • Dit kan niet in een SC_METHOD maar wel in een SC_THREAD. Een SC_THREAD wordt slechts 1x aangeroepen door de SystemCkernel. Namelijk aan het begin van de simulatie.

  10. Testbench voor 1 bit full adder SC_MODULE(Testbench) { sc_out<sc_logic> TA, TB, TCin; SC_CTOR(Testbench) { SC_THREAD(testprocess); } private: voidtestprocess() { TA.write(SC_LOGIC_0); TB.write(SC_LOGIC_0); TCin.write(SC_LOGIC_0); wait(10, SC_NS); TA.write(SC_LOGIC_1); wait(10, SC_NS); TB.write(SC_LOGIC_1); wait(10, SC_NS); TCin.write(SC_LOGIC_1); wait(10, SC_NS); TA.write(SC_LOGIC_0); TB.write(SC_LOGIC_0); TCin.write(SC_LOGIC_0); } };

  11. Programma voor 1 bit full adder intsc_main(intargc, char *argv[]) { sc_signal<sc_logic> A, B, Cin; sc_signal<sc_logic> S, Cout; Adderadder("adder"); adder.A(A); adder.B(B); adder.Cin(Cin); adder.S(S); adder.Cout(Cout); Testbenchtb("tb"); tb.TA(A); tb.TB(B); tb.TCin(Cin); tb A B channels Cin TA TB TCin adder Cin A B S Cout channels S Cout

  12. Programma voor 1 bit full adder // Record (trace) signals for verification autotf= sc_create_vcd_trace_file("trace"); tf->set_time_unit(1, SC_NS); sc_trace(tf, A, "A"); sc_trace(tf, B, "B"); sc_trace(tf, Cin, "Cin"); sc_trace(tf, S, "S"); sc_trace(tf, Cout, "Cout"); // Start the simulation for 200ns sc_start(200, SC_NS); sc_close_vcd_trace_file(tf); return0; }

  13. Output in GTKWave

  14. Betere testbench • Geautomatiseerde module test (unit test). Testbench Rapporteert fout of OK Adder Huiswerk: Schrijf een automatische testbench voor SC_MODULE(Adder) Cin A B S Cout