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