rlm@8: import FIFOF::*; rlm@8: import RWire::*; rlm@8: import GetPut::*; rlm@8: rlm@8: // Convert a FIFOF into a put interface rlm@8: rlm@8: function Put#(item_t) fifofToPut( FIFOF#(item_t) f ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Put rlm@8: method Action put( item_t item ); rlm@8: f.enq(item); rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction rlm@8: rlm@8: // Convert a FIFOF into a get interface rlm@8: rlm@8: function Get#(item_t) fifofToGet( FIFOF#(item_t) f ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Get rlm@8: method ActionValue#(item_t) get(); rlm@8: f.deq(); rlm@8: return f.first(); rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction rlm@8: rlm@8: // Convert a register into an (always ready) put interface rlm@8: rlm@8: function Put#(item_t) regToPut( Reg#(item_t) r ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Put rlm@8: method Action put( item_t item ); rlm@8: r <= item; rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction rlm@8: rlm@8: // Convert a register into an (always ready) get interface rlm@8: rlm@8: function Get#(item_t) regToGet( Reg#(item_t) r ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Get rlm@8: method ActionValue#(item_t) get(); rlm@8: return r; rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction rlm@8: rlm@8: // Convert a Wire into a put interface rlm@8: rlm@8: function Put#(item_t) wireToPut( Wire#(item_t) w ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Put rlm@8: method Action put( item_t item ); rlm@8: w._write(item); rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction rlm@8: rlm@8: // Convert a WIREF into a get interface rlm@8: rlm@8: function Get#(item_t) wireToGet( Wire#(item_t) w ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Get rlm@8: method ActionValue#(item_t) get(); rlm@8: return w._read(); rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction rlm@8: rlm@8: // Convert a RWire into a put interface rlm@8: rlm@8: function Put#(item_t) rwireToPut( RWire#(item_t) w ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Put rlm@8: method Action put( item_t item ); rlm@8: w.wset(item); rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction rlm@8: rlm@8: // Convert a RWire into a get interface rlm@8: rlm@8: function Get#(item_t) rwireToGet( RWire#(item_t) w ) provisos ( ); rlm@8: return rlm@8: ( rlm@8: interface Get rlm@8: method ActionValue#(item_t) get() if ( isValid(w.wget()) ); rlm@8: return unJust(w.wget()); rlm@8: endmethod rlm@8: endinterface rlm@8: ); rlm@8: endfunction