core.cc revision 11990
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
3411793Sbrandon.potter@amd.com#include "sim/core.hh"
3511793Sbrandon.potter@amd.com
364123Sbinkertn@umich.edu#include <iostream>
374123Sbinkertn@umich.edu#include <string>
384123Sbinkertn@umich.edu
394123Sbinkertn@umich.edu#include "base/callback.hh"
404123Sbinkertn@umich.edu#include "base/output.hh"
419356Snilay@cs.wisc.edu#include "sim/eventq.hh"
424123Sbinkertn@umich.edu
434123Sbinkertn@umich.eduusing namespace std;
444123Sbinkertn@umich.edu
457064Snate@binkert.orgnamespace SimClock {
467823Ssteve.reinhardt@amd.com/// The simulated frequency of curTick(). (In ticks per second)
474167Sbinkertn@umich.eduTick Frequency;
484167Sbinkertn@umich.edu
494167Sbinkertn@umich.edunamespace Float {
504167Sbinkertn@umich.edudouble s;
514167Sbinkertn@umich.edudouble ms;
524167Sbinkertn@umich.edudouble us;
534167Sbinkertn@umich.edudouble ns;
544167Sbinkertn@umich.edudouble ps;
554167Sbinkertn@umich.edu
564167Sbinkertn@umich.edudouble Hz;
574167Sbinkertn@umich.edudouble kHz;
584167Sbinkertn@umich.edudouble MHz;
594167Sbinkertn@umich.edudouble GHZ;
607811Ssteve.reinhardt@amd.com} // namespace Float
614167Sbinkertn@umich.edu
624167Sbinkertn@umich.edunamespace Int {
634167Sbinkertn@umich.eduTick s;
644167Sbinkertn@umich.eduTick ms;
654167Sbinkertn@umich.eduTick us;
664167Sbinkertn@umich.eduTick ns;
674167Sbinkertn@umich.eduTick ps;
687811Ssteve.reinhardt@amd.com} // namespace Float
694167Sbinkertn@umich.edu
707811Ssteve.reinhardt@amd.com} // namespace SimClock
714167Sbinkertn@umich.edu
724167Sbinkertn@umich.eduvoid
734167Sbinkertn@umich.edusetClockFrequency(Tick ticksPerSecond)
744167Sbinkertn@umich.edu{
757064Snate@binkert.org    using namespace SimClock;
764167Sbinkertn@umich.edu    Frequency = ticksPerSecond;
774167Sbinkertn@umich.edu    Float::s = static_cast<double>(Frequency);
784167Sbinkertn@umich.edu    Float::ms = Float::s / 1.0e3;
794167Sbinkertn@umich.edu    Float::us = Float::s / 1.0e6;
804167Sbinkertn@umich.edu    Float::ns = Float::s / 1.0e9;
814167Sbinkertn@umich.edu    Float::ps = Float::s / 1.0e12;
824167Sbinkertn@umich.edu
834167Sbinkertn@umich.edu    Float::Hz  = 1.0 / Float::s;
844167Sbinkertn@umich.edu    Float::kHz = 1.0 / Float::ms;
854167Sbinkertn@umich.edu    Float::MHz = 1.0 / Float::us;
864167Sbinkertn@umich.edu    Float::GHZ = 1.0 / Float::ns;
874167Sbinkertn@umich.edu
884167Sbinkertn@umich.edu    Int::s  = Frequency;
894167Sbinkertn@umich.edu    Int::ms = Int::s / 1000;
904167Sbinkertn@umich.edu    Int::us = Int::ms / 1000;
914167Sbinkertn@umich.edu    Int::ns = Int::us / 1000;
924167Sbinkertn@umich.edu    Int::ps = Int::ns / 1000;
934167Sbinkertn@umich.edu
944167Sbinkertn@umich.edu}
954167Sbinkertn@umich.edu
964123Sbinkertn@umich.eduvoid
974123Sbinkertn@umich.edusetOutputDir(const string &dir)
984123Sbinkertn@umich.edu{
994123Sbinkertn@umich.edu    simout.setDirectory(dir);
1004123Sbinkertn@umich.edu}
1014123Sbinkertn@umich.edu
1024123Sbinkertn@umich.edu/**
1034123Sbinkertn@umich.edu * Queue of C++ callbacks to invoke on simulator exit.
1044123Sbinkertn@umich.edu */
1054123Sbinkertn@umich.eduinline CallbackQueue &
1064123Sbinkertn@umich.eduexitCallbacks()
1074123Sbinkertn@umich.edu{
1084123Sbinkertn@umich.edu    static CallbackQueue theQueue;
1094123Sbinkertn@umich.edu    return theQueue;
1104123Sbinkertn@umich.edu}
1114123Sbinkertn@umich.edu
1124123Sbinkertn@umich.edu/**
1134123Sbinkertn@umich.edu * Register an exit callback.
1144123Sbinkertn@umich.edu */
1154123Sbinkertn@umich.eduvoid
1164123Sbinkertn@umich.eduregisterExitCallback(Callback *callback)
1174123Sbinkertn@umich.edu{
1184123Sbinkertn@umich.edu    exitCallbacks().add(callback);
1194123Sbinkertn@umich.edu}
1204123Sbinkertn@umich.edu
1214123Sbinkertn@umich.edu/**
12211990Sandreas.sandberg@arm.com * Do C++ simulator exit processing.  Exported to Python to be invoked
1234123Sbinkertn@umich.edu * when simulator terminates via Python's atexit mechanism.
1244123Sbinkertn@umich.edu */
1254123Sbinkertn@umich.eduvoid
1264123Sbinkertn@umich.edudoExitCleanup()
1274123Sbinkertn@umich.edu{
1284123Sbinkertn@umich.edu    exitCallbacks().process();
1294123Sbinkertn@umich.edu    exitCallbacks().clear();
1304123Sbinkertn@umich.edu
1314123Sbinkertn@umich.edu    cout.flush();
1324123Sbinkertn@umich.edu}
1334167Sbinkertn@umich.edu
134