diff options
Diffstat (limited to 'src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh')
-rw-r--r-- | src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh | 269 |
1 files changed, 145 insertions, 124 deletions
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh b/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh index 4f02729ed..bb2b7aa82 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh +++ b/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh @@ -28,8 +28,8 @@ * Authors: Niket Agarwal */ -#ifndef INPUT_UNIT_D_H -#define INPUT_UNIT_D_H +#ifndef __MEM_RUBY_NETWORK_GARNET_FIXED_PIPELINE_INPUT_UNIT_D_HH__ +#define __MEM_RUBY_NETWORK_GARNET_FIXED_PIPELINE_INPUT_UNIT_D_HH__ #include <iostream> #include <vector> @@ -43,127 +43,148 @@ class Router_d; -class InputUnit_d : public Consumer { -public: - InputUnit_d(int id, Router_d *router); - ~InputUnit_d(); - - void wakeup(); - void printConfig(std::ostream& out); - flitBuffer_d* getCreditQueue() { return creditQueue; } - void print(std::ostream& out) const {}; - - inline int get_inlink_id() - { - return m_in_link->get_id(); - } - - inline void set_vc_state(VC_state_type state, int vc) - { - m_vcs[vc]->set_state(state); - } - inline void set_enqueue_time(int invc, Time time) - { - m_vcs[invc]->set_enqueue_time(time); - } - inline Time get_enqueue_time(int invc) - { - return m_vcs[invc]->get_enqueue_time(); - } - inline void update_credit(int in_vc, int credit) - { - m_vcs[in_vc]->update_credit(credit); - } - - inline bool has_credits(int vc) - { - return m_vcs[vc]->has_credits(); - } - - inline void increment_credit(int in_vc, bool free_signal) - { - flit_d *t_flit = new flit_d(in_vc, free_signal); - creditQueue->insert(t_flit); - g_eventQueue_ptr->scheduleEvent(m_credit_link, 1); - } - - inline int get_outvc(int invc) - { - return m_vcs[invc]->get_outvc(); - } - - inline void updateRoute(int vc, int outport) - { - m_vcs[vc]->set_outport(outport); - m_vcs[vc]->set_state(VC_AB_); - } - - inline void grant_vc(int in_vc, int out_vc) - { - m_vcs[in_vc]->grant_vc(out_vc); - } - - inline flit_d* peekTopFlit(int vc) - { - return m_vcs[vc]->peekTopFlit(); - } - - inline flit_d* getTopFlit(int vc) - { - return m_vcs[vc]->getTopFlit(); - } - - inline bool need_stage(int vc, VC_state_type state, flit_stage stage) - { - return m_vcs[vc]->need_stage(state, stage); - } - - inline bool need_stage_nextcycle(int vc, VC_state_type state, flit_stage stage) - { - return m_vcs[vc]->need_stage_nextcycle(state, stage); - } - - inline bool isReady(int invc) - { - return m_vcs[invc]->isReady(); - } - - inline int get_route(int vc) - { - return m_vcs[vc]->get_route(); - } - inline void set_in_link(NetworkLink_d *link) - { - m_in_link = link; - } - - inline void set_credit_link(CreditLink_d *credit_link) - { - m_credit_link = credit_link; - } - - inline double get_buf_read_count() - { - return m_num_buffer_reads; - } - - inline double get_buf_write_count() - { - return m_num_buffer_writes; - } - -private: - int m_id; - int m_num_vcs; - double m_num_buffer_writes, m_num_buffer_reads; - - Router_d *m_router; - NetworkLink_d *m_in_link; - CreditLink_d *m_credit_link; - flitBuffer_d *creditQueue; - - // Virtual channels - std::vector<VirtualChannel_d *> m_vcs; // [vc] +class InputUnit_d : public Consumer +{ + public: + InputUnit_d(int id, Router_d *router); + ~InputUnit_d(); + + void wakeup(); + void printConfig(std::ostream& out); + flitBuffer_d* getCreditQueue() { return creditQueue; } + void print(std::ostream& out) const {}; + + inline int get_inlink_id() { return m_in_link->get_id(); } + + inline void + set_vc_state(VC_state_type state, int vc) + { + m_vcs[vc]->set_state(state); + } + + inline void + set_enqueue_time(int invc, Time time) + { + m_vcs[invc]->set_enqueue_time(time); + } + + inline Time + get_enqueue_time(int invc) + { + return m_vcs[invc]->get_enqueue_time(); + } + + inline void + update_credit(int in_vc, int credit) + { + m_vcs[in_vc]->update_credit(credit); + } + + inline bool + has_credits(int vc) + { + return m_vcs[vc]->has_credits(); + } + + inline void + increment_credit(int in_vc, bool free_signal) + { + flit_d *t_flit = new flit_d(in_vc, free_signal); + creditQueue->insert(t_flit); + g_eventQueue_ptr->scheduleEvent(m_credit_link, 1); + } + + inline int + get_outvc(int invc) + { + return m_vcs[invc]->get_outvc(); + } + + inline void + updateRoute(int vc, int outport) + { + m_vcs[vc]->set_outport(outport); + m_vcs[vc]->set_state(VC_AB_); + } + + inline void + grant_vc(int in_vc, int out_vc) + { + m_vcs[in_vc]->grant_vc(out_vc); + } + + inline flit_d* + peekTopFlit(int vc) + { + return m_vcs[vc]->peekTopFlit(); + } + + inline flit_d* + getTopFlit(int vc) + { + return m_vcs[vc]->getTopFlit(); + } + + inline bool + need_stage(int vc, VC_state_type state, flit_stage stage) + { + return m_vcs[vc]->need_stage(state, stage); + } + + inline bool + need_stage_nextcycle(int vc, VC_state_type state, flit_stage stage) + { + return m_vcs[vc]->need_stage_nextcycle(state, stage); + } + + inline bool + isReady(int invc) + { + return m_vcs[invc]->isReady(); + } + + inline int + get_route(int vc) + { + return m_vcs[vc]->get_route(); + } + + inline void + set_in_link(NetworkLink_d *link) + { + m_in_link = link; + } + + inline void + set_credit_link(CreditLink_d *credit_link) + { + m_credit_link = credit_link; + } + + inline double + get_buf_read_count() + { + return m_num_buffer_reads; + } + + inline double + get_buf_write_count() + { + return m_num_buffer_writes; + } + + private: + int m_id; + int m_num_vcs; + double m_num_buffer_writes, m_num_buffer_reads; + + Router_d *m_router; + NetworkLink_d *m_in_link; + CreditLink_d *m_credit_link; + flitBuffer_d *creditQueue; + + // Virtual channels + std::vector<VirtualChannel_d *> m_vcs; }; -#endif +#endif // __MEM_RUBY_NETWORK_GARNET_FIXED_PIPELINE_INPUT_UNIT_D_HH__ |