comm.hh revision 7720
12914Ssaidi@eecs.umich.edu/* 22914Ssaidi@eecs.umich.edu * Copyright (c) 2004-2006 The Regents of The University of Michigan 32914Ssaidi@eecs.umich.edu * All rights reserved. 42914Ssaidi@eecs.umich.edu * 52914Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 62914Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are 72914Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright 82914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 92914Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 102914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 112914Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution; 122914Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its 132914Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from 142914Ssaidi@eecs.umich.edu * this software without specific prior written permission. 152914Ssaidi@eecs.umich.edu * 162914Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172914Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182914Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192914Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202914Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212914Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222914Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232914Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242914Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252914Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262914Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272914Ssaidi@eecs.umich.edu * 282914Ssaidi@eecs.umich.edu * Authors: Kevin Lim 292914Ssaidi@eecs.umich.edu */ 302914Ssaidi@eecs.umich.edu 312914Ssaidi@eecs.umich.edu#ifndef __CPU_O3_COMM_HH__ 322914Ssaidi@eecs.umich.edu#define __CPU_O3_COMM_HH__ 334929Sstever@gmail.com 344490Sstever@eecs.umich.edu#include <vector> 353091Sstever@eecs.umich.edu 364490Sstever@eecs.umich.edu#include "arch/types.hh" 374490Sstever@eecs.umich.edu#include "base/types.hh" 383296Ssaidi@eecs.umich.edu#include "cpu/inst_seq.hh" 394492Sstever@eecs.umich.edu#include "sim/faults.hh" 404490Sstever@eecs.umich.edu 413284Srdreslin@umich.edu// Typedef for physical register index type. Although the Impl would be the 423284Srdreslin@umich.edu// most likely location for this, there are a few classes that need this 434874Sstever@eecs.umich.edu// typedef yet are not templated on the Impl. For now it will be defined here. 444929Sstever@gmail.comtypedef short int PhysRegIndex; 454490Sstever@eecs.umich.edu 463284Srdreslin@umich.edu/** Struct that defines the information passed from fetch to decode. */ 474929Sstever@gmail.comtemplate<class Impl> 484929Sstever@gmail.comstruct DefaultFetchDefaultDecode { 494490Sstever@eecs.umich.edu typedef typename Impl::DynInstPtr DynInstPtr; 503342Srdreslin@umich.edu 514490Sstever@eecs.umich.edu int size; 524490Sstever@eecs.umich.edu 534490Sstever@eecs.umich.edu DynInstPtr insts[Impl::MaxWidth]; 544929Sstever@gmail.com Fault fetchFault; 554929Sstever@gmail.com InstSeqNum fetchFaultSN; 563296Ssaidi@eecs.umich.edu bool clearFetchFault; 574929Sstever@gmail.com}; 583091Sstever@eecs.umich.edu 593091Sstever@eecs.umich.edu/** Struct that defines the information passed from decode to rename. */ 603091Sstever@eecs.umich.edutemplate<class Impl> 613349Sbinkertn@umich.edustruct DefaultDecodeDefaultRename { 623091Sstever@eecs.umich.edu typedef typename Impl::DynInstPtr DynInstPtr; 633091Sstever@eecs.umich.edu 643091Sstever@eecs.umich.edu int size; 653091Sstever@eecs.umich.edu 663091Sstever@eecs.umich.edu DynInstPtr insts[Impl::MaxWidth]; 673091Sstever@eecs.umich.edu}; 684626Sstever@eecs.umich.edu 694670Sstever@eecs.umich.edu/** Struct that defines the information passed from rename to IEW. */ 704670Sstever@eecs.umich.edutemplate<class Impl> 714670Sstever@eecs.umich.edustruct DefaultRenameDefaultIEW { 724670Sstever@eecs.umich.edu typedef typename Impl::DynInstPtr DynInstPtr; 734670Sstever@eecs.umich.edu 744670Sstever@eecs.umich.edu int size; 754670Sstever@eecs.umich.edu 764670Sstever@eecs.umich.edu DynInstPtr insts[Impl::MaxWidth]; 774626Sstever@eecs.umich.edu}; 783091Sstever@eecs.umich.edu 793175Srdreslin@umich.edu/** Struct that defines the information passed from IEW to commit. */ 804626Sstever@eecs.umich.edutemplate<class Impl> 814670Sstever@eecs.umich.edustruct DefaultIEWDefaultCommit { 824670Sstever@eecs.umich.edu typedef typename Impl::DynInstPtr DynInstPtr; 834626Sstever@eecs.umich.edu 844493Sstever@eecs.umich.edu int size; 854626Sstever@eecs.umich.edu 864490Sstever@eecs.umich.edu DynInstPtr insts[Impl::MaxWidth]; 873309Srdreslin@umich.edu 884670Sstever@eecs.umich.edu bool squash[Impl::MaxThreads]; 893091Sstever@eecs.umich.edu bool branchMispredict[Impl::MaxThreads]; 903091Sstever@eecs.umich.edu bool branchTaken[Impl::MaxThreads]; 913091Sstever@eecs.umich.edu Addr mispredPC[Impl::MaxThreads]; 922914Ssaidi@eecs.umich.edu TheISA::PCState pc[Impl::MaxThreads]; 932914Ssaidi@eecs.umich.edu InstSeqNum squashedSeqNum[Impl::MaxThreads]; 944492Sstever@eecs.umich.edu 953403Ssaidi@eecs.umich.edu bool includeSquashInst[Impl::MaxThreads]; 964492Sstever@eecs.umich.edu}; 974970Ssaidi@eecs.umich.edu 984492Sstever@eecs.umich.edutemplate<class Impl> 993450Ssaidi@eecs.umich.edustruct IssueStruct { 1004666Sstever@eecs.umich.edu typedef typename Impl::DynInstPtr DynInstPtr; 1014666Sstever@eecs.umich.edu 1024666Sstever@eecs.umich.edu int size; 1034666Sstever@eecs.umich.edu 1044666Sstever@eecs.umich.edu DynInstPtr insts[Impl::MaxWidth]; 1054666Sstever@eecs.umich.edu}; 1064666Sstever@eecs.umich.edu 1074666Sstever@eecs.umich.edu/** Struct that defines all backwards communication. */ 1084492Sstever@eecs.umich.edutemplate<class Impl> 1093450Ssaidi@eecs.umich.edustruct TimeBufStruct { 1103403Ssaidi@eecs.umich.edu struct decodeComm { 1113450Ssaidi@eecs.umich.edu bool squash; 1124666Sstever@eecs.umich.edu bool predIncorrect; 1134490Sstever@eecs.umich.edu uint64_t branchAddr; 1144666Sstever@eecs.umich.edu 1154490Sstever@eecs.umich.edu InstSeqNum doneSeqNum; 1163450Ssaidi@eecs.umich.edu 1174492Sstever@eecs.umich.edu // @todo: Might want to package this kind of branch stuff into a single 1184492Sstever@eecs.umich.edu // struct as it is used pretty frequently. 1194492Sstever@eecs.umich.edu bool branchMispredict; 1204492Sstever@eecs.umich.edu bool branchTaken; 1213610Srdreslin@umich.edu Addr mispredPC; 1223450Ssaidi@eecs.umich.edu TheISA::PCState nextPC; 1234492Sstever@eecs.umich.edu 1243403Ssaidi@eecs.umich.edu unsigned branchCount; 1253403Ssaidi@eecs.umich.edu }; 1264492Sstever@eecs.umich.edu 1273403Ssaidi@eecs.umich.edu decodeComm decodeInfo[Impl::MaxThreads]; 1284492Sstever@eecs.umich.edu 1292914Ssaidi@eecs.umich.edu struct renameComm { 1304492Sstever@eecs.umich.edu }; 1314870Sstever@eecs.umich.edu 1324870Sstever@eecs.umich.edu renameComm renameInfo[Impl::MaxThreads]; 1334870Sstever@eecs.umich.edu 1344870Sstever@eecs.umich.edu struct iewComm { 1354870Sstever@eecs.umich.edu // Also eventually include skid buffer space. 1364870Sstever@eecs.umich.edu bool usedIQ; 1374492Sstever@eecs.umich.edu unsigned freeIQEntries; 1384492Sstever@eecs.umich.edu bool usedLSQ; 1394870Sstever@eecs.umich.edu unsigned freeLSQEntries; 1404490Sstever@eecs.umich.edu 1415606Snate@binkert.org unsigned iqCount; 1423263Srdreslin@umich.edu unsigned ldstqCount; 1434492Sstever@eecs.umich.edu 1444490Sstever@eecs.umich.edu unsigned dispatched; 1454490Sstever@eecs.umich.edu unsigned dispatchedToLSQ; 1464490Sstever@eecs.umich.edu }; 1473091Sstever@eecs.umich.edu 1484870Sstever@eecs.umich.edu iewComm iewInfo[Impl::MaxThreads]; 1494870Sstever@eecs.umich.edu 1504870Sstever@eecs.umich.edu struct commitComm { 1514870Sstever@eecs.umich.edu bool usedROB; 1524870Sstever@eecs.umich.edu unsigned freeROBEntries; 1534870Sstever@eecs.umich.edu bool emptyROB; 1543091Sstever@eecs.umich.edu 1554492Sstever@eecs.umich.edu bool squash; 1564492Sstever@eecs.umich.edu bool robSquashing; 1574492Sstever@eecs.umich.edu 1584492Sstever@eecs.umich.edu bool branchMispredict; 1594492Sstever@eecs.umich.edu bool branchTaken; 1604492Sstever@eecs.umich.edu Addr mispredPC; 1614492Sstever@eecs.umich.edu TheISA::PCState pc; 1624492Sstever@eecs.umich.edu 1634492Sstever@eecs.umich.edu // Represents the instruction that has either been retired or 1644492Sstever@eecs.umich.edu // squashed. Similar to having a single bus that broadcasts the 1654492Sstever@eecs.umich.edu // retired or squashed sequence number. 1664492Sstever@eecs.umich.edu InstSeqNum doneSeqNum; 1674492Sstever@eecs.umich.edu 1684492Sstever@eecs.umich.edu //Just in case we want to do a commit/squash on a cycle 1694492Sstever@eecs.umich.edu //(necessary for multiple ROBs?) 1704492Sstever@eecs.umich.edu bool commitInsts; 1714492Sstever@eecs.umich.edu InstSeqNum squashSeqNum; 1724492Sstever@eecs.umich.edu 1734492Sstever@eecs.umich.edu // Communication specifically to the IQ to tell the IQ that it can 1744492Sstever@eecs.umich.edu // schedule a non-speculative instruction. 1754492Sstever@eecs.umich.edu InstSeqNum nonSpecSeqNum; 1764492Sstever@eecs.umich.edu 1774492Sstever@eecs.umich.edu // Hack for now to send back an uncached access to the IEW stage. 1782914Ssaidi@eecs.umich.edu typedef typename Impl::DynInstPtr DynInstPtr; 1792914Ssaidi@eecs.umich.edu bool uncached; 1802914Ssaidi@eecs.umich.edu DynInstPtr uncachedLoad; 1812914Ssaidi@eecs.umich.edu 1822914Ssaidi@eecs.umich.edu bool interruptPending; 1832914Ssaidi@eecs.umich.edu bool clearInterrupt; 1843403Ssaidi@eecs.umich.edu }; 1852914Ssaidi@eecs.umich.edu 1862914Ssaidi@eecs.umich.edu commitComm commitInfo[Impl::MaxThreads]; 1872914Ssaidi@eecs.umich.edu 1882914Ssaidi@eecs.umich.edu bool decodeBlock[Impl::MaxThreads]; 189 bool decodeUnblock[Impl::MaxThreads]; 190 bool renameBlock[Impl::MaxThreads]; 191 bool renameUnblock[Impl::MaxThreads]; 192 bool iewBlock[Impl::MaxThreads]; 193 bool iewUnblock[Impl::MaxThreads]; 194 bool commitBlock[Impl::MaxThreads]; 195 bool commitUnblock[Impl::MaxThreads]; 196}; 197 198#endif //__CPU_O3_COMM_HH__ 199