OpenCores
URL https://opencores.org/ocsvn/bluespec-h264/bluespec-h264/trunk

Subversion Repositories bluespec-h264

[/] [bluespec-h264/] [trunk/] [src/] [mkFrameBuffer.bsv] - Blame information for rev 13

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

Line No. Rev Author Line
1 2 jamey.hick
//**********************************************************************
2
// Frame Buffer
3
//----------------------------------------------------------------------
4
//
5
//
6
//
7
 
8
package mkFrameBuffer;
9
 
10
import H264Types::*;
11
import IFrameBuffer::*;
12
import RegFile::*;
13
import GetPut::*;
14
import ClientServer::*;
15
import FIFO::*;
16
 
17
 
18
//-----------------------------------------------------------
19
// Register file module
20
//-----------------------------------------------------------
21
 
22
interface FBRFile2;
23
   method Action store( Bit#(FrameBufferSz) addr, Bit#(32) data );
24
   method Bit#(32) load1( Bit#(FrameBufferSz) addr );
25
   method Bit#(32) load2( Bit#(FrameBufferSz) addr );
26
endinterface
27
 
28
module mkFBRFile2( FBRFile2 );
29
 
30
   RegFile#(Bit#(FrameBufferSz),Bit#(32)) rfile <- mkRegFile(0,frameBufferSize);
31
 
32
   method Action store( Bit#(FrameBufferSz) addr, Bit#(32) data );
33
      rfile.upd( addr, data );
34
   endmethod
35
 
36
   method Bit#(32) load1( Bit#(FrameBufferSz) addr );
37
      return rfile.sub(addr);
38
   endmethod
39
 
40
   method Bit#(32) load2( Bit#(FrameBufferSz) addr );
41
      return rfile.sub(addr);
42
   endmethod
43
 
44
endmodule
45
 
46
 
47
//----------------------------------------------------------------------
48
// Main module
49
//----------------------------------------------------------------------
50
 
51
module mkFrameBuffer( IFrameBuffer );
52
 
53
  //-----------------------------------------------------------
54
  // State
55
 
56
   FBRFile2 rfile2 <- mkFBRFile2;
57
 
58
   FIFO#(FrameBufferLoadReq)  loadReqQ1  <- mkFIFO();
59
   FIFO#(FrameBufferLoadResp) loadRespQ1 <- mkFIFO();
60
   FIFO#(FrameBufferLoadReq)  loadReqQ2  <- mkFIFO();
61
   FIFO#(FrameBufferLoadResp) loadRespQ2 <- mkFIFO();
62
   FIFO#(FrameBufferStoreReq) storeReqQ  <- mkFIFO();
63
 
64
   rule loading1 ( loadReqQ1.first() matches tagged FBLoadReq .addrt );
65
      if(addrt
66
         begin
67 13 jamey.hick
            loadRespQ1.enq( FBLoadResp (rfile2.load1(addrt)) );
68 2 jamey.hick
            loadReqQ1.deq();
69
         end
70
      else
71
         $display( "ERROR FrameBuffer: loading1 outside range" );
72
   endrule
73
 
74
   rule loading2 ( loadReqQ2.first() matches tagged FBLoadReq .addrt );
75
      if(addrt
76
         begin
77 13 jamey.hick
            loadRespQ2.enq( FBLoadResp (rfile2.load2(addrt)) );
78 2 jamey.hick
            loadReqQ2.deq();
79
         end
80
      else
81
         $display( "ERROR FrameBuffer: loading2 outside range" );
82
   endrule
83
 
84
   rule storing ( storeReqQ.first() matches tagged FBStoreReq { addr:.addrt,data:.datat} );
85
      if(addrt
86
         begin
87
            rfile2.store(addrt,datat);
88
            storeReqQ.deq();
89
         end
90
      else
91
         $display( "ERROR FrameBuffer: storing outside range" );
92
   endrule
93
 
94
   rule syncing ( loadReqQ1.first() matches tagged FBEndFrameSync &&& loadReqQ2.first() matches tagged FBEndFrameSync &&& storeReqQ.first() matches tagged FBEndFrameSync);
95
      loadReqQ1.deq();
96
      loadReqQ2.deq();
97
      storeReqQ.deq();
98
   endrule
99
 
100
 
101
   interface Server server_load1;
102
      interface Put request   = fifoToPut(loadReqQ1);
103
      interface Get response  = fifoToGet(loadRespQ1);
104
   endinterface
105
   interface Server server_load2;
106
      interface Put request   = fifoToPut(loadReqQ2);
107
      interface Get response  = fifoToGet(loadRespQ2);
108
   endinterface
109
   interface Put server_store = fifoToPut(storeReqQ);
110
 
111
endmodule
112
 
113
endpackage

powered by: WebSVN 2.1.0

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