OpenCores
URL https://opencores.org/ocsvn/bluespec_md6/bluespec_md6/trunk

Subversion Repositories bluespec_md6

[/] [bluespec_md6/] [trunk/] [lib/] [bsv/] [ClientServerUtils/] [ClientServerUtils.bsv] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 kfleming
import ClientServer::*;
2
import FIFO::*;
3
import GetPut::*;
4
import Vector::*;
5
import Debug::*;
6
 
7
Bool clientServerDebug = False;
8
 
9
module mkReplicatedServer#(Server#(req_t,resp_t) server,Integer reqDepth) (Vector#(num_servers,Server#(req_t,resp_t)));
10
  FIFO#(Bit#(TLog#(num_servers))) numFIFO <- mkSizedFIFO(reqDepth);
11
  Vector#(num_servers,Server#(req_t,resp_t)) interfaces = newVector();
12
  Reg#(Bit#(TAdd#(1,TLog#(num_servers)))) counter <- mkReg(0);
13
 
14
  rule roundRobin;
15
   if(counter + 1 == fromInteger(valueof(num_servers)))
16
     begin
17
       counter <= 0;
18
     end
19
   else
20
     begin
21
       counter <= counter + 1;
22
     end
23
  endrule
24
 
25
  for(Integer i = 0; i < valueof(num_servers); i=i+1)
26
    begin
27
      interfaces[i] = interface Server;
28
                        interface Put request;
29
                          method Action put(req_t req) if(counter == fromInteger(i));
30
                            debug(clientServerDebug,$display("Replicate Server %d Req", i));
31
                            numFIFO.enq(fromInteger(i));
32
                            server.request.put(req);
33
                          endmethod
34
                        endinterface
35
 
36
                        interface Get response;
37
                          method ActionValue#(resp_t) get() if(numFIFO.first == fromInteger(i));
38
                              begin
39
                                debug(clientServerDebug,$display("Replicate Server %d Resp",i));
40
                                numFIFO.deq;
41
                                let data <- server.response.get;
42
                                return data;
43
                              end
44
                          endmethod
45
                        endinterface
46
                      endinterface;
47
    end
48
 
49
 
50
  return interfaces;
51
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.