void GlobalEventQueue::AddSystem( NVMain *subSystem, Config *config )
{
    double subSystemFrequency = config->GetEnergy( "CLK" ) * 1000000.0;
    EventQueue *queue = subSystem->GetEventQueue( );
    bool eventDrivenSub = config->GetBool( "EventDriven" );

    /* First subsystem decides if the entire system is event driven or not. */
    if( eventQueues.empty( ) )
        eventDriven = eventDrivenSub;

    if( eventDrivenSub != eventDriven )
    {
        std::cout << "NVMain: Warning: Subsystem setting of event driven does not match parent!"
                  << std::endl;

        if( eventDriven )
        {
            std::cout << "                 Forcing subsystem to be event driven." << std::endl;
            config->SetBool( "EventDriven", true );
        }
        else
        {
            std::cout << "                 Forcing subsystem to be execution driven." << std::endl;
            config->SetBool( "EventDriven", false );
        }
    }

    assert( subSystemFrequency <= frequency );

    /* 
     *  The CLK value in the config file is the frequency this subsystem should run at.
     *  We aren't doing and checks here to make sure the input side (i.e. CPUFreq) is
     *  corrent since we don't know what it should be.
     */
    eventQueues.insert( std::pair<EventQueue*, double>(queue, subSystemFrequency) );
    queue->SetFrequency( subSystemFrequency );

    std::cout << "NVMain: GlobalEventQueue: Added a memory subsystem running at "
              << config->GetEnergy( "CLK" ) << "MHz. My frequency is "
              << (frequency / 1000000.0) << "MHz." << std::endl;
}