//////////////////////////////////////////////////////////////////////////////// // Copyright 2017 eyck@minres.com // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. //////////////////////////////////////////////////////////////////////////////// /* * simplesystem.cpp * * Created on: 17.09.2017 * Author: eyck@minres.com */ #include namespace sysc { platform::platform(sc_core::sc_module_name nm) : sc_core::sc_module(nm), NAMED(i_master), NAMED(i_router, 4, 1), NAMED(i_uart), NAMED(i_spi), NAMED(i_gpio), NAMED(i_plic), NAMED(s_clk), NAMED(s_rst) { i_master.initiator(i_router.target[0]); size_t i = 0; for (const auto &e : e300_plat_map) { i_router.initiator.at(i)(e.target->socket); i_router.add_target_range(i, e.start, e.size); i++; } i_uart.clk_i(s_clk); i_spi.clk_i(s_clk); i_gpio.clk_i(s_clk); i_plic.clk_i(s_clk); s_clk.write(10_ns); i_uart.rst_i(s_rst); i_spi.rst_i(s_rst); i_gpio.rst_i(s_rst); i_plic.rst_i(s_rst); i_master.rst_i(s_rst); SC_THREAD(gen_reset); } void platform::gen_reset() { s_rst = true; wait(10_ns); s_rst = false; } } /* namespace sysc */