2 * Copyright (c) 2010 Massachusetts Institute of Technology
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution;
12 * neither the name of the copyright holders nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 * Authors: Chia-Hsin Owen Chen
34 #include "mem/ruby/network/orion/ConfigFile.hh"
35 #include "mem/ruby/network/orion/OrionConfig.hh"
36 #include "mem/ruby/network/orion/TechParameter.hh"
40 string
OrionConfig::ms_param_name
[] = {
49 "NUM_VIRTUAL_CHANNEL",
50 "IS_IN_SHARED_BUFFER",
51 "IS_OUT_SHARED_BUFFER",
52 "IS_IN_SHARED_SWITCH",
53 "IS_OUT_SHARED_SWITCH",
57 "IN_BUF_NUM_READ_PORT",
61 "OUT_BUF_NUM_WRITE_PORT",
64 "SRAM_ROWDEC_PRE_MODEL",
65 "SRAM_WORDLINE_MODEL",
66 "SRAM_BITLINE_PRE_MODEL",
71 "CROSSBAR_CONNECT_TYPE",
72 "CROSSBAR_TRANS_GATE_TYPE",
73 "CROSSBAR_MUX_DEGREE",
74 "CROSSBAR_NUM_IN_SEG",
75 "CROSSBAR_NUM_OUT_SEG",
76 "CROSSBAR_LEN_IN_WIRE",
77 "CROSSBAR_LEN_OUT_WIRE",
82 "VA_OUT_ARB_FF_MODEL",
87 "SA_OUT_ARB_FF_MODEL",
91 "WIRE_BUFFERING_MODEL",
97 OrionConfig::OrionConfig(const string
& cfg_fn_
)
99 uint32_t num_param
= sizeof(ms_param_name
)/sizeof(string
);
101 for(uint32_t i
= 0; i
< num_param
; i
++)
103 m_params_map
[ms_param_name
[i
]] = "NOT_SET";
107 m_tech_param_ptr
= new TechParameter(this);
110 OrionConfig::OrionConfig(const OrionConfig
& orion_cfg_
)
112 m_params_map
= orion_cfg_
.m_params_map
;
113 m_num_in_port
= orion_cfg_
.m_num_in_port
;
114 m_num_out_port
= orion_cfg_
.m_num_out_port
;
115 m_num_vclass
= orion_cfg_
.m_num_vclass
;
116 m_num_vchannel
= orion_cfg_
.m_num_vchannel
;
117 m_in_buf_num_set
= orion_cfg_
.m_in_buf_num_set
;
118 m_flit_width
= orion_cfg_
.m_flit_width
;
120 m_tech_param_ptr
= new TechParameter(this);
123 OrionConfig::~OrionConfig()
125 delete m_tech_param_ptr
;
128 void OrionConfig::set_num_in_port(uint32_t num_in_port_
)
130 m_params_map
[string("NUM_INPUT_PORT")] = T_as_string
<uint32_t>(num_in_port_
);
131 m_num_in_port
= num_in_port_
;
135 void OrionConfig::set_num_out_port(uint32_t num_out_port_
)
137 m_params_map
[string("NUM_OUTPUT_PORT")] = T_as_string
<uint32_t>(num_out_port_
);
138 m_num_out_port
= num_out_port_
;
142 void OrionConfig::set_num_vclass(uint32_t num_vclass_
)
144 m_params_map
[string("NUM_VIRTUAL_CLASS")] = T_as_string
<uint32_t>(num_vclass_
);
145 m_num_vclass
= num_vclass_
;
149 void OrionConfig::set_num_vchannel(uint32_t num_vchannel_
)
151 m_params_map
[string("NUM_VIRTUAL_CHANNEL")] = T_as_string
<uint32_t>(num_vchannel_
);
152 m_num_vchannel
= num_vchannel_
;
156 void OrionConfig::set_in_buf_num_set(uint32_t in_buf_num_set_
)
158 m_params_map
[string("IN_BUF_NUM_SET")] = T_as_string
<uint32_t>(in_buf_num_set_
);
159 m_in_buf_num_set
= in_buf_num_set_
;
163 void OrionConfig::set_flit_width(uint32_t flit_width_
)
165 m_params_map
[string("FLIT_WIDTH")] = T_as_string
<uint32_t>(flit_width_
);
166 m_flit_width
= flit_width_
;
170 void OrionConfig::read_file(
171 const string
& filename_
174 ConfigFile
cfg_file(filename_
);
176 uint32_t num_param
= sizeof(ms_param_name
)/sizeof(string
);
177 for(uint32_t i
= 0; i
< num_param
; i
++)
179 cfg_file
.readInto(m_params_map
[ms_param_name
[i
]], ms_param_name
[i
]);
182 m_num_in_port
= get
<uint32_t>("NUM_INPUT_PORT");
183 m_num_out_port
= get
<uint32_t>("NUM_OUTPUT_PORT");
184 m_num_vclass
= get
<uint32_t>("NUM_VIRTUAL_CLASS");
185 m_num_vchannel
= get
<uint32_t>("NUM_VIRTUAL_CHANNEL");
186 m_in_buf_num_set
= get
<uint32_t>("IN_BUF_NUM_SET");
187 m_flit_width
= get
<uint32_t>("FLIT_WIDTH");
191 void OrionConfig::print_config(ostream
& out_
)
193 uint32_t num_param
= sizeof(ms_param_name
)/sizeof(string
);
195 for(uint32_t i
= 0; i
< num_param
; i
++)
197 out_
<< ms_param_name
[i
] << " = " << m_params_map
[ms_param_name
[i
]] << endl
;