Implemented basic HiFive1-like platform with PLL,tracing etc.
This commit is contained in:
@ -16,14 +16,17 @@ namespace sysc {
|
||||
|
||||
class system: sc_core::sc_module {
|
||||
public:
|
||||
SC_HAS_PROCESS(system);
|
||||
|
||||
system(sc_core::sc_module_name nm);
|
||||
virtual ~system();
|
||||
|
||||
sc_core::sc_vector<tlm::tlm_signal<sc_dt::sc_logic>> s_gpio;
|
||||
|
||||
private:
|
||||
sc_core::sc_vector<tlm::tlm_signal<sc_dt::sc_logic>> s_gpio;
|
||||
sc_core::sc_signal<bool> s_rst_n;
|
||||
sysc::platform i_platform;
|
||||
sysc::terminal i_terminal;
|
||||
void gen_por();
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -47,13 +47,17 @@ class aon : public sc_core::sc_module, public scc::tlm_target<> {
|
||||
public:
|
||||
SC_HAS_PROCESS(aon);
|
||||
sc_core::sc_in<sc_core::sc_time> clk_i;
|
||||
sc_core::sc_in<bool> rst_i;
|
||||
sc_core::sc_in<bool> erst_n_i;
|
||||
sc_core::sc_out<sc_core::sc_time> lfclkc_o;
|
||||
sc_core::sc_out<bool> rst_o;
|
||||
aon(sc_core::sc_module_name nm);
|
||||
virtual ~aon() override; // need to keep it in source file because of fwd declaration of aon_regs
|
||||
|
||||
protected:
|
||||
void start_of_simulation() override;
|
||||
void clock_cb();
|
||||
void reset_cb();
|
||||
void reset_internal_cb();
|
||||
sc_core::sc_time clk;
|
||||
std::unique_ptr<aon_regs> regs;
|
||||
};
|
||||
|
@ -134,6 +134,7 @@ protected:
|
||||
void start_of_simulation();
|
||||
void run();
|
||||
void clk_cb();
|
||||
void rst_cb();
|
||||
void sw_irq_cb();
|
||||
void timer_irq_cb();
|
||||
void global_irq_cb();
|
||||
|
@ -95,7 +95,7 @@ public:
|
||||
inline sysc::prci_regs::prci_regs(sc_core::sc_module_name nm)
|
||||
: sc_core::sc_module(nm)
|
||||
, NAMED(hfrosccfg, r_hfrosccfg, 0, *this)
|
||||
, NAMED(hfxosccfg, r_hfxosccfg, 0, *this)
|
||||
, NAMED(hfxosccfg, r_hfxosccfg, 0x40000000, *this)
|
||||
, NAMED(pllcfg, r_pllcfg, 0, *this)
|
||||
, NAMED(plloutdiv, r_plloutdiv, 0, *this)
|
||||
, NAMED(coreclkcfg, r_coreclkcfg, 0, *this)
|
||||
|
@ -77,8 +77,13 @@ protected:
|
||||
void forward_pin_input(unsigned int tag, tlm::tlm_signal_gp<sc_logic>& gp);
|
||||
void iof_input(unsigned int tag, unsigned iof_idx, tlm::tlm_signal_gp<>& gp, sc_core::sc_time& delay);
|
||||
sc_core::sc_time clk;
|
||||
std::array<bool, 32> last_iof0, last_iof1;
|
||||
std::unique_ptr<gpio_regs> regs;
|
||||
std::shared_ptr<sysc::WsHandler> handler;
|
||||
|
||||
private:
|
||||
tlm::tlm_phase write_output(tlm::tlm_signal_gp<sc_dt::sc_logic>& gp, size_t i, sc_dt::sc_logic val);
|
||||
void enable_outputs(uint32_t new_data);
|
||||
};
|
||||
|
||||
} /* namespace sysc */
|
||||
|
@ -63,6 +63,8 @@ public:
|
||||
sc_core::sc_vector<tlm::tlm_signal_initiator_socket<sc_dt::sc_logic>> pins_o;
|
||||
sc_core::sc_vector<tlm::tlm_signal_target_socket<sc_dt::sc_logic>> pins_i;
|
||||
|
||||
sc_core::sc_in<bool> erst_n;
|
||||
|
||||
platform(sc_core::sc_module_name nm);
|
||||
|
||||
private:
|
||||
|
@ -46,18 +46,21 @@ class prci_regs;
|
||||
class prci : public sc_core::sc_module, public scc::tlm_target<> {
|
||||
public:
|
||||
SC_HAS_PROCESS(prci);
|
||||
sc_core::sc_in<sc_core::sc_time> clk_i;
|
||||
sc_core::sc_port<sc_core::sc_signal_in_if<sc_core::sc_time>,1,SC_ZERO_OR_MORE_BOUND> hfxosc_i;
|
||||
sc_core::sc_in<bool> rst_i;
|
||||
sc_core::sc_out<sc_core::sc_time> hfclk_o;
|
||||
prci(sc_core::sc_module_name nm);
|
||||
virtual ~prci() override; // need to keep it in source file because of fwd declaration of prci_regs
|
||||
|
||||
protected:
|
||||
void clock_cb();
|
||||
void hfxosc_cb();
|
||||
void reset_cb();
|
||||
void hfrosc_en_cb();
|
||||
sc_core::sc_time clk;
|
||||
void hfxosc_en_cb();
|
||||
void update_hfclk();
|
||||
sc_core::sc_time hfxosc_clk, hfrosc_clk, pll_clk, hfclk;
|
||||
std::unique_ptr<prci_regs> regs;
|
||||
sc_core::sc_event hfrosc_en_evt;
|
||||
sc_core::sc_event hfrosc_en_evt, hfxosc_en_evt;
|
||||
};
|
||||
|
||||
} /* namespace sysc */
|
||||
|
Reference in New Issue
Block a user