core.cc revision 11793
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/** 1224123Sbinkertn@umich.edu * Do C++ simulator exit processing. Exported to SWIG 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