#include "systemc.h" // Ce module représente un composant software pour l'affichage SC_MODULE(SOFTWARE) { SC_CTOR(SOFTWARE) { SC_CTHREAD(software,m_clk.pos()); reset_signal_is(m_reset,false); } void software() { cout << sc_time_stamp() << ": reset" << endl; while (1) { m_ready = true; do { wait(); } while ( !m_valid); cout << sc_time_stamp() << ": " << m_value.read() << endl; } } sc_in_clk m_clk; sc_inout m_ready; sc_in m_reset; sc_in m_valid; sc_in m_value; }; // Ce module représente le composant hardware d'un compteur SC_MODULE(HARDWARE) { SC_CTOR(HARDWARE) { SC_CTHREAD(hardware,m_clk.pos()); reset_signal_is(m_reset,false); } void hardware() { m_value = 0; while (1) { m_valid = true; do { wait(); } while (!m_ready); m_value = m_value + 1; } } sc_in_clk m_clk; sc_in m_ready; sc_in m_reset; sc_inout m_valid; sc_inout m_value; }; // Ce module représente le système embarqué! SC_MODULE(EMBEDDED) { SC_CTOR(EMBEDDED) : m_software("software"), m_hardware("hardware") { SC_CTHREAD(embedded,m_clk.pos()); m_software.m_clk(m_clk); m_software.m_ready(m_ready); m_software.m_reset(m_reset); m_software.m_valid(m_valid); m_software.m_value(m_value); m_hardware.m_clk(m_clk); m_hardware.m_ready(m_ready); m_hardware.m_reset(m_reset); m_hardware.m_valid(m_valid); m_hardware.m_value(m_value); } void embedded() { for ( int state = 0; state < 100; state++ ) { m_reset = ( state%20 == 12 ) ? false : true; wait(); } sc_stop(); } sc_in_clk m_clk; SOFTWARE m_software; HARDWARE m_hardware; sc_signal m_ready; sc_signal m_reset; sc_signal m_valid; sc_signal m_value; }; // la fonction main int sc_main(int argc, char * argv[]) { sc_clock clock; EMBEDDED embedded("embedded"); embedded.m_clk(clock); sc_start(5000, SC_NS); cout << "Done" << endl; int a; cin>>a; return 0; }