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