scc  2022.4.0
SystemC components library
configurer.h
1 /*******************************************************************************
2  * Copyright 2017-2022 MINRES Technologies GmbH
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *******************************************************************************/
16 
17 #ifndef _SYSC_CONFIGURER_H_
18 #define _SYSC_CONFIGURER_H_
19 
20 #include "report.h"
21 #include "utilities.h"
22 #include <cci_configuration>
23 #include <regex>
24 
30 namespace scc {
31 
32 bool init_cci(std::string name = "Global Broker");
41 class configurer : public sc_core::sc_module {
42  struct ConfigHolder;
43 
44 public:
45  using base_type = sc_core::sc_module;
46  using broker_t = cci::cci_broker_handle;
47  using cci_param_cln = std::vector<std::pair<cci::cci_param_post_write_callback_untyped, std::unique_ptr<cci::cci_param_untyped>>>;
48  enum { NEVER = 0, BEFORE_END_OF_ELABORATION = 1, END_OF_ELABORATION = 2, START_OF_SIMULATION = 4 };
54  configurer(std::string const& filename, unsigned sc_attr_config_phases = BEFORE_END_OF_ELABORATION);
55 
56  configurer() = delete;
57 
58  configurer(const configurer&) = delete;
59 
60  configurer(configurer&&) = delete;
61 
62  ~configurer();
63 
64  configurer& operator=(const configurer&) = delete;
65 
66  configurer& operator=(configurer&&) = delete;
67 
68  void read_input_file(std::string const& filename);
73  void configure();
80  void dump_configuration(std::ostream& os = std::cout, bool as_yaml = true, bool with_description = false,
81  sc_core::sc_object* obj = nullptr);
88  void dump_configuration(std::string const& file_name, bool with_description = false) {
89  dump_file_name = file_name;
90  this->with_description = with_description;
91  }
101  template <typename T> void set_value(std::string const& hier_name, T value) { set_value(hier_name, cci::cci_value(value)); }
109  void set_configuration_value(sc_core::sc_attr_base* attr_base, sc_core::sc_object* owner);
115  static configurer& get() {
116  configurer* inst = dynamic_cast<configurer*>(sc_core::sc_find_object("$$$configurer$$$"));
117  if(!inst)
118  SCCFATAL() << "No configurer instantiated when using it";
119  return *inst;
120  }
121 
122 protected:
123  unsigned const config_phases;
124  std::string dump_file_name{""};
125  bool with_description{false};
126  configurer(std::string const& filename, unsigned sc_attr_config_phases, sc_core::sc_module_name nm);
127  void config_check();
128  void before_end_of_elaboration() override {
129  if(config_phases & BEFORE_END_OF_ELABORATION)
130  configure();
131  }
132  void end_of_elaboration() override {
133  if(config_phases & END_OF_ELABORATION)
134  configure();
135  }
136  void start_of_simulation() override;
137  broker_t cci_broker;
138  void set_value(const std::string& hier_name, cci::cci_value value);
139  cci_param_cln cci2sc_attr;
140  cci::cci_originator cci_originator;
141  std::unique_ptr<ConfigHolder> root;
142 };
143 
144 } // namespace scc // end of scc-sysc
146 #endif /* _SYSC_CONFIGURER_H_ */
design configuration reader
Definition: configurer.h:41
void set_configuration_value(sc_core::sc_attr_base *attr_base, sc_core::sc_object *owner)
Definition: configurer.cpp:685
void dump_configuration(std::string const &file_name, bool with_description=false)
Definition: configurer.h:88
void dump_configuration(std::ostream &os=std::cout, bool as_yaml=true, bool with_description=false, sc_core::sc_object *obj=nullptr)
Definition: configurer.cpp:661
static configurer & get()
Definition: configurer.h:115
configurer(std::string const &filename, unsigned sc_attr_config_phases=BEFORE_END_OF_ELABORATION)
Definition: configurer.cpp:627
void set_value(std::string const &hier_name, T value)
Definition: configurer.h:101
SCC SystemC utilities.