core.cc revision 7811
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"
384123Sbinkertn@umich.edu
394123Sbinkertn@umich.eduusing namespace std;
404123Sbinkertn@umich.edu
414167Sbinkertn@umich.eduTick curTick = 0;
424167Sbinkertn@umich.edu
437064Snate@binkert.orgnamespace SimClock {
444167Sbinkertn@umich.edu/// The simulated frequency of curTick. (In ticks per second)
454167Sbinkertn@umich.eduTick Frequency;
464167Sbinkertn@umich.edu
474167Sbinkertn@umich.edunamespace Float {
484167Sbinkertn@umich.edudouble s;
494167Sbinkertn@umich.edudouble ms;
504167Sbinkertn@umich.edudouble us;
514167Sbinkertn@umich.edudouble ns;
524167Sbinkertn@umich.edudouble ps;
534167Sbinkertn@umich.edu
544167Sbinkertn@umich.edudouble Hz;
554167Sbinkertn@umich.edudouble kHz;
564167Sbinkertn@umich.edudouble MHz;
574167Sbinkertn@umich.edudouble GHZ;
587811Ssteve.reinhardt@amd.com} // namespace Float
594167Sbinkertn@umich.edu
604167Sbinkertn@umich.edunamespace Int {
614167Sbinkertn@umich.eduTick s;
624167Sbinkertn@umich.eduTick ms;
634167Sbinkertn@umich.eduTick us;
644167Sbinkertn@umich.eduTick ns;
654167Sbinkertn@umich.eduTick ps;
667811Ssteve.reinhardt@amd.com} // namespace Float
674167Sbinkertn@umich.edu
687811Ssteve.reinhardt@amd.com} // namespace SimClock
694167Sbinkertn@umich.edu
704167Sbinkertn@umich.eduvoid
714167Sbinkertn@umich.edusetClockFrequency(Tick ticksPerSecond)
724167Sbinkertn@umich.edu{
737064Snate@binkert.org    using namespace SimClock;
744167Sbinkertn@umich.edu    Frequency = ticksPerSecond;
754167Sbinkertn@umich.edu    Float::s = static_cast<double>(Frequency);
764167Sbinkertn@umich.edu    Float::ms = Float::s / 1.0e3;
774167Sbinkertn@umich.edu    Float::us = Float::s / 1.0e6;
784167Sbinkertn@umich.edu    Float::ns = Float::s / 1.0e9;
794167Sbinkertn@umich.edu    Float::ps = Float::s / 1.0e12;
804167Sbinkertn@umich.edu
814167Sbinkertn@umich.edu    Float::Hz  = 1.0 / Float::s;
824167Sbinkertn@umich.edu    Float::kHz = 1.0 / Float::ms;
834167Sbinkertn@umich.edu    Float::MHz = 1.0 / Float::us;
844167Sbinkertn@umich.edu    Float::GHZ = 1.0 / Float::ns;
854167Sbinkertn@umich.edu
864167Sbinkertn@umich.edu    Int::s  = Frequency;
874167Sbinkertn@umich.edu    Int::ms = Int::s / 1000;
884167Sbinkertn@umich.edu    Int::us = Int::ms / 1000;
894167Sbinkertn@umich.edu    Int::ns = Int::us / 1000;
904167Sbinkertn@umich.edu    Int::ps = Int::ns / 1000;
914167Sbinkertn@umich.edu
924167Sbinkertn@umich.edu}
934167Sbinkertn@umich.edu
944123Sbinkertn@umich.eduvoid
954123Sbinkertn@umich.edusetOutputDir(const string &dir)
964123Sbinkertn@umich.edu{
974123Sbinkertn@umich.edu    simout.setDirectory(dir);
984123Sbinkertn@umich.edu}
994123Sbinkertn@umich.edu
1004123Sbinkertn@umich.edu/**
1014123Sbinkertn@umich.edu * Queue of C++ callbacks to invoke on simulator exit.
1024123Sbinkertn@umich.edu */
1034123Sbinkertn@umich.eduinline CallbackQueue &
1044123Sbinkertn@umich.eduexitCallbacks()
1054123Sbinkertn@umich.edu{
1064123Sbinkertn@umich.edu    static CallbackQueue theQueue;
1074123Sbinkertn@umich.edu    return theQueue;
1084123Sbinkertn@umich.edu}
1094123Sbinkertn@umich.edu
1104123Sbinkertn@umich.edu/**
1114123Sbinkertn@umich.edu * Register an exit callback.
1124123Sbinkertn@umich.edu */
1134123Sbinkertn@umich.eduvoid
1144123Sbinkertn@umich.eduregisterExitCallback(Callback *callback)
1154123Sbinkertn@umich.edu{
1164123Sbinkertn@umich.edu    exitCallbacks().add(callback);
1174123Sbinkertn@umich.edu}
1184123Sbinkertn@umich.edu
1194123Sbinkertn@umich.edu/**
1204123Sbinkertn@umich.edu * Do C++ simulator exit processing.  Exported to SWIG to be invoked
1214123Sbinkertn@umich.edu * when simulator terminates via Python's atexit mechanism.
1224123Sbinkertn@umich.edu */
1234123Sbinkertn@umich.eduvoid
1244123Sbinkertn@umich.edudoExitCleanup()
1254123Sbinkertn@umich.edu{
1264123Sbinkertn@umich.edu    exitCallbacks().process();
1274123Sbinkertn@umich.edu    exitCallbacks().clear();
1284123Sbinkertn@umich.edu
1294123Sbinkertn@umich.edu    cout.flush();
1304123Sbinkertn@umich.edu}
1314167Sbinkertn@umich.edu
132