Mercurial > pygar
annotate modules/bluespec/Pygar/lab4/GetPutExt.bsv @ 23:90197e3375e2 pygar svn.24
[svn r24] added testing, but something is wrong with our c++ file.
author | rlm |
---|---|
date | Wed, 28 Apr 2010 08:19:09 -0400 |
parents | 74716e9a81cc |
children |
rev | line source |
---|---|
rlm@8 | 1 import FIFOF::*; |
rlm@8 | 2 import RWire::*; |
rlm@8 | 3 import GetPut::*; |
rlm@8 | 4 |
rlm@8 | 5 // Convert a FIFOF into a put interface |
rlm@8 | 6 |
rlm@8 | 7 function Put#(item_t) fifofToPut( FIFOF#(item_t) f ) provisos ( ); |
rlm@8 | 8 return |
rlm@8 | 9 ( |
rlm@8 | 10 interface Put |
rlm@8 | 11 method Action put( item_t item ); |
rlm@8 | 12 f.enq(item); |
rlm@8 | 13 endmethod |
rlm@8 | 14 endinterface |
rlm@8 | 15 ); |
rlm@8 | 16 endfunction |
rlm@8 | 17 |
rlm@8 | 18 // Convert a FIFOF into a get interface |
rlm@8 | 19 |
rlm@8 | 20 function Get#(item_t) fifofToGet( FIFOF#(item_t) f ) provisos ( ); |
rlm@8 | 21 return |
rlm@8 | 22 ( |
rlm@8 | 23 interface Get |
rlm@8 | 24 method ActionValue#(item_t) get(); |
rlm@8 | 25 f.deq(); |
rlm@8 | 26 return f.first(); |
rlm@8 | 27 endmethod |
rlm@8 | 28 endinterface |
rlm@8 | 29 ); |
rlm@8 | 30 endfunction |
rlm@8 | 31 |
rlm@8 | 32 // Convert a register into an (always ready) put interface |
rlm@8 | 33 |
rlm@8 | 34 function Put#(item_t) regToPut( Reg#(item_t) r ) provisos ( ); |
rlm@8 | 35 return |
rlm@8 | 36 ( |
rlm@8 | 37 interface Put |
rlm@8 | 38 method Action put( item_t item ); |
rlm@8 | 39 r <= item; |
rlm@8 | 40 endmethod |
rlm@8 | 41 endinterface |
rlm@8 | 42 ); |
rlm@8 | 43 endfunction |
rlm@8 | 44 |
rlm@8 | 45 // Convert a register into an (always ready) get interface |
rlm@8 | 46 |
rlm@8 | 47 function Get#(item_t) regToGet( Reg#(item_t) r ) provisos ( ); |
rlm@8 | 48 return |
rlm@8 | 49 ( |
rlm@8 | 50 interface Get |
rlm@8 | 51 method ActionValue#(item_t) get(); |
rlm@8 | 52 return r; |
rlm@8 | 53 endmethod |
rlm@8 | 54 endinterface |
rlm@8 | 55 ); |
rlm@8 | 56 endfunction |
rlm@8 | 57 |
rlm@8 | 58 // Convert a Wire into a put interface |
rlm@8 | 59 |
rlm@8 | 60 function Put#(item_t) wireToPut( Wire#(item_t) w ) provisos ( ); |
rlm@8 | 61 return |
rlm@8 | 62 ( |
rlm@8 | 63 interface Put |
rlm@8 | 64 method Action put( item_t item ); |
rlm@8 | 65 w._write(item); |
rlm@8 | 66 endmethod |
rlm@8 | 67 endinterface |
rlm@8 | 68 ); |
rlm@8 | 69 endfunction |
rlm@8 | 70 |
rlm@8 | 71 // Convert a WIREF into a get interface |
rlm@8 | 72 |
rlm@8 | 73 function Get#(item_t) wireToGet( Wire#(item_t) w ) provisos ( ); |
rlm@8 | 74 return |
rlm@8 | 75 ( |
rlm@8 | 76 interface Get |
rlm@8 | 77 method ActionValue#(item_t) get(); |
rlm@8 | 78 return w._read(); |
rlm@8 | 79 endmethod |
rlm@8 | 80 endinterface |
rlm@8 | 81 ); |
rlm@8 | 82 endfunction |
rlm@8 | 83 |
rlm@8 | 84 // Convert a RWire into a put interface |
rlm@8 | 85 |
rlm@8 | 86 function Put#(item_t) rwireToPut( RWire#(item_t) w ) provisos ( ); |
rlm@8 | 87 return |
rlm@8 | 88 ( |
rlm@8 | 89 interface Put |
rlm@8 | 90 method Action put( item_t item ); |
rlm@8 | 91 w.wset(item); |
rlm@8 | 92 endmethod |
rlm@8 | 93 endinterface |
rlm@8 | 94 ); |
rlm@8 | 95 endfunction |
rlm@8 | 96 |
rlm@8 | 97 // Convert a RWire into a get interface |
rlm@8 | 98 |
rlm@8 | 99 function Get#(item_t) rwireToGet( RWire#(item_t) w ) provisos ( ); |
rlm@8 | 100 return |
rlm@8 | 101 ( |
rlm@8 | 102 interface Get |
rlm@8 | 103 method ActionValue#(item_t) get() if ( isValid(w.wget()) ); |
rlm@8 | 104 return unJust(w.wget()); |
rlm@8 | 105 endmethod |
rlm@8 | 106 endinterface |
rlm@8 | 107 ); |
rlm@8 | 108 endfunction |