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

Subversion Repositories bluespec_md6

[/] [bluespec_md6/] [trunk/] [lib/] [bsv/] [ClientServerUtils/] [ClientServerUtils.bsv] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

import ClientServer::*;
import FIFO::*;
import GetPut::*;
import Vector::*;
import Debug::*;

Bool clientServerDebug = False;

module mkReplicatedServer#(Server#(req_t,resp_t) server,Integer reqDepth) (Vector#(num_servers,Server#(req_t,resp_t)));
  FIFO#(Bit#(TLog#(num_servers))) numFIFO <- mkSizedFIFO(reqDepth);
  Vector#(num_servers,Server#(req_t,resp_t)) interfaces = newVector();     
  Reg#(Bit#(TAdd#(1,TLog#(num_servers)))) counter <- mkReg(0);

  rule roundRobin;
   if(counter + 1 == fromInteger(valueof(num_servers)))
     begin
       counter <= 0;
     end
   else
     begin
       counter <= counter + 1; 
     end
  endrule

  for(Integer i = 0; i < valueof(num_servers); i=i+1)
    begin
      interfaces[i] = interface Server;
                        interface Put request;
                          method Action put(req_t req) if(counter == fromInteger(i));
                            debug(clientServerDebug,$display("Replicate Server %d Req", i));
                            numFIFO.enq(fromInteger(i));
                            server.request.put(req);
                          endmethod
                        endinterface

                        interface Get response;
                          method ActionValue#(resp_t) get() if(numFIFO.first == fromInteger(i));
                              begin
                                debug(clientServerDebug,$display("Replicate Server %d Resp",i));
                                numFIFO.deq;
                                let data <- server.response.get;
                                return data;
                              end 
                          endmethod
                        endinterface
                      endinterface;
    end


  return interfaces;
endmodule

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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