func_unit.hh revision 10807:dac26eb4cb64
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 <bitset> 35#include <string> 36#include <vector> 37 38#include "cpu/op_class.hh" 39#include "params/FUDesc.hh" 40#include "params/OpDesc.hh" 41#include "sim/sim_object.hh" 42 43//////////////////////////////////////////////////////////////////////////// 44// 45// Structures used ONLY during the initialization phase... 46// 47// 48// 49 50class OpDesc : public SimObject 51{ 52 public: 53 OpClass opClass; 54 Cycles opLat; 55 bool pipelined; 56 57 OpDesc(const OpDescParams *p) 58 : SimObject(p), opClass(p->opClass), opLat(p->opLat), 59 pipelined(p->pipelined) {}; 60}; 61 62class FUDesc : public SimObject 63{ 64 public: 65 std::vector<OpDesc *> opDescList; 66 unsigned number; 67 68 FUDesc(const FUDescParams *p) 69 : SimObject(p), opDescList(p->opList), number(p->count) {}; 70}; 71 72typedef std::vector<OpDesc *>::const_iterator OPDDiterator; 73typedef std::vector<FUDesc *>::const_iterator FUDDiterator; 74 75 76 77 78//////////////////////////////////////////////////////////////////////////// 79// 80// The actual FU object 81// 82// 83// 84class FuncUnit 85{ 86 private: 87 unsigned opLatencies[Num_OpClasses]; 88 bool pipelined[Num_OpClasses]; 89 std::bitset<Num_OpClasses> capabilityList; 90 91 public: 92 FuncUnit(); 93 FuncUnit(const FuncUnit &fu); 94 95 std::string name; 96 97 void addCapability(OpClass cap, unsigned oplat, bool pipelined); 98 99 bool provides(OpClass capability); 100 std::bitset<Num_OpClasses> capabilities(); 101 102 unsigned &opLatency(OpClass capability); 103 bool isPipelined(OpClass capability); 104}; 105 106#endif // __FU_POOL_HH__ 107