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;