oqueue.cpp
来自「基于4个mips核的noc设计」· C++ 代码 · 共 99 行
CPP
99 行
/* * TU Eindhoven * Eindhoven, The Netherlands * * Name : oqueue.cpp * * Author : A.S.Slusarczyk@tue.nl * * Date : 13-09-2003 * * Function : Output queue of the e-cube router * * */#include "oqueue.h"// FSM controling the buffervoid OUTPUT_QUEUE::control_logic(){ bool req_v, ack_in_v, buffer_write_v, buffer_clear_v; req_v = false; ack_in_v = false; buffer_write_v = false; buffer_clear_v = false; next_state = EMPTY; switch( current_state.read() ) { case EMPTY : // empty buffer - wait for request from switch if( req_in.read() ){ // buffer the input data, acknowledge its storing and try sending further buffer_write_v = true; next_state = BUFFERING; ack_in_v = true;#ifdef ROUTEPRINT cout << name() << " got flit 0x" << hex << data_in.read().to_uint() << dec << " @" << sc_time_stamp() << endl; #endif } else next_state = EMPTY; break; case BUFFERING : // sending buffered data - assert network request, wait for ack req_v = true; if( ack.read() ){ next_state = EMPTY;#ifdef ROUTEPRINT cout << name() << " sent flit 0x" << hex << buffer.read().to_uint() << dec << " @" << sc_time_stamp() << endl; #endif } else next_state = BUFFERING; break; } req.write(req_v); ack_in.write(ack_in_v); buffer_write.write(buffer_write_v); buffer_clear.write(buffer_clear_v); }void OUTPUT_QUEUE::control_change_state(){ if( rst.read() ) current_state = EMPTY; else current_state = next_state;}void OUTPUT_QUEUE::buffer_process(){ if( rst.read() ) { buffer = 0; } else { if( buffer_clear.read() ){ buffer = 0; } else if( buffer_write.read() ){ buffer = data_in.read(); } } }void OUTPUT_QUEUE::data_out(){ data.write( buffer.read() );}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?