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

Subversion Repositories bluespec-h264

[/] [bluespec-h264/] [trunk/] [src/] [DeblockTee.bsv] - Diff between revs 38 and 83

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 38 Rev 83
 
 
 
// The MIT License
 
 
 
// Copyright (c) 2006-2007 Massachusetts Institute of Technology
 
 
 
// Permission is hereby granted, free of charge, to any person obtaining a copy
 
// of this software and associated documentation files (the "Software"), to deal
 
// in the Software without restriction, including without limitation the rights
 
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
// copies of the Software, and to permit persons to whom the Software is
 
// furnished to do so, subject to the following conditions:
 
 
 
// The above copyright notice and this permission notice shall be included in
 
// all copies or substantial portions of the Software.
 
 
 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
// THE SOFTWARE.
 
 
import GetPut::*;
import GetPut::*;
import H264Types::*;
import H264Types::*;
import RegFile::*;
import RegFile::*;
typedef enum
typedef enum
{
{
  Forwarding,
  Forwarding,
  DumpingY,
  DumpingY,
  DumpingU,
  DumpingU,
  DumpingV
  DumpingV
}
}
  State deriving (Bits, Eq);
  State deriving (Bits, Eq);
module mkDeblockTee#(Get#(DeblockFilterOT) inputData, Put#(DeblockFilterOT) outputData, String prefix, Bool recordFrames) ();
module mkDeblockTee#(Get#(DeblockFilterOT) inputData, Put#(DeblockFilterOT) outputData, String prefix, Bool recordFrames) ();
 Reg#(Bit#(32)) cycles <- mkReg(0);
 Reg#(Bit#(32)) cycles <- mkReg(0);
 Reg#(State) state <- mkReg(Forwarding);
 Reg#(State) state <- mkReg(Forwarding);
 Reg#(Bit#(32)) horCounter;
 Reg#(Bit#(32)) horCounter;
 Reg#(Bit#(32)) verCounter;
 Reg#(Bit#(32)) verCounter;
 Reg#(Bit#(32)) counter;
 Reg#(Bit#(32)) counter;
 Reg#(Bit#(PicWidthSz))  picWidth;
 Reg#(Bit#(PicWidthSz))  picWidth;
 Reg#(Bit#(PicHeightSz)) picHeight;
 Reg#(Bit#(PicHeightSz)) picHeight;
 Reg#(Bit#(PicAreaSz))   frameinmb;
 Reg#(Bit#(PicAreaSz))   frameinmb;
 RegFile#(Bit#(TAdd#(PicAreaSz,6)), Bit#(32)) yValues;
 RegFile#(Bit#(TAdd#(PicAreaSz,6)), Bit#(32)) yValues;
 RegFile#(Bit#(TAdd#(PicAreaSz,4)), Bit#(32)) uValues;
 RegFile#(Bit#(TAdd#(PicAreaSz,4)), Bit#(32)) uValues;
 RegFile#(Bit#(TAdd#(PicAreaSz,4)), Bit#(32)) vValues;
 RegFile#(Bit#(TAdd#(PicAreaSz,4)), Bit#(32)) vValues;
 if(recordFrames)
 if(recordFrames)
   begin
   begin
     counter <- mkReg(0);
     counter <- mkReg(0);
     horCounter <- mkReg(0);
     horCounter <- mkReg(0);
     verCounter <- mkReg(0);
     verCounter <- mkReg(0);
     picWidth  <- mkReg(maxPicWidthInMB);
     picWidth  <- mkReg(maxPicWidthInMB);
     picHeight <- mkReg(0);
     picHeight <- mkReg(0);
     frameinmb <- mkReg(0);
     frameinmb <- mkReg(0);
     yValues <- mkRegFileFull();
     yValues <- mkRegFileFull();
     uValues <- mkRegFileFull();
     uValues <- mkRegFileFull();
     vValues <- mkRegFileFull();
     vValues <- mkRegFileFull();
   end
   end
 rule cycleup;
 rule cycleup;
   cycles <= cycles + 1;
   cycles <= cycles + 1;
 endrule
 endrule
 rule processData(state == Forwarding);
 rule processData(state == Forwarding);
   let dataIn <- inputData.get();
   let dataIn <- inputData.get();
   outputData.put(dataIn);
   outputData.put(dataIn);
   $write(prefix);
   $write(prefix);
   case (dataIn) matches
   case (dataIn) matches
     tagged DFBLuma .data:
     tagged DFBLuma .data:
       begin
       begin
         $display("DFBLuma(%d): hor: %d ver:%d data:%h\n", cycles,data.hor, data.ver, data.data);
         $display("DFBLuma(%d): hor: %d ver:%d data:%h\n", cycles,data.hor, data.ver, data.data);
         if(recordFrames)
         if(recordFrames)
           begin
           begin
             Bit#(TAdd#(PicAreaSz,6)) addr = {(zeroExtend(data.ver)*zeroExtend(picWidth)),2'b00}+zeroExtend(data.hor);
             Bit#(TAdd#(PicAreaSz,6)) addr = {(zeroExtend(data.ver)*zeroExtend(picWidth)),2'b00}+zeroExtend(data.hor);
             $write(prefix);
             $write(prefix);
             $display("Writing to %d, %h", addr, data);
             $display("Writing to %d, %h", addr, data);
             yValues.upd(addr,{data.data[7:0],data.data[15:8],data.data[23:16],data.data[31:24]});
             yValues.upd(addr,{data.data[7:0],data.data[15:8],data.data[23:16],data.data[31:24]});
           end
           end
       end
       end
     tagged DFBChroma .data:
     tagged DFBChroma .data:
       begin
       begin
         $display("DFBChroma(%d): flag: %d hor: %d ver:%d data:%h\n", cycles, data.uv, data.hor, data.ver, data.data);
         $display("DFBChroma(%d): flag: %d hor: %d ver:%d data:%h\n", cycles, data.uv, data.hor, data.ver, data.data);
         if(recordFrames)
         if(recordFrames)
           begin
           begin
             Bit#(TAdd#(PicAreaSz,4)) addr = {(zeroExtend(data.ver)*zeroExtend(picWidth)),1'b0}+zeroExtend(data.hor);
             Bit#(TAdd#(PicAreaSz,4)) addr = {(zeroExtend(data.ver)*zeroExtend(picWidth)),1'b0}+zeroExtend(data.hor);
             if(data.uv == 1)
             if(data.uv == 1)
               begin
               begin
                 $write(prefix);
                 $write(prefix);
                 $display("Writing to %d, %h", addr, data);
                 $display("Writing to %d, %h", addr, data);
                 vValues.upd(addr, {data.data[7:0],data.data[15:8],data.data[23:16],data.data[31:24]});
                 vValues.upd(addr, {data.data[7:0],data.data[15:8],data.data[23:16],data.data[31:24]});
               end
               end
             else
             else
               begin
               begin
                 $write(prefix);
                 $write(prefix);
                 $display("Writing to %d, %h", addr, data);
                 $display("Writing to %d, %h", addr, data);
                 uValues.upd(addr, {data.data[7:0],data.data[15:8],data.data[23:16],data.data[31:24]});
                 uValues.upd(addr, {data.data[7:0],data.data[15:8],data.data[23:16],data.data[31:24]});
               end
               end
           end
           end
       end
       end
     tagged EndOfFrame:
     tagged EndOfFrame:
       begin
       begin
         if(recordFrames)
         if(recordFrames)
           begin
           begin
             state <= DumpingY;
             state <= DumpingY;
             counter <= 0;
             counter <= 0;
           end
           end
           $display("EndOfFrame(%d)", cycles);
           $display("EndOfFrame(%d)", cycles);
       end
       end
     tagged EDOT .data:
     tagged EDOT .data:
       case (data) matches
       case (data) matches
         tagged SPSpic_width_in_mbs .xdata :
         tagged SPSpic_width_in_mbs .xdata :
           begin
           begin
             if(recordFrames)
             if(recordFrames)
               begin
               begin
                 picWidth <= xdata;
                 picWidth <= xdata;
               end
               end
           end
           end
         tagged SPSpic_height_in_map_units .xdata :
         tagged SPSpic_height_in_map_units .xdata :
           begin
           begin
             if(recordFrames)
             if(recordFrames)
               begin
               begin
                 picHeight <= xdata;
                 picHeight <= xdata;
                 frameinmb <= zeroExtend(picWidth)*zeroExtend(xdata);
                 frameinmb <= zeroExtend(picWidth)*zeroExtend(xdata);
               end
               end
           end
           end
       endcase
       endcase
   endcase
   endcase
 endrule
 endrule
if(recordFrames)
if(recordFrames)
 begin
 begin
   rule dumpY(state == DumpingY);
   rule dumpY(state == DumpingY);
     Bit#(TAdd#(PicAreaSz,6)) addr = truncate({(verCounter*zeroExtend(picWidth)),2'b00}+zeroExtend(horCounter));
     Bit#(TAdd#(PicAreaSz,6)) addr = truncate({(verCounter*zeroExtend(picWidth)),2'b00}+zeroExtend(horCounter));
     $write(prefix);
     $write(prefix);
     //$write("(%d,%d,%d,%d,%d,%d)", counter, addr, horCounter, verCounter, picWidth, picHeight);
     //$write("(%d,%d,%d,%d,%d,%d)", counter, addr, horCounter, verCounter, picWidth, picHeight);
     $write("DUMP ");
     $write("DUMP ");
     $display("%h", yValues.sub(addr));
     $display("%h", yValues.sub(addr));
     yValues.upd(addr,0);
     yValues.upd(addr,0);
     if(horCounter + 1 == zeroExtend(picWidth)*4) // 4 values per Mb
     if(horCounter + 1 == zeroExtend(picWidth)*4) // 4 values per Mb
       begin
       begin
         horCounter <= 0;
         horCounter <= 0;
         if(verCounter + 1 == zeroExtend(picHeight)*16)
         if(verCounter + 1 == zeroExtend(picHeight)*16)
           begin
           begin
             state <= DumpingU;
             state <= DumpingU;
             verCounter <= 0;
             verCounter <= 0;
             counter <= 0;
             counter <= 0;
           end
           end
         else
         else
           begin
           begin
             verCounter <= verCounter + 1;
             verCounter <= verCounter + 1;
             counter <= counter + 1;
             counter <= counter + 1;
           end
           end
       end
       end
     else
     else
       begin
       begin
         horCounter <= horCounter + 1;
         horCounter <= horCounter + 1;
         counter <= counter + 1;
         counter <= counter + 1;
       end
       end
   endrule
   endrule
   rule dumpU(state == DumpingU);
   rule dumpU(state == DumpingU);
     Bit#(TAdd#(PicAreaSz,4)) addr = truncate({(verCounter*zeroExtend(picWidth)),1'b0}+zeroExtend(horCounter));
     Bit#(TAdd#(PicAreaSz,4)) addr = truncate({(verCounter*zeroExtend(picWidth)),1'b0}+zeroExtend(horCounter));
     $write(prefix);
     $write(prefix);
     //$write("(%d,%d,%d,%d)", counter, addr, horCounter, verCounter);
     //$write("(%d,%d,%d,%d)", counter, addr, horCounter, verCounter);
     $write("DUMP ");
     $write("DUMP ");
     $display("%h", uValues.sub(addr));
     $display("%h", uValues.sub(addr));
     uValues.upd(addr, 0);
     uValues.upd(addr, 0);
     if(horCounter + 1 == zeroExtend(picWidth)*2) // 2 values per Mb
     if(horCounter + 1 == zeroExtend(picWidth)*2) // 2 values per Mb
       begin
       begin
         horCounter <= 0;
         horCounter <= 0;
         if(verCounter + 1 == zeroExtend(picHeight)*8) // Chroma have half as much data
         if(verCounter + 1 == zeroExtend(picHeight)*8) // Chroma have half as much data
           begin
           begin
             state <= DumpingV;
             state <= DumpingV;
             verCounter <= 0;
             verCounter <= 0;
             counter <= 0;
             counter <= 0;
           end
           end
         else
         else
           begin
           begin
             verCounter <= verCounter + 1;
             verCounter <= verCounter + 1;
             counter <= counter + 1;
             counter <= counter + 1;
           end
           end
       end
       end
     else
     else
       begin
       begin
         horCounter <= horCounter + 1;
         horCounter <= horCounter + 1;
         counter <= counter + 1;
         counter <= counter + 1;
       end
       end
   endrule
   endrule
   rule dumpV(state == DumpingV);
   rule dumpV(state == DumpingV);
     Bit#(TAdd#(PicAreaSz,4)) addr = truncate({(verCounter*zeroExtend(picWidth)),1'b0}+zeroExtend(horCounter));
     Bit#(TAdd#(PicAreaSz,4)) addr = truncate({(verCounter*zeroExtend(picWidth)),1'b0}+zeroExtend(horCounter));
     $write(prefix);
     $write(prefix);
     //$write("(%d,%d,%d,%d)", counter, addr, horCounter, verCounter);
     //$write("(%d,%d,%d,%d)", counter, addr, horCounter, verCounter);
     $write("DUMP ");
     $write("DUMP ");
     $display("%h", vValues.sub(addr));
     $display("%h", vValues.sub(addr));
     vValues.upd(addr, 0);
     vValues.upd(addr, 0);
     if(horCounter + 1 == zeroExtend(picWidth)*2) // 2 values per Mb
     if(horCounter + 1 == zeroExtend(picWidth)*2) // 2 values per Mb
       begin
       begin
         horCounter <= 0;
         horCounter <= 0;
         if(verCounter + 1 == zeroExtend(picHeight)*8) // Chroma have half as much data
         if(verCounter + 1 == zeroExtend(picHeight)*8) // Chroma have half as much data
           begin
           begin
             state <= Forwarding;
             state <= Forwarding;
             verCounter <= 0;
             verCounter <= 0;
           end
           end
         else
         else
           begin
           begin
             verCounter <= verCounter + 1;
             verCounter <= verCounter + 1;
             counter <= counter + 1;
             counter <= counter + 1;
           end
           end
       end
       end
     else
     else
       begin
       begin
         horCounter <= horCounter + 1;
         horCounter <= horCounter + 1;
         counter <= counter + 1;
         counter <= counter + 1;
       end
       end
   endrule
   endrule
 end
 end
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

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