feeder.hh revision 13373
113373Sgabeblack@google.com/* 213373Sgabeblack@google.com * Copyright 2018 Google, Inc. 313373Sgabeblack@google.com * 413373Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without 513373Sgabeblack@google.com * modification, are permitted provided that the following conditions are 613373Sgabeblack@google.com * met: redistributions of source code must retain the above copyright 713373Sgabeblack@google.com * notice, this list of conditions and the following disclaimer; 813373Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright 913373Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the 1013373Sgabeblack@google.com * documentation and/or other materials provided with the distribution; 1113373Sgabeblack@google.com * neither the name of the copyright holders nor the names of its 1213373Sgabeblack@google.com * contributors may be used to endorse or promote products derived from 1313373Sgabeblack@google.com * this software without specific prior written permission. 1413373Sgabeblack@google.com * 1513373Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1613373Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1713373Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1813373Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1913373Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2013373Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2113373Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2213373Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2313373Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2413373Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2513373Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2613373Sgabeblack@google.com * 2713373Sgabeblack@google.com * Authors: Gabe Black 2813373Sgabeblack@google.com */ 2913373Sgabeblack@google.com 3013373Sgabeblack@google.com#ifndef __SYSTEMC_SIMPLE_OBJECT_FEEDER_HH__ 3113373Sgabeblack@google.com#define __SYSTEMC_SIMPLE_OBJECT_FEEDER_HH__ 3213373Sgabeblack@google.com 3313373Sgabeblack@google.com#include <string> 3413373Sgabeblack@google.com#include <vector> 3513373Sgabeblack@google.com 3613373Sgabeblack@google.com#include "sim/eventq.hh" 3713373Sgabeblack@google.com#include "sim/sim_object.hh" 3813373Sgabeblack@google.com#include "systemc_simple_object/printer.hh" 3913373Sgabeblack@google.com 4013373Sgabeblack@google.com// The "external" header interface for systemc is in systemc/ext and is what 4113373Sgabeblack@google.com// a model which doesn't know anything about gem5 would use. This includes a 4213373Sgabeblack@google.com// particular file from those headers, but alternatively we could include 4313373Sgabeblack@google.com// systemc/ext/systemc or systemc/ext/systemc.h. 4413373Sgabeblack@google.com#include "systemc/ext/channel/sc_buffer.hh" 4513373Sgabeblack@google.com 4613373Sgabeblack@google.com// This implementation (mostly) just uses standard gem5 mechanisms. 4713373Sgabeblack@google.comclass Gem5_FeederParams; 4813373Sgabeblack@google.com 4913373Sgabeblack@google.comclass Feeder : public SimObject 5013373Sgabeblack@google.com{ 5113373Sgabeblack@google.com public: 5213373Sgabeblack@google.com Feeder(Gem5_FeederParams *params); 5313373Sgabeblack@google.com 5413373Sgabeblack@google.com void feed(); 5513373Sgabeblack@google.com 5613373Sgabeblack@google.com private: 5713373Sgabeblack@google.com Printer *printer; 5813373Sgabeblack@google.com Tick delay; 5913373Sgabeblack@google.com std::vector<std::string> strings; 6013373Sgabeblack@google.com int index; 6113373Sgabeblack@google.com 6213373Sgabeblack@google.com // SystemC types can be used in gem5 classes, but that should be avoided 6313373Sgabeblack@google.com // except to help interact with systemc objects/models. 6413373Sgabeblack@google.com sc_core::sc_buffer<const char *> buf; 6513373Sgabeblack@google.com 6613373Sgabeblack@google.com EventWrapper<Feeder, &Feeder::feed> event; 6713373Sgabeblack@google.com 6813373Sgabeblack@google.com void startup() override; 6913373Sgabeblack@google.com}; 7013373Sgabeblack@google.com 7113373Sgabeblack@google.com#endif // __SYSTEMC_SIMPLE_OBJECT_PRINTER_HH__ 72