© Harry Broeders.
Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Faculteit Technologie, Innovatie & Samenleving groep E-EMSYS = minor Embedded Systems.
Deze handleidig gaat ervan uit dat de programma's Visual Studio Express 2013 for Windows Desktop en gtkwave al geïnstalleerd zijn en dat de SystemC library al geïnstalleerd en gecompileerd is. Begin hier als dit niet het geval is.
Thuis heb je de SystemC library waarschijnlijk geïnstalleerd in het directory C:\systemc-2.3.1. In lokaal 1.052 op de faculteit TIS van de HHS is de SystemC library geïnstalleerd in Q:\Grp_Elektrotechniek\Embedded_systems\systemc-2.3.1.
Visual Studio Express 2013 for Windows Desktop werkt alleen op Windows 7 en hoger, als je nog Windows XP gebruikt dan kun je gebruik maken van Microsoft Visual C++ 2010 Express Edition, zie hier.

SystemC_test als naam
voor het project.



SystemC_test als een naam voor
de cpp file.

C:\systemc-2.3.1\src (thuis) of
Q:\Grp_Elektrotechniek\Embedded_systems\systemc-2.3.1\src
(TIS).
_CRT_SECURE_NO_WARNINGS; Dit voorkomt dat de
Visual C++ compiler warnings geeft bij het compileren van de SystemC
headerfile. 

/vmg.
C:\systemc-2.3.1\msvc80\SystemC\Debug
(thuis) of
Q:\Grp_Elektrotechniek\Embedded_systems\systemc-2.3.1\msvc80\SystemC\Debug
(TIS).
SystemC.lib;.
#include <systemc>using namespace sc_core;using namespace sc_dt;using namespace std;/* Simple DFF */SC_MODULE(dff) {/* Model of a Data Flip-Flop that reacts on a negative edge of the clock signal clk */sc_in_clkclk;sc_in<sc_logic> din;sc_out<sc_logic> dout;SC_CTOR(dff) {SC_METHOD(on_clk_neg);sensitive << clk.neg();/* Execute process on_clk_neg on every negative edge of the clock signal clk */}private:void on_clk_neg() {/* Behavior of DFF */dout.write(din.read());}};SC_MODULE(tb_dff) {/* Test bench for the DFF */sc_clock clk;sc_signal<sc_logic> din;sc_signal<sc_logic> dout;SC_CTOR(tb_dff):clk("clk",10,SC_NS,0.5), DUT("dff") {
/* Connect test bench with DFF which is the device under test (DUT)*/DUT.din(din);DUT.dout(dout);DUT.clk(clk);SC_THREAD(main);}private:dff DUT;void main() {/* test script */din.write(SC_LOGIC_0);wait(31, SC_NS);din.write(SC_LOGIC_1);wait(42, SC_NS);din.write(SC_LOGIC_0);}};int sc_main(int argc, char* argv[]) {tb_dff TB("tb_dff");/* Trace (record) signals */sc_trace_file *tf(sc_create_vcd_trace_file("trace"));tf->set_time_unit(1, SC_NS);sc_trace(tf, TB.clk, "clk");sc_trace(tf, TB.din, "din");sc_trace(tf, TB.dout, "dout");sc_start(100, SC_NS);sc_close_vcd_trace_file(tf);cin.get();return 0;}
Dit is een low level (gate level) SystemC model van een D
flip-flop. Dit is een eenvoudig geheugen-element. Het signaal op de
ingang din wordt alleen overgenomen op de uitgang
dout bij een negatieve flank op de clock ingang
clk.




C:\gtkwave\bin\gtkwave.exe en bij TIS is
dat
Q:\Grp_Elektrotechniek\Embedded_systems\gtkwave\bin\gtkwave.exe.


dout signaal voor
de eerste negatieve flank niet gedefinieerd is. Breidt de D flip-flop uit
met een asynchrone reset ingang. De uitgang dout
moet meteen laag worden als de reset ingang hoog wordt.
Zolang de reset ingang hoog is blijft de uitgang
dout laag. Als de reset ingang laag is dan
"onthoud" de uitgang dout zijn waarde totdat er een negatieve
flank komt op de clock ingang clk. Breidt ook de test bench
uit zodat de aangepaste D flip-flop getest kan worden. Bedenk dat de waarde
van de reset ingang ook undefined (SC_LOGIC_X) of
high-impedance (SC_LOGIC_Z) kan zijn.
din.write(SC_LOGIC_0);reset.write(SC_LOGIC_X);wait(3, SC_NS);reset.write(SC_LOGIC_1);wait(4, SC_NS);reset.write(SC_LOGIC_0);wait(13, SC_NS);din.write(SC_LOGIC_1);wait(12, SC_NS);din.write(SC_LOGIC_0);wait(18, SC_NS);din.write(SC_LOGIC_1);wait(20, SC_NS);reset.write(SC_LOGIC_1);wait(7, SC_NS);reset.write(SC_LOGIC_0);
moet de uitvoer als volgt zijn:

-