1/* 2 * Copyright (c) 2002-2006 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; 9 * redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution; 12 * neither the name of the copyright holders nor the names of its 13 * contributors may be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Steve Raasch 29 */ 30 31#ifndef __CPU_FUNC_UNIT_HH__ 32#define __CPU_FUNC_UNIT_HH__ 33 34#include <array> 35#include <bitset> 36#include <string> 37#include <vector> 38 39#include "cpu/op_class.hh" 40#include "params/FUDesc.hh" 41#include "params/OpDesc.hh" 42#include "sim/sim_object.hh" 43 44//////////////////////////////////////////////////////////////////////////// 45// 46// Structures used ONLY during the initialization phase... 47// 48// 49// 50 51class OpDesc : public SimObject 52{ 53 public: 54 OpClass opClass; 55 Cycles opLat; 56 bool pipelined; 57 58 OpDesc(const OpDescParams *p) 59 : SimObject(p), opClass(p->opClass), opLat(p->opLat), 60 pipelined(p->pipelined) {}; 61}; 62 63class FUDesc : public SimObject 64{ 65 public: 66 std::vector<OpDesc *> opDescList; 67 unsigned number; 68 69 FUDesc(const FUDescParams *p) 70 : SimObject(p), opDescList(p->opList), number(p->count) {}; 71}; 72 73typedef std::vector<OpDesc *>::const_iterator OPDDiterator; 74typedef std::vector<FUDesc *>::const_iterator FUDDiterator; 75 76 77 78 79//////////////////////////////////////////////////////////////////////////// 80// 81// The actual FU object 82// 83// 84// 85class FuncUnit 86{ 87 private: 88 std::array<unsigned, Num_OpClasses> opLatencies; 89 std::array<bool, Num_OpClasses> pipelined; 90 std::bitset<Num_OpClasses> capabilityList; 91 92 public: 93 FuncUnit(); 94 FuncUnit(const FuncUnit &fu); 95 96 std::string name; 97 98 void addCapability(OpClass cap, unsigned oplat, bool pipelined); 99 100 bool provides(OpClass capability); 101 std::bitset<Num_OpClasses> capabilities(); 102 103 unsigned &opLatency(OpClass capability); 104 bool isPipelined(OpClass capability); 105}; 106 107#endif // __FU_POOL_HH__ 108