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 * 3411320Ssteve.reinhardt@amd.com * 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 4012492Sodanrc@yahoo.com.br#ifndef __MEM_RUBY_NETWORK_FAULT_MODEL_FAULTMODEL_HH__ 4112492Sodanrc@yahoo.com.br#define __MEM_RUBY_NETWORK_FAULT_MODEL_FAULTMODEL_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.edu 518612Stushar@csail.mit.edu// GEM5 includes 528612Stushar@csail.mit.edu#include "params/FaultModel.hh" 538612Stushar@csail.mit.edu#include "sim/sim_object.hh" 548612Stushar@csail.mit.edu 558612Stushar@csail.mit.educlass FaultModel : public SimObject 568612Stushar@csail.mit.edu{ 578612Stushar@csail.mit.edu public: 588612Stushar@csail.mit.edu typedef FaultModelParams Params; 598612Stushar@csail.mit.edu FaultModel(const Params *p); 608612Stushar@csail.mit.edu const Params *params() const { return (const Params *)_params; } 618612Stushar@csail.mit.edu 628612Stushar@csail.mit.edu /************************************************************************/ 638612Stushar@csail.mit.edu /********** THE FAULT TYPES SUPPORTED BY THE FAULT MODEL ***************/ 648612Stushar@csail.mit.edu /************************************************************************/ 658612Stushar@csail.mit.edu 6611320Ssteve.reinhardt@amd.com enum fault_type 678612Stushar@csail.mit.edu { 688612Stushar@csail.mit.edu data_corruption__few_bits, 698612Stushar@csail.mit.edu data_corruption__all_bits, 708612Stushar@csail.mit.edu flit_conservation__flit_duplication, 718612Stushar@csail.mit.edu flit_conservation__flit_loss_or_split, 728612Stushar@csail.mit.edu misrouting, 738612Stushar@csail.mit.edu credit_conservation__credit_generation, 748612Stushar@csail.mit.edu credit_conservation__credit_loss, 758612Stushar@csail.mit.edu erroneous_allocation__VC, 768612Stushar@csail.mit.edu erroneous_allocation__switch, 778612Stushar@csail.mit.edu unfair_arbitration, 788612Stushar@csail.mit.edu number_of_fault_types 798612Stushar@csail.mit.edu }; 808612Stushar@csail.mit.edu 818612Stushar@csail.mit.edu /************************************************************************/ 828612Stushar@csail.mit.edu /******************** INTERFACE OF THE FAULT MODEL *********************/ 838612Stushar@csail.mit.edu /************************************************************************/ 848612Stushar@csail.mit.edu 858612Stushar@csail.mit.edu enum conf_record_format 868612Stushar@csail.mit.edu { 878612Stushar@csail.mit.edu conf_record_buff_per_vc, 888612Stushar@csail.mit.edu conf_record_vcs, 898612Stushar@csail.mit.edu conf_record_first_fault_type, 908612Stushar@csail.mit.edu conf_record_last_fault_type = conf_record_first_fault_type + number_of_fault_types - 1, 918612Stushar@csail.mit.edu fields_per_conf_record 928612Stushar@csail.mit.edu }; 938612Stushar@csail.mit.edu 948612Stushar@csail.mit.edu enum temperature_record_format 958612Stushar@csail.mit.edu { 968612Stushar@csail.mit.edu temperature_record_temp, 978612Stushar@csail.mit.edu temperature_record_weight, 988612Stushar@csail.mit.edu fields_per_temperature_record 998612Stushar@csail.mit.edu }; 1008612Stushar@csail.mit.edu 1018612Stushar@csail.mit.edu struct system_conf 1028612Stushar@csail.mit.edu { 1038612Stushar@csail.mit.edu int vcs; 1048612Stushar@csail.mit.edu int buff_per_vc; 1058612Stushar@csail.mit.edu float fault_type[number_of_fault_types]; 1068612Stushar@csail.mit.edu }; 1078612Stushar@csail.mit.edu 10811320Ssteve.reinhardt@amd.com int declare_router(int number_of_inputs, 10911320Ssteve.reinhardt@amd.com int number_of_outputs, 11011320Ssteve.reinhardt@amd.com int number_of_vcs_per_vnet, 11111320Ssteve.reinhardt@amd.com int number_of_buff_per_data_vc, 1128612Stushar@csail.mit.edu int number_of_buff_per_ctrl_vc); 1138612Stushar@csail.mit.edu 1148946Sandreas.hansson@arm.com std::string fault_type_to_string(int fault_type_index); 11511320Ssteve.reinhardt@amd.com 11611320Ssteve.reinhardt@amd.com // the following 2 functions are called at runtime, to get the probability 11711320Ssteve.reinhardt@amd.com // of each fault type (fault_vector) or the aggregate fault probability 1188612Stushar@csail.mit.edu // (fault_prob). Note: the probability values are provided by reference 1198612Stushar@csail.mit.edu // (in the variables fault_vector[] & aggregate_fault_prob respectively). 12011320Ssteve.reinhardt@amd.com // Both functions also return a success flag (which is always true if 1218612Stushar@csail.mit.edu // temperature ranges from 0C to 125C) 1228612Stushar@csail.mit.edu 12311320Ssteve.reinhardt@amd.com bool fault_vector(int routerID, 12411320Ssteve.reinhardt@amd.com int temperature, 1258612Stushar@csail.mit.edu float fault_vector[]); 1268612Stushar@csail.mit.edu 1278612Stushar@csail.mit.edu bool fault_prob(int routerID, 12811320Ssteve.reinhardt@amd.com int temperature, 1298612Stushar@csail.mit.edu float *aggregate_fault_prob); 1308612Stushar@csail.mit.edu 1318612Stushar@csail.mit.edu // for debugging purposes 1328612Stushar@csail.mit.edu 1338612Stushar@csail.mit.edu void print(void); 1348612Stushar@csail.mit.edu 1358612Stushar@csail.mit.edu private: 1368946Sandreas.hansson@arm.com std::vector <system_conf> configurations; 1378946Sandreas.hansson@arm.com std::vector <system_conf> routers; 1388946Sandreas.hansson@arm.com std::vector <int> temperature_weights; 1398612Stushar@csail.mit.edu}; 1408612Stushar@csail.mit.edu 14112492Sodanrc@yahoo.com.br#endif //__MEM_RUBY_NETWORK_FAULT_MODEL_FAULTMODEL_HH__ 142