core.cc revision 9356
14123Sbinkertn@umich.edu/*
24123Sbinkertn@umich.edu * Copyright (c) 2006 The Regents of The University of Michigan
34123Sbinkertn@umich.edu * All rights reserved.
44123Sbinkertn@umich.edu *
54123Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without
64123Sbinkertn@umich.edu * modification, are permitted provided that the following conditions are
74123Sbinkertn@umich.edu * met: redistributions of source code must retain the above copyright
84123Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer;
94123Sbinkertn@umich.edu * redistributions in binary form must reproduce the above copyright
104123Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer in the
114123Sbinkertn@umich.edu * documentation and/or other materials provided with the distribution;
124123Sbinkertn@umich.edu * neither the name of the copyright holders nor the names of its
134123Sbinkertn@umich.edu * contributors may be used to endorse or promote products derived from
144123Sbinkertn@umich.edu * this software without specific prior written permission.
154123Sbinkertn@umich.edu *
164123Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
174123Sbinkertn@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
184123Sbinkertn@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
194123Sbinkertn@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
204123Sbinkertn@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
214123Sbinkertn@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
224123Sbinkertn@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
234123Sbinkertn@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
244123Sbinkertn@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
254123Sbinkertn@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
264123Sbinkertn@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274123Sbinkertn@umich.edu *
284123Sbinkertn@umich.edu * Authors: Nathan Binkert
294123Sbinkertn@umich.edu *          Steve Reinhardt
304123Sbinkertn@umich.edu */
314123Sbinkertn@umich.edu
324123Sbinkertn@umich.edu#include <iostream>
334123Sbinkertn@umich.edu#include <string>
344123Sbinkertn@umich.edu
354123Sbinkertn@umich.edu#include "base/callback.hh"
364123Sbinkertn@umich.edu#include "base/output.hh"
374167Sbinkertn@umich.edu#include "sim/core.hh"
389356Snilay@cs.wisc.edu#include "sim/eventq.hh"
394123Sbinkertn@umich.edu
404123Sbinkertn@umich.eduusing namespace std;
414123Sbinkertn@umich.edu
427064Snate@binkert.orgnamespace SimClock {
437823Ssteve.reinhardt@amd.com/// The simulated frequency of curTick(). (In ticks per second)
444167Sbinkertn@umich.eduTick Frequency;
454167Sbinkertn@umich.edu
464167Sbinkertn@umich.edunamespace Float {
474167Sbinkertn@umich.edudouble s;
484167Sbinkertn@umich.edudouble ms;
494167Sbinkertn@umich.edudouble us;
504167Sbinkertn@umich.edudouble ns;
514167Sbinkertn@umich.edudouble ps;
524167Sbinkertn@umich.edu
534167Sbinkertn@umich.edudouble Hz;
544167Sbinkertn@umich.edudouble kHz;
554167Sbinkertn@umich.edudouble MHz;
564167Sbinkertn@umich.edudouble GHZ;
577811Ssteve.reinhardt@amd.com} // namespace Float
584167Sbinkertn@umich.edu
594167Sbinkertn@umich.edunamespace Int {
604167Sbinkertn@umich.eduTick s;
614167Sbinkertn@umich.eduTick ms;
624167Sbinkertn@umich.eduTick us;
634167Sbinkertn@umich.eduTick ns;
644167Sbinkertn@umich.eduTick ps;
657811Ssteve.reinhardt@amd.com} // namespace Float
664167Sbinkertn@umich.edu
677811Ssteve.reinhardt@amd.com} // namespace SimClock
684167Sbinkertn@umich.edu
694167Sbinkertn@umich.eduvoid
704167Sbinkertn@umich.edusetClockFrequency(Tick ticksPerSecond)
714167Sbinkertn@umich.edu{
727064Snate@binkert.org    using namespace SimClock;
734167Sbinkertn@umich.edu    Frequency = ticksPerSecond;
744167Sbinkertn@umich.edu    Float::s = static_cast<double>(Frequency);
754167Sbinkertn@umich.edu    Float::ms = Float::s / 1.0e3;
764167Sbinkertn@umich.edu    Float::us = Float::s / 1.0e6;
774167Sbinkertn@umich.edu    Float::ns = Float::s / 1.0e9;
784167Sbinkertn@umich.edu    Float::ps = Float::s / 1.0e12;
794167Sbinkertn@umich.edu
804167Sbinkertn@umich.edu    Float::Hz  = 1.0 / Float::s;
814167Sbinkertn@umich.edu    Float::kHz = 1.0 / Float::ms;
824167Sbinkertn@umich.edu    Float::MHz = 1.0 / Float::us;
834167Sbinkertn@umich.edu    Float::GHZ = 1.0 / Float::ns;
844167Sbinkertn@umich.edu
854167Sbinkertn@umich.edu    Int::s  = Frequency;
864167Sbinkertn@umich.edu    Int::ms = Int::s / 1000;
874167Sbinkertn@umich.edu    Int::us = Int::ms / 1000;
884167Sbinkertn@umich.edu    Int::ns = Int::us / 1000;
894167Sbinkertn@umich.edu    Int::ps = Int::ns / 1000;
904167Sbinkertn@umich.edu
914167Sbinkertn@umich.edu}
924167Sbinkertn@umich.edu
934123Sbinkertn@umich.eduvoid
944123Sbinkertn@umich.edusetOutputDir(const string &dir)
954123Sbinkertn@umich.edu{
964123Sbinkertn@umich.edu    simout.setDirectory(dir);
974123Sbinkertn@umich.edu}
984123Sbinkertn@umich.edu
994123Sbinkertn@umich.edu/**
1004123Sbinkertn@umich.edu * Queue of C++ callbacks to invoke on simulator exit.
1014123Sbinkertn@umich.edu */
1024123Sbinkertn@umich.eduinline CallbackQueue &
1034123Sbinkertn@umich.eduexitCallbacks()
1044123Sbinkertn@umich.edu{
1054123Sbinkertn@umich.edu    static CallbackQueue theQueue;
1064123Sbinkertn@umich.edu    return theQueue;
1074123Sbinkertn@umich.edu}
1084123Sbinkertn@umich.edu
1094123Sbinkertn@umich.edu/**
1104123Sbinkertn@umich.edu * Register an exit callback.
1114123Sbinkertn@umich.edu */
1124123Sbinkertn@umich.eduvoid
1134123Sbinkertn@umich.eduregisterExitCallback(Callback *callback)
1144123Sbinkertn@umich.edu{
1154123Sbinkertn@umich.edu    exitCallbacks().add(callback);
1164123Sbinkertn@umich.edu}
1174123Sbinkertn@umich.edu
1184123Sbinkertn@umich.edu/**
1194123Sbinkertn@umich.edu * Do C++ simulator exit processing.  Exported to SWIG to be invoked
1204123Sbinkertn@umich.edu * when simulator terminates via Python's atexit mechanism.
1214123Sbinkertn@umich.edu */
1224123Sbinkertn@umich.eduvoid
1234123Sbinkertn@umich.edudoExitCleanup()
1244123Sbinkertn@umich.edu{
1254123Sbinkertn@umich.edu    exitCallbacks().process();
1264123Sbinkertn@umich.edu    exitCallbacks().clear();
1274123Sbinkertn@umich.edu
1284123Sbinkertn@umich.edu    cout.flush();
1294123Sbinkertn@umich.edu}
1304167Sbinkertn@umich.edu
131