Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / devices / common / regdef / include / Block.h
/*
* ========== Copyright Header Begin ==========================================
*
* OpenSPARC T2 Processor File: Block.h
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
*
* The above named program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* The above named program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*
* ========== Copyright Header End ============================================
*/
#ifndef __Block_h
#define __Block_h
#include <stdlib.h>
#include <string>
#include <sstream>
#include "List.h"
#include "Map.h"
//#include "Register.h"
//#include "RegisterArray.h"
using namespace std;
class Register;
class RegisterArray;
class Block {
List<Register> registers;
List<RegisterArray> registerArrays;
Addr minAddr;
Addr maxAddr;
bool final;
string fullName;
Map<Register> *map;
public:
Block(string n);
~Block();
void addRegister (Register *r);
void addRegisterArray (RegisterArray *r);
void regCheck (Register *r);
void regArrayCheck (RegisterArray *r);
Register* regLookup (Addr a);
Register* regLookup (string n);
bool regRead (Addr a, Data *d);
bool regRead (string n, Data *d);
bool regWrite (Addr a, Data d);
bool regWrite (string n, Data d);
void enableWriteBlockCB ();
void disableWriteBlockCB ();
void enableReadBlockCB ();
void disableReadBlockCB ();
void printThis (ostream &os);
string getFullName() { return fullName; }
void resetThis ();
void finalize ();
virtual Data regReadBlockCB(Register *r, Data origValue, Data readValue)
{
return readValue;
}
virtual void regWriteBlockCB(Register *r, Data origValue, Data writeValue) {}
};
#endif