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

Subversion Repositories bluespec-h264

[/] [bluespec-h264/] [trunk/] [src/] [mkPrediction.bsv] - Diff between revs 19 and 33

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 19 Rev 33
Line 179... Line 179...
   Reg#(MemReq#(TAdd#(PicWidthSz,2),32)) interMemReqQdelay <- mkRegU();
   Reg#(MemReq#(TAdd#(PicWidthSz,2),32)) interMemReqQdelay <- mkRegU();
   FIFO#(MemResp#(32))  interMemRespQ <- mkFIFO;
   FIFO#(MemResp#(32))  interMemRespQ <- mkFIFO;
   Reg#(Bit#(3)) interReqCount <- mkReg(0);
   Reg#(Bit#(3)) interReqCount <- mkReg(0);
   Reg#(Bit#(3)) interRespCount <- mkReg(0);
   Reg#(Bit#(3)) interRespCount <- mkReg(0);
 
 
   Reg#(Bit#(1)) interStepCount <- mkReg(0);
   Reg#(Bit#(2)) interStepCount <- mkReg(0);
   Reg#(Bit#(2)) interMbPartNum <- mkReg(0);
   Reg#(Bit#(2)) interMbPartNum <- mkReg(0);
   Reg#(Bit#(2)) interSubMbPartNum <- mkReg(0);
   Reg#(Bit#(2)) interSubMbPartNum <- mkReg(0);
   Reg#(Bit#(2)) interPassingCount <- mkReg(0);
   Reg#(Bit#(2)) interPassingCount <- mkReg(0);
   Reg#(Vector#(4,Bit#(4))) interRefIdxVector <- mkRegU();
   Reg#(Vector#(4,Bit#(4))) interRefIdxVector <- mkRegU();
   Reg#(Vector#(4,Bit#(2))) interSubMbTypeVector <- mkRegU();
   Reg#(Vector#(4,Bit#(2))) interSubMbTypeVector <- mkRegU();
   RFile1#(Bit#(4),Tuple2#(Bit#(14),Bit#(12))) interMvFile <- mkRFile1Full();
   RFile1#(Bit#(4),Tuple2#(Bit#(14),Bit#(12))) interMvFile <- mkRFile1Full();
   Reg#(Bit#(15)) interMvDiffTemp <- mkReg(0);
   Reg#(Bit#(15)) interMvDiffTemp <- mkReg(0);
   FIFO#(Tuple2#(Bit#(15),Bit#(13))) interMvDiff <- mkFIFO;
   FIFO#(Tuple2#(Bit#(15),Bit#(13))) interMvDiff <- mkFIFO;
   Reg#(Bit#(5)) interNewestMv <- mkReg(0);
   Reg#(Bit#(5)) interNewestMv <- mkReg(0);
 
 
 
   // Registers for pipelining the interStage rule
 
 
 
   Reg#(Bit#(3)) partWidthR <- mkRegU();
 
   Reg#(Bit#(3)) partHeightR <- mkRegU();
 
   Reg#(Bit#(3)) numPartR <- mkRegU();
 
   Reg#(Bit#(3)) numSubPartR <- mkRegU();
 
   Reg#(Bit#(2)) subMbTypeR <- mkRegU();
 
   Reg#(Bool) calcmvR <- mkRegU();
 
   Reg#(Bool) leftmvR <- mkRegU();
 
   Reg#(Bit#(4)) refIndexR <- mkRegU();
 
   Reg#(Vector#(3,InterBlockMv)) blockABCR <- mkRegU();
 
   Reg#(Bit#(14)) mvhorfinalR <- mkRegU();
 
   Reg#(Bit#(12)) mvverfinalR <- mkRegU();
 
   Reg#(Bit#(5)) interNewestMvNextR <- mkRegU();
 
 
 
 
   Reg#(Bit#(2)) interIPStepCount <- mkReg(0);
   Reg#(Bit#(2)) interIPStepCount <- mkReg(0);
   Reg#(Bit#(2)) interIPMbPartNum <- mkReg(0);
   Reg#(Bit#(2)) interIPMbPartNum <- mkReg(0);
   Reg#(Bit#(2)) interIPSubMbPartNum <- mkReg(0);
   Reg#(Bit#(2)) interIPSubMbPartNum <- mkReg(0);
 
 
   Reg#(Bit#(PicWidthSz)) interCurrMbDiff <- mkReg(0);
   Reg#(Bit#(PicWidthSz)) interCurrMbDiff <- mkReg(0);
Line 233... Line 249...
   Reg#(Bit#(4)) intraStepCount <- mkReg(0);
   Reg#(Bit#(4)) intraStepCount <- mkReg(0);
   Reg#(Bit#(13)) intraSumA <-  mkReg(0);
   Reg#(Bit#(13)) intraSumA <-  mkReg(0);
   Reg#(Bit#(15)) intraSumB <-  mkReg(0);
   Reg#(Bit#(15)) intraSumB <-  mkReg(0);
   Reg#(Bit#(15)) intraSumC <-  mkReg(0);
   Reg#(Bit#(15)) intraSumC <-  mkReg(0);
 
 
 
   Reg#(Vector#(4,Bit#(8))) intraPredVector <- mkRegU();
 
 
   //-----------------------------------------------------------
   //-----------------------------------------------------------
   // Rules
   // Rules
 
 
   //////////////////////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////////
Line 249... Line 265...
//      if(infifo.first() matches tagged ITBresidual .xdata)
//      if(infifo.first() matches tagged ITBresidual .xdata)
//       $display( "TRACE Prediction: stateMonitor outBlockNum outPixelNum outChromaFlag %0d %0d", outBlockNum, outPixelNum, outChromaFlag);////////////////////
//       $display( "TRACE Prediction: stateMonitor outBlockNum outPixelNum outChromaFlag %0d %0d", outBlockNum, outPixelNum, outChromaFlag);////////////////////
//   endrule
//   endrule
   //////////////////////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////////
 
 
 
 
   rule checkFIFO ( True );
   rule checkFIFO ( True );
      $display( "Trace Prediction: checkFIFO %h", infifo_ITB.first() );
      $display( "Trace Prediction: checkFIFO %h", infifo.first() );
 
   endrule
 
   rule checkFIFO_ITB ( True );
 
      $display( "Trace Prediction: checkFIFO_ITB %h", infifo_ITB.first() );
 
   endrule
 
   rule checkFIFO_predicted ( True );
 
      $display( "Trace Prediction: checkFIFO_predicted %h", predictedfifo.first() );
   endrule
   endrule
 
 
 
 
   rule passing ( passFlag && !outstatefifo.notEmpty() && currMbHor
   rule passing ( passFlag && !outstatefifo.notEmpty() && currMbHor
      $display( "Trace Prediction: passing infifo packed %h", pack(infifo.first()));
      $display( "Trace Prediction: passing infifo packed %h", pack(infifo.first()));
      case (infifo.first()) matches
      case (infifo.first()) matches
         tagged NewUnit . xdata :
         tagged NewUnit . xdata :
            begin
            begin
Line 934... Line 956...
 
 
   rule interProcessStep ( interStepCount>0 && currMbHor
   rule interProcessStep ( interStepCount>0 && currMbHor
      Bit#(PicAreaSz) currMbTemp = currMb+zeroExtend(interCurrMbDiff)-1;
      Bit#(PicAreaSz) currMbTemp = currMb+zeroExtend(interCurrMbDiff)-1;
      Bit#(2) blockHor = {interMbPartNum[0],interSubMbPartNum[0]};
      Bit#(2) blockHor = {interMbPartNum[0],interSubMbPartNum[0]};
      Bit#(2) blockVer = {interMbPartNum[1],interSubMbPartNum[1]};
      Bit#(2) blockVer = {interMbPartNum[1],interSubMbPartNum[1]};
 
 
 
      if(interStepCount == 1)
 
         begin
      Bit#(3) partWidth = 0;
      Bit#(3) partWidth = 0;
      Bit#(3) partHeight = 0;
      Bit#(3) partHeight = 0;
      Bit#(3) numPart = 1;
      Bit#(3) numPart = 1;
      Bit#(3) numSubPart = 1;
      Bit#(3) numSubPart = 1;
      Bit#(2) subMbType = 0;
      Bit#(2) subMbType = 0;
Line 1011... Line 1036...
               end
               end
            endcase
            endcase
         end
         end
      else
      else
         $display( "ERROR Prediction: interProcessStep unexpected interstate");
         $display( "ERROR Prediction: interProcessStep unexpected interstate");
 
 
      Bit#(4) refIndex = ((interstate==InterPskip||interstate==InterP8x8ref0) ? 0 : interRefIdxVector[interMbPartNum]);
      Bit#(4) refIndex = ((interstate==InterPskip||interstate==InterP8x8ref0) ? 0 : interRefIdxVector[interMbPartNum]);
      Vector#(3,InterBlockMv) blockABC = replicate(NotInter 0);
      Vector#(3,InterBlockMv) blockABC = replicate(NotInter 0);
      if( currMbTemp-firstMb==0 && blockHor==0 )
      if( currMbTemp-firstMb==0 && blockHor==0 )
         blockABC[0] = (NotInter 0);
         blockABC[0] = (NotInter 0);
      else
      else
Line 1024... Line 1050...
      else
      else
         blockABC[1] = interTopVal[blockHor];
         blockABC[1] = interTopVal[blockHor];
      blockABC[2] = interTopVal[{1'b0,blockHor}+partWidth];
      blockABC[2] = interTopVal[{1'b0,blockHor}+partWidth];
      if(noBlockC || blockABC[2]==(NotInter 0))
      if(noBlockC || blockABC[2]==(NotInter 0))
         blockABC[2] = interTopLeftVal[blockVer];
         blockABC[2] = interTopLeftVal[blockVer];
 
          partWidthR <= partWidth;
 
          partHeightR <= partHeight;
 
          numPartR <= numPart;
 
          numSubPartR <= numSubPart;
 
          subMbTypeR <= subMbType;
 
          calcmvR <= calcmv;
 
          leftmvR <= leftmv;
 
          refIndexR <= refIndex;
 
          blockABCR <= blockABC;
 
          interStepCount <= 2;
 
      end
 
   else if(interStepCount==2)
 
      begin
 
         Bit#(3) partWidth = partWidthR;
 
         Bit#(3) partHeight = partHeightR;
 
         Bit#(3) numPart = numPartR;
 
         Bit#(3) numSubPart = numSubPartR;
 
         Bit#(2) subMbType = subMbTypeR;
 
         Bool calcmv = calcmvR;
 
         Bool leftmv = leftmvR;
 
         Bit#(4) refIndex = refIndexR;
 
         Vector#(3,InterBlockMv) blockABC = blockABCR;
      Bit#(14) mvhorfinal = 0;
      Bit#(14) mvhorfinal = 0;
      Bit#(12) mvverfinal = 0;
      Bit#(12) mvverfinal = 0;
      Bit#(5) interNewestMvNext = 0;
      Bit#(5) interNewestMvNext = 0;
      if(calcmv)//motion vector caculation
      if(calcmv)//motion vector caculation
         begin
         begin
Line 1145... Line 1193...
                     end
                     end
                  else
                  else
                     $display( "ERROR Prediction: interProcessStep unexpected blockABC[1]");
                     $display( "ERROR Prediction: interProcessStep unexpected blockABC[1]");
               end
               end
         end
         end
 
 
 
            mvhorfinalR <= mvhorfinal;
 
            mvverfinalR <= mvverfinal;
 
            interNewestMvNextR <= interNewestMvNext;
 
            interStepCount <= 3;
 
 
 
         end
 
      else // stepCount == 3
 
         begin
      Bit#(2) tempBShor = 0;//bS calculation
      Bit#(2) tempBShor = 0;//bS calculation
      Bit#(2) tempBSver = 0;
      Bit#(2) tempBSver = 0;
 
            Bool allDone = False;
 
            Bit#(4) refIndex = refIndexR;
 
            Bit#(14) mvhorfinal = mvhorfinalR;
 
            Bit#(12) mvverfinal = mvverfinalR;
 
            Bit#(5) interNewestMvNext = interNewestMvNextR;
 
 
      if(interLeftVal[blockVer] matches tagged BlockMv .xdata)
      if(interLeftVal[blockVer] matches tagged BlockMv .xdata)
         begin
         begin
            if(xdata.nonZeroTransCoeff == 1)
            if(xdata.nonZeroTransCoeff == 1)
               tempBShor = 2;
               tempBShor = 2;
            else
            else
Line 1193... Line 1256...
         begin
         begin
            interSubMbPartNum <= 0;
            interSubMbPartNum <= 0;
            if(interMbPartNum == 3)
            if(interMbPartNum == 3)
               begin
               begin
                  interMbPartNum <= 0;
                  interMbPartNum <= 0;
                  interStepCount <= 0;
                        allDone = True;
                  interNewestMvNext = 16;
                  interNewestMvNext = 16;
               end
               end
            else
            else
               interMbPartNum <= interMbPartNum+1;
               interMbPartNum <= interMbPartNum+1;
         end
         end
      else
      else
         interSubMbPartNum <= interSubMbPartNum+1;
         interSubMbPartNum <= interSubMbPartNum+1;
      if(interNewestMvNext > 0)
      if(interNewestMvNext > 0)
         interNewestMv <= interNewestMvNext;
         interNewestMv <= interNewestMvNext;
 
 
 
            // Check to see if we are done.
 
 
 
            if(allDone)
 
               interStepCount <= 0;
 
            else
 
               interStepCount <= 1;
 
 
 
            $display( "Trace Prediction: interProcessStep final %h %h %h %h %h %h %h",interstate,interStepCount,interMbPartNum,interSubMbPartNum,mvhorfinal,mvverfinal,interNewestMvNext);
 
 
 
       end
   endrule
   endrule
 
 
 
 
   rule interIPProcessStep ( interIPStepCount>0 && currMbHorzeroExtend({interIPMbPartNum,interIPSubMbPartNum}) );
   rule interIPProcessStep ( interIPStepCount>0 && currMbHorzeroExtend({interIPMbPartNum,interIPSubMbPartNum}) );
      Bit#(PicAreaSz) currMbHorTemp = currMbHor+zeroExtend(interCurrMbDiff)-1;
      Bit#(PicAreaSz) currMbHorTemp = currMbHor+zeroExtend(interCurrMbDiff)-1;

powered by: WebSVN 2.1.0

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