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

    function [horMUX, hStartOut,...
    hEndOut, vStartOut, vEndOut, validOut, processDataOut] = dataWriteFSM(...
    hStartIn, hEndIn, vStartIn, vEndIn, validTempIn, preProcessFlag, postProcessFlag, hStartFlag,   ...
    vStartFlag, hEndFlag, unloadingD, runOrUnload,resetFIFO)
%#codegen

persistent PaddingCount;
persistent PaddingLine;
persistent validREG;
persistent horizontalMUXSEL;
% persistent verticalMUXSEL;
persistent Unloading;

if isempty(PaddingCount)
    PaddingCount = uint8(0);
    PaddingLine = uint8(0);
horizontalMUXSEL = fi(0,0,HSELW,0);
validREG = false;
Unloading = false;
Dumping = false;
processDataOut = false;
    hStartOut = false;
    hEndOut = false;
    vStartOut = false;
    vEndOut = false;
    validOut  = false;
preProcessData = false;
postProcessData = false;
runOrUnloadS = false;
end
runOrUnloadS = logical(runOrUnload);
%verticalMUXSEL = fi(0,0,3,0);



if unloadingD && PaddingLine == 0
    PaddingLine(:) = VERPADNUM;
end

if validTempIn 
    PaddingCount = uint8(0); % no more padding for now
    horizontalMUXSEL(:) = PASSTHRU;
    if hStartIn
        validREG = true;
    end
    hStartOut(:) = hStartIn;
    hEndOut(:)   = hEndIn;
    vStartOut(:) = vStartIn;
    vEndOut(:)   = vEndIn;
    validOut(:) = validREG;
    processDataOut(:) = true;        % always advance during data phase
    if hEndIn
        validREG(:) = false;
    end
    postProcessData(:) = false; %#ok<NASGU>
else
    preProcessData(:)  = preProcessFlag && runOrUnloadS;
    postProcessData(:) = postProcessFlag && runOrUnloadS;
    
    if preProcessData        
    if PaddingCount == 0
    horizontalMUXSEL(:) = 0;
    PaddingCount(:) = 1;
    else
    horizontalMUXSEL(:) = plus(horizontalMUXSEL,1);
    end
    elseif postProcessData
    horizontalMUXSEL(:) = plus(horizontalMUXSEL,1); 
    else
        horizontalMUXSEL(:) = 0;    
        PaddingCount = uint8(0);
    end
    hStartOut(:) = false;
    hEndOut(:) = false;
    vStartOut(:) = false;
    vEndOut(:) = false;
    validOut(:)  = false;
    if Unloading
    processDataOut(:) = (preProcessData || postProcessData)&& (horizontalMUXSEL<MAXPASS);
    else
    processDataOut(:) = (preProcessData || postProcessData);
    end    
    %%% Vertical data multiplexing
    end
    if PaddingLine ~= 0        

        if hStartFlag
%     verticalMUXSEL(:) = verticalMUXSEL + 1;
    PaddingLine(:) = PaddingLine -1;
        
        end

    elseif ~Unloading
        %%% Do not reorder
%          verticalMUXSEL(:) = VERPADNUM;
    end

    if vStartFlag
        PaddingLine(:) = VERPADNUM;
%         verticalMUXSEL(:) =0;
        Unloading = false;
    else
        if PaddingLine == -1
            PaddingLine(:) = 0;
        end
    end

    if resetFIFO
%     verticalMUXSEL(:) = 0;
    PaddingLine(:) = VERPADNUM;
    PaddingCount(:) = 0;
    validREG(:) =0;
    horizontalMUXSEL(:) = 0;
    Unloading = false;
    end

if unloadingD
   Unloading = true; 
end
    
% 
%     if vEndIn
%      verticalMUXSEL(:) = 0;
%      end

% if hStartFlag
%     PaddingCount(:) = 1;
% %     if vStartFlag
% %         PaddingLine(:) = 1;
% %     else
% %         PaddingLine(:) =0;
% %         if PaddingLine == -1
% %             PaddingLine(:) = 0;
% %         end
% %     end
% elseif hEndFlag
%     PaddingCount(:) = 1;
% end


horMUX = horizontalMUXSEL;
% verMUX = verticalMUXSEL;