FaultModel.hh revision 8612
18612Stushar@csail.mit.edu/* 28612Stushar@csail.mit.edu * Copyright (c) 2011 Massachusetts Institute of Technology 38612Stushar@csail.mit.edu * All rights reserved. 48612Stushar@csail.mit.edu * 58612Stushar@csail.mit.edu * Redistribution and use in source and binary forms, with or without 68612Stushar@csail.mit.edu * modification, are permitted provided that the following conditions are 78612Stushar@csail.mit.edu * met: redistributions of source code must retain the above copyright 88612Stushar@csail.mit.edu * notice, this list of conditions and the following disclaimer; 98612Stushar@csail.mit.edu * redistributions in binary form must reproduce the above copyright 108612Stushar@csail.mit.edu * notice, this list of conditions and the following disclaimer in the 118612Stushar@csail.mit.edu * documentation and/or other materials provided with the distribution; 128612Stushar@csail.mit.edu * neither the name of the copyright holders nor the names of its 138612Stushar@csail.mit.edu * contributors may be used to endorse or promote products derived from 148612Stushar@csail.mit.edu * this software without specific prior written permission. 158612Stushar@csail.mit.edu * 168612Stushar@csail.mit.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 178612Stushar@csail.mit.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 188612Stushar@csail.mit.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 198612Stushar@csail.mit.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 208612Stushar@csail.mit.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 218612Stushar@csail.mit.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 228612Stushar@csail.mit.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 238612Stushar@csail.mit.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 248612Stushar@csail.mit.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258612Stushar@csail.mit.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 268612Stushar@csail.mit.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278612Stushar@csail.mit.edu * 288612Stushar@csail.mit.edu * Authors: Konstantinos Aisopos 298612Stushar@csail.mit.edu */ 308612Stushar@csail.mit.edu 318612Stushar@csail.mit.edu/* 328612Stushar@csail.mit.edu * Official Tool Website: www.mit.edu/~kaisopos/FaultModel 338612Stushar@csail.mit.edu * 348612Stushar@csail.mit.edu * If you use our tool for academic research, we request that you cite: 358612Stushar@csail.mit.edu * Konstantinos Aisopos, Chia-Hsin Owen Chen, and Li-Shiuan Peh. Enabling 368612Stushar@csail.mit.edu * System-Level Modeling of Variation-Induced Faults in Networks-on-Chip. 378612Stushar@csail.mit.edu * Proceedings of the 48th Design Automation Conference (DAC'11) 388612Stushar@csail.mit.edu */ 398612Stushar@csail.mit.edu 408612Stushar@csail.mit.edu#ifndef __MEM_RUBY_NETWORK_FAULT_MODEL_HH__ 418612Stushar@csail.mit.edu#define __MEM_RUBY_NETWORK_FAULT_MODEL_HH__ 428612Stushar@csail.mit.edu 438612Stushar@csail.mit.edu// tool limitations and fixed inputs 448612Stushar@csail.mit.edu#define MAX_VCs 40 458612Stushar@csail.mit.edu#define MAX_BUFFERS_per_VC 5 468612Stushar@csail.mit.edu#define BASELINE_TEMPERATURE_CELCIUS 71 478612Stushar@csail.mit.edu 488612Stushar@csail.mit.edu// C++ includes 498612Stushar@csail.mit.edu#include <string> 508612Stushar@csail.mit.eduusing namespace std; 518612Stushar@csail.mit.edu 528612Stushar@csail.mit.edu// GEM5 includes 538612Stushar@csail.mit.edu#include "params/FaultModel.hh" 548612Stushar@csail.mit.edu#include "sim/sim_object.hh" 558612Stushar@csail.mit.edu 568612Stushar@csail.mit.educlass FaultModel : public SimObject 578612Stushar@csail.mit.edu{ 588612Stushar@csail.mit.edu public: 598612Stushar@csail.mit.edu typedef FaultModelParams Params; 608612Stushar@csail.mit.edu FaultModel(const Params *p); 618612Stushar@csail.mit.edu const Params *params() const { return (const Params *)_params; } 628612Stushar@csail.mit.edu 638612Stushar@csail.mit.edu /************************************************************************/ 648612Stushar@csail.mit.edu /********** THE FAULT TYPES SUPPORTED BY THE FAULT MODEL ***************/ 658612Stushar@csail.mit.edu /************************************************************************/ 668612Stushar@csail.mit.edu 678612Stushar@csail.mit.edu enum fault_type 688612Stushar@csail.mit.edu { 698612Stushar@csail.mit.edu data_corruption__few_bits, 708612Stushar@csail.mit.edu data_corruption__all_bits, 718612Stushar@csail.mit.edu flit_conservation__flit_duplication, 728612Stushar@csail.mit.edu flit_conservation__flit_loss_or_split, 738612Stushar@csail.mit.edu misrouting, 748612Stushar@csail.mit.edu credit_conservation__credit_generation, 758612Stushar@csail.mit.edu credit_conservation__credit_loss, 768612Stushar@csail.mit.edu erroneous_allocation__VC, 778612Stushar@csail.mit.edu erroneous_allocation__switch, 788612Stushar@csail.mit.edu unfair_arbitration, 798612Stushar@csail.mit.edu number_of_fault_types 808612Stushar@csail.mit.edu }; 818612Stushar@csail.mit.edu 828612Stushar@csail.mit.edu /************************************************************************/ 838612Stushar@csail.mit.edu /******************** INTERFACE OF THE FAULT MODEL *********************/ 848612Stushar@csail.mit.edu /************************************************************************/ 858612Stushar@csail.mit.edu 868612Stushar@csail.mit.edu enum conf_record_format 878612Stushar@csail.mit.edu { 888612Stushar@csail.mit.edu conf_record_buff_per_vc, 898612Stushar@csail.mit.edu conf_record_vcs, 908612Stushar@csail.mit.edu conf_record_first_fault_type, 918612Stushar@csail.mit.edu conf_record_last_fault_type = conf_record_first_fault_type + number_of_fault_types - 1, 928612Stushar@csail.mit.edu fields_per_conf_record 938612Stushar@csail.mit.edu }; 948612Stushar@csail.mit.edu 958612Stushar@csail.mit.edu enum temperature_record_format 968612Stushar@csail.mit.edu { 978612Stushar@csail.mit.edu temperature_record_temp, 988612Stushar@csail.mit.edu temperature_record_weight, 998612Stushar@csail.mit.edu fields_per_temperature_record 1008612Stushar@csail.mit.edu }; 1018612Stushar@csail.mit.edu 1028612Stushar@csail.mit.edu struct system_conf 1038612Stushar@csail.mit.edu { 1048612Stushar@csail.mit.edu int vcs; 1058612Stushar@csail.mit.edu int buff_per_vc; 1068612Stushar@csail.mit.edu float fault_type[number_of_fault_types]; 1078612Stushar@csail.mit.edu }; 1088612Stushar@csail.mit.edu 1098612Stushar@csail.mit.edu int declare_router(int number_of_inputs, 1108612Stushar@csail.mit.edu int number_of_outputs, 1118612Stushar@csail.mit.edu int number_of_vcs_per_vnet, 1128612Stushar@csail.mit.edu int number_of_buff_per_data_vc, 1138612Stushar@csail.mit.edu int number_of_buff_per_ctrl_vc); 1148612Stushar@csail.mit.edu 1158612Stushar@csail.mit.edu string fault_type_to_string(int fault_type_index); 1168612Stushar@csail.mit.edu 1178612Stushar@csail.mit.edu // the following 2 functions are called at runtime, to get the probability 1188612Stushar@csail.mit.edu // of each fault type (fault_vector) or the aggregate fault probability 1198612Stushar@csail.mit.edu // (fault_prob). Note: the probability values are provided by reference 1208612Stushar@csail.mit.edu // (in the variables fault_vector[] & aggregate_fault_prob respectively). 1218612Stushar@csail.mit.edu // Both functions also return a success flag (which is always true if 1228612Stushar@csail.mit.edu // temperature ranges from 0C to 125C) 1238612Stushar@csail.mit.edu 1248612Stushar@csail.mit.edu bool fault_vector(int routerID, 1258612Stushar@csail.mit.edu int temperature, 1268612Stushar@csail.mit.edu float fault_vector[]); 1278612Stushar@csail.mit.edu 1288612Stushar@csail.mit.edu bool fault_prob(int routerID, 1298612Stushar@csail.mit.edu int temperature, 1308612Stushar@csail.mit.edu float *aggregate_fault_prob); 1318612Stushar@csail.mit.edu 1328612Stushar@csail.mit.edu // for debugging purposes 1338612Stushar@csail.mit.edu 1348612Stushar@csail.mit.edu void print(void); 1358612Stushar@csail.mit.edu 1368612Stushar@csail.mit.edu private: 1378612Stushar@csail.mit.edu vector <system_conf> configurations; 1388612Stushar@csail.mit.edu vector <system_conf> routers; 1398612Stushar@csail.mit.edu vector <int> temperature_weights; 1408612Stushar@csail.mit.edu}; 1418612Stushar@csail.mit.edu 1428612Stushar@csail.mit.edu#endif // __MEM_RUBY_NETWORK_FAULT_MODEL_HH__ 143