summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/fault_model/FaultModel.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/network/fault_model/FaultModel.hh')
-rw-r--r--src/mem/ruby/network/fault_model/FaultModel.hh142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/mem/ruby/network/fault_model/FaultModel.hh b/src/mem/ruby/network/fault_model/FaultModel.hh
new file mode 100644
index 000000000..12a3f3844
--- /dev/null
+++ b/src/mem/ruby/network/fault_model/FaultModel.hh
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2011 Massachusetts Institute of Technology
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Konstantinos Aisopos
+ */
+
+/*
+ * Official Tool Website: www.mit.edu/~kaisopos/FaultModel
+ *
+ * If you use our tool for academic research, we request that you cite:
+ * Konstantinos Aisopos, Chia-Hsin Owen Chen, and Li-Shiuan Peh. Enabling
+ * System-Level Modeling of Variation-Induced Faults in Networks-on-Chip.
+ * Proceedings of the 48th Design Automation Conference (DAC'11)
+ */
+
+#ifndef __MEM_RUBY_NETWORK_FAULT_MODEL_HH__
+#define __MEM_RUBY_NETWORK_FAULT_MODEL_HH__
+
+// tool limitations and fixed inputs
+#define MAX_VCs 40
+#define MAX_BUFFERS_per_VC 5
+#define BASELINE_TEMPERATURE_CELCIUS 71
+
+// C++ includes
+#include <string>
+using namespace std;
+
+// GEM5 includes
+#include "params/FaultModel.hh"
+#include "sim/sim_object.hh"
+
+class FaultModel : public SimObject
+{
+ public:
+ typedef FaultModelParams Params;
+ FaultModel(const Params *p);
+ const Params *params() const { return (const Params *)_params; }
+
+ /************************************************************************/
+ /********** THE FAULT TYPES SUPPORTED BY THE FAULT MODEL ***************/
+ /************************************************************************/
+
+ enum fault_type
+ {
+ data_corruption__few_bits,
+ data_corruption__all_bits,
+ flit_conservation__flit_duplication,
+ flit_conservation__flit_loss_or_split,
+ misrouting,
+ credit_conservation__credit_generation,
+ credit_conservation__credit_loss,
+ erroneous_allocation__VC,
+ erroneous_allocation__switch,
+ unfair_arbitration,
+ number_of_fault_types
+ };
+
+ /************************************************************************/
+ /******************** INTERFACE OF THE FAULT MODEL *********************/
+ /************************************************************************/
+
+ enum conf_record_format
+ {
+ conf_record_buff_per_vc,
+ conf_record_vcs,
+ conf_record_first_fault_type,
+ conf_record_last_fault_type = conf_record_first_fault_type + number_of_fault_types - 1,
+ fields_per_conf_record
+ };
+
+ enum temperature_record_format
+ {
+ temperature_record_temp,
+ temperature_record_weight,
+ fields_per_temperature_record
+ };
+
+ struct system_conf
+ {
+ int vcs;
+ int buff_per_vc;
+ float fault_type[number_of_fault_types];
+ };
+
+ int declare_router(int number_of_inputs,
+ int number_of_outputs,
+ int number_of_vcs_per_vnet,
+ int number_of_buff_per_data_vc,
+ int number_of_buff_per_ctrl_vc);
+
+ string fault_type_to_string(int fault_type_index);
+
+ // the following 2 functions are called at runtime, to get the probability
+ // of each fault type (fault_vector) or the aggregate fault probability
+ // (fault_prob). Note: the probability values are provided by reference
+ // (in the variables fault_vector[] & aggregate_fault_prob respectively).
+ // Both functions also return a success flag (which is always true if
+ // temperature ranges from 0C to 125C)
+
+ bool fault_vector(int routerID,
+ int temperature,
+ float fault_vector[]);
+
+ bool fault_prob(int routerID,
+ int temperature,
+ float *aggregate_fault_prob);
+
+ // for debugging purposes
+
+ void print(void);
+
+ private:
+ vector <system_conf> configurations;
+ vector <system_conf> routers;
+ vector <int> temperature_weights;
+};
+
+#endif // __MEM_RUBY_NETWORK_FAULT_MODEL_HH__