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