gusucode.com > visionhdl工具箱matlab源码程序 > visionhdl/visionhdlutilities/@visionhdlsupport/@LineBuffer/cgireml/FIFOHandlerRowVector.m

    function [  InitializeFlag, ...
enableDataCacheOut,unloadhStartOut, unloadhEndOut, ...
unloadvEndOut, unloadValidOut, unloadingDelayedOut,  runOrUnload, validOut,delayedVStartOut,resetFIFO, loadingFlag,UnloadingOut, lineSpaceLoad, lineSpaceEn, loadCount]   = FIFOHandler(...
   hStartIn, vEndIn, validIn,  vEndFlag, vStartIn, hEndIn)
%#codegen


persistent LoadingPaddingRunCount;
persistent RunningPaddingRunCount;
persistent UnloadingPaddingRunCount;
persistent InitialCount;
persistent Loading;
persistent Unloading;
persistent Running;
persistent Initialize;
persistent InterFrameReset;
persistent DelayedVStart;
persistent InBetween;
persistent LineSpace;
% persistent LineMask;
persistent removeThis;
persistent loadCounter;
persistent upperHalfPopCount;
persistent upperPopREG;
% persistent FIFOPopREG;
persistent resetFIFOREG;
persistent unloadToggle;



if isempty(Loading)
LoadingPaddingRunCount =uint8(0);
RunningPaddingRunCount =fi(0,0,CEILHALFWIDTHHEIGHT,0,'OverflowAction','Saturate');
UnloadingPaddingRunCount = uint8(0);
InitialCount = uint8(0);
upperHalfPopCount =fi(0,0,COUNTERT,0);
% loadTo = uint8(0);
loadTo = uint16(0);
Loading = false;
Unloading = false;
Running = false;
Initialize = true;
InterFrameReset = false;
DelayedVStart = false;
InBetween = false;
LineSpace = fi(0,0,LINESPACET,0);
loadCounter =fi(0,0,COUNTERT,0);
% LineMask = fi(0,0,LOADTO,0);
 removeThis = false;
% localValid = false;
% runOrUnload = false;
lineMaskOut = fi(0,0,LOADTO,0);
% popFIFO = fi(0,0,LOADTO,0);
% pushFIFO = fi(0,0,LOADTO,0);
% upperPop = fi(0,0,HALFHEIGHT,0);
% upperPopREG = fi(0,0,HALFHEIGHT,0); 
% upperPopTemp = fi(0,0,HALFHEIGHT,0);
% FIFOPopREG = fi(0,0,HALFHEIGHT,0);
% popFIFO4REG = fi(0,0,HALFHEIGHT,0);
% pushFIFO4REG = fi(0,0,HALFHEIGHT,0);
% resetFIFOREG = false;
unloadToggle = (true(1,SLF));
end

%  
%  popFIFO(:) =  0;
%  pushFIFO(:) = 0;     
% upperPop(:) = 0;
popLast = false;
enableDataCacheOut = false;
unloadhStartOut = false;
unloadhEndOut = false;
unloadvEndOut = false;
unloadValidOut = false;
unloadingDelayedOut=false;
lineMaskOut(:) = 0;
validOut = false;
resetFIFO = false;





if vStartIn
Loading = true;
Initialize = false;
Unloading = false;
unloadToggle(:) = 0;
InterFrameReset = false;
removeThis =false; 
LoadingPaddingRunCount(:) = HALFHEIGHT;
end



if (validIn) && (Loading)
         DelayedVStart = false;
 
if hStartIn && (vStartIn==0)
LoadingPaddingRunCount(:) = LoadingPaddingRunCount -1;
end



%     if LoadingPaddingRunCount == HALFHEIGHT
%      pushFIFO = bitset(pushFIFO,HALFHEIGHT,1);
%     if ((bitget(halfLoaded,HALFHEIGHT)) == 0)
%     popFIFO = bitset(popFIFO, HALFHEIGHT,1);
%     pushFIFO = bitset(pushFIFO,HALFHEIGHT+1,1);
%     end
%     else
%      pushFIFO = bitset(pushFIFO,HALFHEIGHT,0);
%      popFIFO = bitset(popFIFO, HALFHEIGHT,0);
%      end 
% 
% for ii = 1:1:HALFHEIGHT-1
% 
%     if LoadingPaddingRunCount <= ii
%    if ((bitget(halfLoaded,ii)) == 0)
%     popFIFO = bitset(popFIFO,ii,1);
%     pushFIFO = bitset(pushFIFO,ii+1,1);
%    else
%     popFIFO = bitset(popFIFO,ii,0);
%     pushFIFO = bitset(pushFIFO,ii+1,0);
%    end
%    end
% %     if PaddingRunCount == 1
% %     if ((bitget(halfLoaded,1)) == 0)
% %     popFIFO = bitset(popFIFO,1,1);
% %     pushFIFO = bitset(pushFIFO,2,1);
% %     else
% %     popFIFO = bitset(popFIFO,1,0);
% %     pushFIFO = bitset(pushFIFO,2,0);
% %     end
% %     end
% 
% end
%     if allLineStart == 0 
%     pushFIFO = bitset(pushFIFO,HALFHEIGHT);
%     end

          if  Loading  && hStartIn && LoadingPaddingRunCount ==0
              Loading = false;
              Running = true;
              DelayedVStart = true; 
         else
        DelayedVStart = false;
          end


end


if Running 
      if removeThis
      DelayedVStart = false ; 
      end
    removeThis =true; 
      
%     upperPopTemp(:) = 0;

      if (hStartIn && DelayedVStart)
          RunningPaddingRunCount(:) = 1;
%           upperPopTemp = bitset(upperPop,RunningPaddingRunCount);
      elseif ((hStartIn && RunningPaddingRunCount ~= 0) && ((RunningPaddingRunCount< 253)))
         RunningPaddingRunCount(:) = RunningPaddingRunCount + 1;
%   upperPopTemp = bitset(upperPop,RunningPaddingRunCount);
      end

      enableDataCacheOut = true;
      
      if (RunningPaddingRunCount == HALFHEIGHT)
          loadTo(:) = 0;
      else
          loadTo(:) = HALFHEIGHT + RunningPaddingRunCount;

      end
%             for ii = 1:1:HALFHEIGHT
%                 if ii == (upperHalfPopCount)
%                 upperPopTemp = bitset(upperPop,ii);
%                 else
%                 upperPopTemp = bitset(upperPop,ii,0);
%                 end
%             end

 



else
% upperPopTemp(:) = 0;


end
      if validIn && vEndIn
          Loading = false;
          Running = false;
          Unloading = true;
          InterFrameReset = false;
          UnloadingDelayed = false;
      UnloadingPaddingRunCount(:) = PADRUN;
    
end




%% Unloading



runOrUnload = Running||Unloading;

if Unloading
 unloadhStartOut = false;
    
   unloadhEndOut   = true;
   
 
   unloadToggle(1) = true;
   
   
   
   if unloadToggle(end-ZGH)
   unloadvEndOut = true;    
   end
   
    if unloadToggle(end)
       Unloading = false;
       InterFrameReset = true;
    end
    


%         if InBetween
%             lineSpaceEn = true;
%         else
%             lineSpaceEn = false;
%         end

unloadToggle(2:end) = unloadToggle(1:end-1);

    if InBetween
    lineSpaceEn  =true;

    else
        lineSpaceEn = false;
        unloadingDelayedOut = false;
 
    end
% lineMaskOut = LineMask;

     enableDataCacheOut = true;

    
     loadTo(:) = 0;

     if ~InBetween
         

      
  end

    if unloadhEndOut &&~unloadhStartOut
    InBetween = true;
lineSpaceLoad = false;
% lineSpaceEn = true;
    elseif lineSpaceAverageIn == 2
     lineSpaceLoad = true; 
    else
       lineSpaceLoad = false; 
    
    end
  unloadValidOut = (~unloadToggle(end-ZGH));
%         validOut = ~InBetween;
else
    lineSpaceLoad = false;
    lineSpaceEn = false;

end




UnloadingOut = Unloading;




% if InterFrameReset && ~Initialize
% resetFIFOREG = true;
% else
% resetFIFOREG = false;
% end


if Initialize == true
if InitialCount<INITCOUNT
resetFIFOREG = false;

InitialCount(:) = InitialCount +1;
else
resetFIFOREG = true;

end
elseif  InterFrameReset
    if~unloadToggle(end)
resetFIFOREG = true;
    else
        resetFIFOREG = false;
    end
Unloading = false;
enableDataCacheOut = true;
unloadToggle(1) = false;
unloadToggle(2:end) = unloadToggle(1:end-1);
else
resetFIFOREG = false;
end

% if vEndFlag
% Initialize = true;
% Unloading = true;
% removeThis(:) = 0;
% end

% if Initialize
% popFIFO(:) = (2^(LOADTO)+1)-1;
% pushFIFO(:) = 0; 
% end








InitializeFlag = Initialize;
delayedVStartOut = DelayedVStart;
validOut = validIn;
loadingFlag = Loading;
resetFIFO = resetFIFOREG;
loadCount = LoadingPaddingRunCount;