1 / 14

Hardware/Software Codesign with SystemC

Hardware/Software Codesign with SystemC. HM-ES-th1 Les 3. SystemC Module. Elementary building blocks. event. i n port. module. trigger. process. Beschrijft gedrag. read. write. Bijvoorbeeld: waarde op in port wijzigt. out port. SystemC SC_MODULE.

hedda
Download Presentation

Hardware/Software Codesign with SystemC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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

More Related